簡體   English   中英

收集堆使用情況的性能數據

[英]Collecting performance data on heap usage

我正在開發一個編譯器模塊,它為應用程序中的每個加載/存儲添加額外的指令,重點是堆對象。 其中一個性能因素是被訪問對象的大小; 在運行時為不同的對象大小選擇不同的指令。

我從SPEC中選擇了一些基准來評估我的更改對性能的影響。 目前,我僅限於查看由perf測量的間接費用。 這導致大量猜測為什么某些基准比其他基准受到更嚴重的影響。 用更多數據支持每個假設似乎是一個很好的步驟。 從每個基准測試,對於在堆上分配的每個對象,知道以下內容將是有用的:

  • 每個堆分配或重新分配的大小
  • 在整個應用程序運行期間訪問每個分配的次數。

我在#1中取得了成功。 很容易將一些printf()調用注入到glibc中,因為我已經在修改glibc了。 我不知道如何獲得#2; 訪問計數似乎更適合框架或包裝工具,我不知道哪一個最適合。

您能否就如何收集這些信息提出建議?

如果你正在組裝中進行檢測(我認為你是?),你可以在數據段中粘貼一個帶有值的標簽:

        .data
# probably some other stuff goes here
        .align 4
count:
        .long   0

並按如下方式遞增:

        movl    count, %eax
        addl    $1, %eax
        movl    %eax, count

選擇合適的登記冊。 雖然我想如果你是在函數調用的頭部進行的,那么%eax無論如何都會被破壞。

Valgrind有一個工具'DHAT' - 動態堆分析工具 - 可以收集這些數據。輸出不完全符合我想要的格式,但它足夠接近研究工作。訪問計數總結為“平均值[讀取]寫入]每個分配每個字節“;不會報告確切的訪問計數,也不會從其他報告數據中恢復。也許我的未來會有一些開源開發?

http://valgrind.org/docs/manual/dh-manual.html

valgrind --tool=exp-dhat --show-top-n=100000 --trace-children=yes --log-file="log.file" ./benchmark

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM