摘要
建立取樣器工作階段,傳回 IOBuffer,其中含有為 使用中的 CPU。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_sampler_create(zx_resource_t rsrc
uint64_t options,
zx_sampler_config_t* config,
size_t config_size;
zx_handle_t* iob_out);
說明
zx_sampler_create()
會初始化全域單例模式取樣器,
會將範例寫入傳回的 IOBuffer。傳回的 iobuffer 也會
區域數量,等於系統上有效的 CPU 數
。每個緩衝區都是 config 中宣告的大小。
options 參數必須為 0。
config 參數必須是 zx_sampler_config_t。
設定
typedef struct {
// How long an individual cpu core will wait in nanoseconds between
// taking each sample. The minimum period is ZX_SAMPLER_MIN_PERIOD (10000ns).
zx_duration_t period;
// The requested size of the region in bytes. The size will be
// rounded up to the next system page size boundary, as reported by
// zx_system_get_page_size(). Use `zx_object_get_info` with topic
// `ZX_INFO_IOB_REGIONS` on the returned handle to determine the
// actual size of each region.
size_t buffer_size;
// The requested discipline of the returned iobuffer. See below for
// valid disciplines.
uint64_t iobuffer_discipline;
} zx_sampler_config_t;
呼叫端可能會要求將樣本寫入傳回的 IOBuffer
按照議定的 iobuffer 紀元目前,系統提供單一
支援的學科 ZX_IOB_DISCIPLINE_NONE (0)
,其運作方式是
如下:
附加執行緒並開始取樣後,每個 CPU 都會寫入 專屬區域的範例「發現」將繼續寫入 緩衝區,直到取樣停止或緩衝區空間已滿為止。
系統會讀取執行緒的電腦讀取樣本,並嘗試根據 藉由後續框架指標來查詢執行緒的 Backtrace。
樣本是以與 8 個位元組對齊的 FXT Large Blob 搭配中繼資料寫入。
酬載,其中包含從執行緒執行緒要求中取樣的電腦
0
的 FXT 標頭表示沒有其他資料。
為了安全地讀取緩衝區中的資料,讀取應先呼叫
zx_sampler_stop,藉此停止工作階段並傳回
將會寫入其他樣本接著,讀取器就能將地圖的每個區域
使用 zx_vmar_map_iob
執行 IOBuffer,並存取範例。
控制工作階段
取樣器是全球單例模式,最多只有一個工作階段 逐一活躍使用者藉由將傳回的 用於開始/停止/附加通話的 IOB。傳回的 IOBuffer 的 關閉最後一個控點後,工作階段就會停止並刪除。
權限
debug_resource 必須有基本資源種類 ZX_RSRC_KIND_SYSTEM
ZX_RSRC_SYSTEM_DEBUG_BASE
。
錯誤
ZX_ERR_NOT_SUPPORTED
kernel.enable-debugging-syscalls
未設為 true
請在核心指令列或實驗版_thread_sampler_enabled
build 參數未設為 true。
ZX_ERR_PERMISION_DENIED
rsrc 不是資源類型
以 ZX_RSRC_SYSTEM_DEBUG_BASE
為底數的 ZX_RSRC_KIND_SYSTEM
。
ZX_ERR_INVALID_ARGS
- options 不是 0
- 提供的 config 無效。詳情請見
預期設定的 zx_sampler_config_t。