[英]What is the exactly Perf buffer size?
在閱讀perf_event_open()
的手冊之后,我對捕獲采樣事件中的緩沖區大小有一些疑問。
在說明部分,它說
采樣事件會定期將測量結果寫入緩沖區,然后可以通過mmap(2)訪問該緩沖區。
當緩沖區溢出時,PMU將觸發PMI,我們可以通過mmap()
系統調用訪問緩沖區的內容。 (我的理解正確嗎?)
但是問題是,Perf緩沖區有多大? 我可以設置一個新值(緩沖區長度)來覆蓋它嗎?
struct perf_event_mmap_page
中的變量__u64 data_size
僅指示這次的記錄大小。
當您說可以使用mmap
定期收集性能數據時,您的理解是正確的。
在開始之前, perf
使用兩個緩沖區來記錄不同類型的事件。 在主環形緩沖區(環形緩沖區包含此輔助緩沖區)下使用輔助緩沖區來存儲不同類型的事件信息 。 由於您是在詢問有關主要性能緩沖區的問題,因此我將盡力回答。
您可以修改perf
緩沖區大小。 具體根據文檔中, perf
緩沖器大小以頁來定義。 它定義為1 + 2 ^ n頁,其中需要一頁來存儲有關perf
使用的環形緩沖區的元數據。
當您嘗試使用perf record
記錄事件時(請閱讀perf record
的聯機幫助頁),您將擁有一個-m
開關,該開關可讓您指定增加/減少perf環形緩沖區的頁面數。 您指定的(mmap)頁數必須是2的冪。(但是,您也可以直接指定大小)將頁數增加1將使環形緩沖區的大小增加4 kB (即大小,在代碼中由1 << 12指定)。
但是,據我所知,此頁數只能達到2 ^ 31 。 此外,使用如此大的緩沖區將有可能根本不記錄任何事件或記錄任意事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.