假設我正在將大塊數據讀入內存並按順序處理它們。有沒有辦法通過使用某種可以記錄內存地址訪問的系統工具來查明給定段/內存塊的訪問時間?如何測量訪問內存中一部分數據的時間點?
我正在考慮的一種方法 - 它不依賴於測量事業 - 被記錄在任何時間點正在處理什麼數據,並推斷基於觀察數據本身的使用。但這不是一個通用的解決方案。
假設我正在將大塊數據讀入內存並按順序處理它們。有沒有辦法通過使用某種可以記錄內存地址訪問的系統工具來查明給定段/內存塊的訪問時間?如何測量訪問內存中一部分數據的時間點?
我正在考慮的一種方法 - 它不依賴於測量事業 - 被記錄在任何時間點正在處理什麼數據,並推斷基於觀察數據本身的使用。但這不是一個通用的解決方案。
這些都是一些已經醞釀在我的頭上做你想要什麼想法。儘管如此,從來沒有時間去探索這些細節。
最簡單的方法是添加watchpoint爲GDB內部地址,如果你需要速戰速決一種解決方案。
另一種方式做,這是READONLY標記頁要檢查訪問數據塊。在Linux上,可以使用mprotect調用來完成。這假定你正在調試這個代碼,因爲訪問頁面會導致段錯誤。你可能會安裝一個信號處理程序。
另一種方法可能會對我們的系統調用ptrace,這可能比它的價值更麻煩。
如果你只是想計算訪問,你可以在新的Linux內核使用perf_event_open系統調用的內存地址。請參閱PERF_COUNT_HW_CACHE_OP_READ和PERF_COUNT_HW_CACHE_OP_WRITE的文檔。儘管如此,你仍然獨自一人。使用這種方法可能更不值得。但是,由於該問題標有性能標記,因此您可能正在尋找這個問題。
如果您只是想要一個系統工具,您可能需要查看perf工具並深入瞭解手冊,以查看它是否可以執行與我在perf_event_open中描述的相同的操作。這個工具是圍繞這個系統調用的一個包裝,所以我猜測它應該支持我在前面提到的功能。
這看起來像一組有趣的方法。我會檢查出來的。順便說一下,我應該提到我正在運行的程序在JVM上。 – pramodbiligiri