2017-06-16 137 views
0

當我讀取perf_event_open()manual之後,我有一些關於捕獲採樣事件中緩衝區大小的問題。什麼是Perf緩衝區大小?

在描述中部分,它說,

的取樣事件週期性地寫入測量然後可以經由MMAP(2)訪問的 緩衝器。

當緩衝區溢出時,PMU會觸發PMI,我們可以通過mmap()系統調用來訪問緩衝區的內容。 (我的理解是否正確?)

但問題是,Perf緩衝區有多大?我可以設置一個新的值(緩衝區長度)來覆蓋它嗎?

變量__u64 data_sizestruct perf_event_mmap_page中只表示此時的記錄大小。

回答

1

當您說您可以使用mmap定期收集perf數據時,您的理解是正確的。

在我開始之前,perf使用兩個緩衝區來記錄不同類型的事件。 在主環形緩衝區(環形緩衝區包含此輔助緩衝區)下使用輔助緩衝區,以存儲不同種類的事件信息。既然你問我主要的性能緩衝區,我會嘗試回答這個問題。

您可以修改perf緩衝區大小。根據文檔,perf緩衝區大小根據頁面定義。它被定義爲1 + 2^n頁面,其中需要一個頁面來存儲關於perf使用的環形緩衝區的元數據。

當您嘗試記錄事件,使用perf record,(閱讀PERF記錄手冊頁),你將有一個開關-m這將允許您指定的網頁,這將增加/減少PERF環形緩衝區數量。您指定的(mmap)頁面的數量必須是的功率(但您也可以直接指定大小)將頁數增加1將增加環形緩衝區大小4kB(其中是頁面大小,在代碼中由12)指定。

但是,據我所知,這個頁數只會達到2^31。而且,使用如此巨大的緩衝區將不會有記錄任何事件或記錄任意事件的風險。

+0

感謝您的回答,我明白了。 :) –