本文件說明收集、儲存與 傳送 Fuchsia 追蹤記錄。 您可以使用這份文件搜尋詳細資訊 就會瞭解 Fuchsia 追蹤記錄格式的每個欄位。
總覽
追蹤記錄執行期間,追蹤記錄提供者會將記錄寫入追蹤記錄緩衝區 VMO 是以本文所述的二進位檔格式共用 VMO 文件。
這種二進位格式幾乎不會影響 寫入追蹤記錄時主體的效能。記錄 也能依序寫入,這樣如果追蹤記錄終止 (通常是 追蹤記錄管理員仍可復原部分追蹤記錄資料 讀取資料,也就是讀取最後格式正確的所有內容 。
隨著追蹤記錄的進展,追蹤記錄管理員會匯總所有記錄 參與追蹤記錄收集的追蹤服務供應商,並串連 與特定中繼資料記錄一起建立追蹤記錄封存。
追蹤記錄完成後,可使用 trace
指令列工具等工具
可以讀取追蹤記錄封存檔中的追蹤記錄,以視覺化方式呈現結果
或將檔案儲存至檔案
以便日後使用
功能
- 體積小
- 追蹤記錄資料是精簡的,可將資訊封裝至少量位元。
- 集區字串、程序和執行緒會進一步壓縮追蹤記錄資料。
- 已對齊記憶體
- 追蹤記錄會在記憶體中維持 8 位元組的對齊方式, 並直接將其寫入記憶體對應的 VMO
- 變數大小記錄
- 整體記錄大小上限為 32 KB。
- 大型物件可能需要細分為多份記錄。
- 可擴充
- 接著可視需要定義新記錄類型。
- 系統會略過無法辨識或格式錯誤的追蹤記錄。
編碼基元
Fuchsia 追蹤記錄格式具有下列編碼原始格式:
Atom
每筆記錄都會以原子序列建構。
每個原子都會以 8 位元組對齊編寫,且大小與 8 位元組的倍數,以便保留對齊。
原子有兩種:
- Word:64 位元值,可進一步細分為位元欄位。 系統將以機器文字順序儲存字詞 (目前所有文字都會採用小端序) 支援的架構)。
- 串流:一系列以零填充到下一個 8 個位元組的位元組序列 邊界。串流會依位元組順序儲存。內容完全相同的訊息串 長 8 位元組的倍數不會填補 (沒有零結束子)。
欄位是 64 位元 Words 的子區域,以
[<least significant bit> .. <most significant bit>]
,其中第一個和
也就是最後位元位置。所有未使用的位元都會保留供日後使用
且必須設為 0。
除非另有指定,否則 Words 和 Fields 會儲存無正負號的整數 寫入記錄格式
「串流」可能會儲存 UTF-8 字串或二進位資料,如 。
記錄
追蹤記錄是二進位編碼的追蹤記錄資訊,由 原子序列。
所有記錄都含有包含下列基本項目的標頭字詞 每個 ACL 都由一或多個項目組成 而這些項目包含兩項資訊
- Record type (記錄類型):用於識別記錄類型的 4 位元欄位 與其所含資訊請參閱記錄類型一文。
- 記錄大小:通常為 12 位元欄位,顯示字詞數量 (包含記錄內,共計 8 個位元組單位的倍數) 標題本身的屬性記錄大小上限為 4095 個字 (32760 個位元組)。非常簡單的記錄可能只有 1 個字 (8 位元組) 。 大型記錄會使用 32 位元大小欄位,因此具有較高的值 大小上限。
記錄長度一律是 8 位元組的倍數,並且會以 8 位元組對齊。
封存
追蹤記錄封存是串聯結尾的追蹤記錄記錄。 這個外掛程式能儲存追蹤服務供應商在追蹤記錄 搭配用於識別及分隔區段的中繼資料記錄 每個追蹤記錄供應商產生的追蹤記錄資料。
追蹤記錄封存檔案的用途是依序讀取,因為記錄中 可能影響記錄的解讀結果 這些資訊會顯示在追蹤記錄中追蹤系統提供工具 從追蹤記錄封存檔案擷取資訊,然後轉換為其他 圖表。
時間戳記
時間戳記是以硬體計數器衍生的 64 位元刻點表示。 追蹤記錄初始化記錄說明每秒跳動次數 即時顯示結果
根據預設,我們假設 1 點等於 1 奈秒。
字串參照
字串會編碼為字串 Refs,也就是事件的 16 位元值 以下表單:
- 空白字串:值為零。
- 索引字串:最顯著的位元為零。較低的 15 位元 表示字串資料表中的索引之前是使用 字串記錄。
- 內嵌字串:最重要的位元是一。較低的 15 位元 表示字串長度 (以位元組為單位)。字串的內容會隨即顯示 內嵌於記錄的另一部分,並依記錄格式指定。
為了讓追蹤記錄更簡潔、經常參照的字串,例如事件 類別和名稱常數,應登錄在字串資料表中 ,然後使用索引參照字串。
字串資料表中最多只能有 32767 個字串。如果此限制 但可透過替換現有項目來編碼其他字串 或是透過編碼內嵌字串的方式,
字串內容本身會在不終止的情況下以 UTF-8 串流的形式儲存。
字串理論上最多只能有 32767 個位元組,但在實際練習中 會進一步減少儲存完整記錄所需的空間 因此,我們會以保守的方式設定字串長度上限 32,000 個位元組。
討論串參照
執行緒和程序核心物件 ID (koids) 會編碼為執行緒參照 8 位元值,格式如下:
- 內嵌執行緒:值為零。執行緒和程序 koid 出現時 內嵌於記錄的另一部分,並依記錄格式指定。
- 已建立索引的執行緒:這個值不得為零。該值代表 之前透過執行緒記錄指派的執行緒資料表。
如要讓追蹤記錄更加精簡,必須註冊經常參照的執行緒 進入執行緒資料表中,然後以索引參照執行緒記錄。
字串資料表中最多只能有 255 個執行緒。如果此限制 數量,但可透過替換現有項目來編碼其他執行緒 或以內嵌方式編碼執行緒
使用者空間物件資訊
追蹤記錄可以包含使用者空間物件的註解 (任何可以 (例如 C++ 或 Dart 物件) 參照 使用者空間物件記錄形式。追蹤服務供應商通常會產生 這些記錄。
之後,任何參照相同指標的指標引數都會 與參照的註解建立關聯
這樣就能為人類可讀的標籤和其他資訊建立關聯。 而物件之後會顯示在追蹤記錄中。
核心物件資訊
追蹤記錄可以包含核心物件的註解 (任何可 使用 Zircon koid 參照,例如程序、管道或活動) 核心物件記錄形式。追蹤服務供應商通常會產生 。
之後,任何參照相同 Kid 的核心物件 ID 引數都會 與參照的註解建立關聯
這樣就能為人類可讀的標籤和其他資訊建立關聯。 而物件之後會顯示在追蹤記錄中。
具體來說,這是追蹤系統將名稱與程序建立關聯的方式 和執行緒執行緒
引數
引數是型別鍵/值組合。
許多記錄類型最多可將 15 個引數附加至記錄 提供開發人員提供的額外資訊。
引數會以大小開頭,就像平常的記錄一樣,因此無法辨識 引數類型
詳情請參閱引數類型。
擴充格式
您可以按照下列方式擴充追蹤記錄格式:
- 定義新的記錄類型。
- 在現有記錄類型的保留欄位中儲存新資訊。
- 在現有的記錄類型中附加新資訊 (有 即可偵測記錄的大小和酬載。
- 定義新引數類型。
記錄類型
記錄類型如下:
- 記錄標頭
- 大型記錄標頭
- 中繼資料記錄 (記錄類型 = 0)
- 初始化記錄 (記錄類型 = 1)
- 字串記錄 (記錄類型 = 2)
- 執行緒記錄 (記錄類型 = 3)
- 事件記錄 (記錄類型 = 4)
- Blob 記錄 (記錄類型 = 5)
- 使用者空間物件記錄 (記錄類型 = 6)
- 核心物件記錄 (記錄類型 = 7)
- 排程記錄 (記錄類型 = 8)
- 記錄檔記錄 (記錄類型 = 9)
- 大型 BLOB 記錄 (記錄類型 = 15,大型類型 = 0)
記錄標頭
所有記錄都包含這個標頭,用於指定記錄類型和大小 以及 48 位元的資料,用量會因記錄類型而異。
格式
字句
[0 .. 3]
:記錄類型[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 63]
:因記錄類型而異 (如未使用,必須為零)
大型記錄標頭
為大於 32 KB 的記錄提供支援。大型記錄中有一個 32 位元大小欄位,而不是一般的 12 位元。
字句
[0 .. 3]
:記錄類型 (15)[4 .. 35]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[36 .. 39]
:記錄類型較大[40 .. 63]
:因記錄類型而異 (如未使用,必須為零)
中繼資料記錄 (記錄類型 = 0)
提供後續追蹤記錄資料的相關中繼資料。
這個記錄類型會保留給 trace Manager 在產生時使用 追蹤記錄封存檔不得由追蹤服務供應商自行發出。 如果追蹤記錄管理員在產生的追蹤記錄中遇到中繼資料記錄 就會將其視為垃圾並略過
中繼資料記錄子類型有多種,每種子類型分別包含不同的 可能不準確或不適當
格式
字句
[0 .. 3]
:記錄類型 (0)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:中繼資料類型[20 .. 63]
:因中繼資料類型而異 (如未使用,必須為零)
供應商資訊中繼資料 (metadata 類型 = 1)
此中繼資料可識別出有提供資訊的追蹤程式 追蹤記錄
位於供應商專區中繼資料之後的所有資料 供應商資訊中繼資料的擷取來源必須是 透過相同的供應商
格式
字句
[0 .. 3]
:記錄類型 (0)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:中繼資料類型 (1)[20 .. 51]
:提供者 ID (用於在追蹤記錄中識別提供者的權杖)[52 .. 59]
:名稱長度 (以位元組為單位)[60 .. 63]
:預留參數 (必須是零)
供應商名稱串流
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
供應商版面中繼資料 (metadata type = 2)
這個中繼資料限制了從該來源取得的追蹤記錄區段 不同的供應商
位於供應商專區中繼資料之後的所有資料 提供者資訊中繼資料會假設為收集 同一個供應商
讀取追蹤記錄時,包含來自不同來源的追蹤記錄累計 追蹤提供者,讀取器必須分別維護每個供應器的狀態 追蹤記錄 (例如初始化資料、字串資料表、執行緒資料表、 userspace 物件資料表和核心物件資料表),並切換結構定義 擷取新的供應商區段中繼資料記錄。
格式
字句
[0 .. 3]
:記錄類型 (0)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:中繼資料類型 (2)[20 .. 51]
:提供者 ID (用於在追蹤記錄中識別提供者的權杖)[52 .. 63]
:預留參數 (必須是零)
供應商事件中繼資料 (metadata type = 3)
這類中繼資料可提供供應器事件的執行通知 想要檢舉該使用者。
這筆記錄可能會出現在輸出內容中的任何位置,且未限制什麼內容 或是後面的內容
格式
字句
[0 .. 3]
:記錄類型 (0)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:中繼資料類型 (3)[20 .. 51]
:提供者 ID (用於在追蹤記錄中識別提供者的權杖)[52 .. 55]
:事件 ID[56 .. 63]
:預留參數 (必須是零)
活動
定義下列事件。
0
:緩衝區已填滿,記錄可能遭到捨棄
追蹤資訊中繼資料 (中繼資料類型 = 4)
這項中繼資料會提供整個追蹤記錄的資訊,這項記錄是 未與特定提供者建立關聯
格式
字句
[0 .. 3]
:記錄類型 (0)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:中繼資料類型 (4)[20 .. 23]
:追蹤記錄資訊類型[24 .. 63]
:因追蹤記錄資訊類型而異 (如未使用,必須為零)
魔術數字記錄 (追蹤記錄資訊類型 = 0)
此記錄可做為二進位資料位於 Fuchsia 中的指標
追蹤格式。通常應會在追蹤記錄的起始位置顯示。它承載著
沒有其他資訊魔法數字 0x16547846
是「FxT」字串
後面是隨機選擇的位元組
要讓系統將追蹤記錄的前八位元組視為神奇指令 不考量內部記錄結構,則此記錄類型是 無法延伸。記錄不得包含標頭以外的任何字詞 字詞,且沒有保留欄位。為八位元組的數字 紀錄的值為 0x0016547846040010。
請注意,該值的位元組順序,以及追蹤記錄中所有其他字詞。 取決於寫入追蹤記錄的系統順序。少一點 前八位元組是 10 00 04 46 78 54 16 00。使用 倒數則是 00 16 54 78 46 04 00 10
格式
字句
[0 .. 3]
:記錄類型 (0)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示 (1)[16 .. 19]
:中繼資料類型 (4)[20 .. 23]
:追蹤記錄資訊類型 (0)[24 .. 55]
:魔法數字 0x16547846[56 .. 63]
:零
初始化記錄 (記錄類型 = 1)
提供解讀後續記錄所需的參數。不限 讀取器可能會假設 1 點是 1 奈秒。
格式
字句
[0 .. 3]
:記錄類型 (1)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 63]
:預留參數 (必須是零)
貼圖調節係數
[0 .. 63]
:每秒滴答數
字串記錄 (記錄類型 = 2)
註冊字串資料表中的字串,指派該字串的
範圍:0x0001
到 0x7fff
。註冊資料將取代所有先前的註冊約期
的值。
嘗試設定字串索引 0x0000
值的字串記錄必須是
會被忽略,因為此值是保留來代表空字串。
包含空白字串的字串記錄必須接受容許處理,但 因為空字串可以直接在字串參照中編碼為零,所以沒有點。
格式
字句
[0 .. 3]
:記錄類型 (2)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 30]
:字串索引 (範圍 0x0001 到 0x7fff)[31]
:一律為零 (0)[32 .. 46]
:字串長度,以位元組為單位 (範圍 0x0000 到 0x7fff)[47]
:一律為零 (0)[48 .. 63]
:預留參數 (必須是零)
字串值串流
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
執行緒記錄 (記錄類型 = 3)
在執行緒資料表中註冊程序 ID 和執行緒 ID 組合,並為其指派
執行緒索引的範圍介於 0x01
到 0xff
之間。註冊會取代所有
先前註冊指定的執行緒索引。
下個單元
系統會保留執行緒索引 0x00
,以表示在
參照討論串嘗試設定這個值值的執行緒記錄
。
格式
字句
[0 .. 3]
:記錄類型 (3)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 23]
:執行緒索引 (從未 0x00)[24 .. 63]
:預留參數 (必須是零)
處理程序 ID 文字
[0 .. 63]
:程序 koid (核心物件 ID)
執行緒 ID 字詞
[0 .. 63]
:執行緒 koid (核心物件 ID)
事件記錄 (記錄類型 = 4)
描述已加上時間戳記的事件。
這項記錄包含一些活動相關基本資訊,包括: 事件引數和事件子類型發生的時間和位置 特定資料。
格式
字句
[0 .. 3]
:記錄類型 (4)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:事件類型[20 .. 23]
:引數數目[24 .. 31]
:執行緒 (執行緒參照)[32 .. 47]
:Category (字串參照)[48 .. 63]
:name (字串參照)
時間戳記字詞
[0 .. 63]
:刻點數
process id word (除非執行緒參照表示內嵌執行緒,否則省略)
[0 .. 63]
:程序 koid (核心物件 ID)
Thread id word (除非討論串參照表示內嵌執行緒,否則省略)
[0 .. 63]
:執行緒 koid (核心物件 ID)
類別串流 (除非字串代表內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數資料 (每個引數重複)
- (請見下方)
事件類型專屬資料
- 可以是下列任一值:
即時事件 (事件類型 = 0)
標示這個執行緒中的時刻。等同於 Zircon 進行核心探測。
格式
不需要事件類型專屬資料。
計數器事件 (事件類型 = 1)
將每個引數的樣本值記錄為關聯時間序列中的資料 計數器的名稱和 ID這些值會以圖形形式呈現 堆疊面積圖
格式
計數器字詞
[0 .. 63]
:計數器 ID
持續時間開始事件 (事件類型 = 2)
標示特定執行緒上的作業開始。必須進行比對 設定持續時間結束事件。可採用巢狀結構。
格式
不需要事件類型專屬資料。
持續結束事件 (事件類型 = 3)
標示特定執行緒上的作業結束。
格式
不需要事件類型專屬資料。
持續時間完成事件 (事件類型 = 4)
標示特定執行緒上作業的開頭和結尾。
格式
結束時間字詞
[0 .. 63]
:滴答的結束時間
非同步開始事件 (事件類型 = 5)
標示可能橫跨執行緒的作業開頭。必須進行比對 非同步結束事件 (使用相同非同步關聯 ID)。
格式
非同步相關字詞
[0 .. 63]
:非同步關聯 ID
非同步即時事件 (事件類型 = 6)
標示某個作業中的時刻,且該時刻可能會跨越執行緒。必須出現 非同步開始事件和非同步結束事件之間 關聯性 ID。
格式
非同步相關字詞
[0 .. 63]
:非同步關聯 ID
非同步結束事件 (事件類型 = 7)
標示可能橫跨執行緒的作業結尾。
格式
非同步相關字詞
[0 .. 63]
:非同步關聯 ID
流程開始事件 (事件類型 = 8)
標記作業的開始,這項作業會產生一系列動作 可能會橫跨多個執行緒或抽象層必須與 流程結束事件。而這一切 以箭頭表示持續時間活動
流程開頭與封閉的時間長度事件相關聯 ;則是從封閉的時間長度事件結束的位置開始。
格式
流動詞
[0 .. 63]
:流程關聯性 ID
流程步驟事件 (事件類型 = 9)
標示流程中的點。
此步驟與此執行緒的封閉持續時間事件相關聯; 流程會從封閉的持續時間事件開始時,繼續執行 加到包含時間長度事件事件結束的位置。
格式
流動詞
[0 .. 63]
:流程關聯性 ID
流程結束事件 (事件類型 = 10)
標示資料流的結尾。
流程的結尾與此傳入的持續時間事件相關聯 討論串;流程會從封閉的持續時間事件開始恢復。
格式
流動詞
[0 .. 63]
:流程關聯性 ID
BLOB 記錄 (記錄類型 = 5)
提供要納入追蹤記錄的非解讀大量資料。可用的值包括 以嵌入其他格式,嵌入擷取的追蹤記錄資料。
blob 名稱可明確識別追蹤記錄中的不同 blob 資料串流。 透過寫入多個同名的 blob 記錄,額外增加部分 資料可附加至先前建立的 BLOB。
BLOB 類型表示 BLOB 的內容表示法。
格式
字句
[0 .. 3]
:記錄類型 (5)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:blob 名稱 (字串參照)[32 .. 46]
:blob 酬載大小,以位元組為單位 (不含邊框間距)[47 .. 47]
:預留參數 (必須是零)[48 .. 55]
:blob 類型[56 .. 63]
:預留參數 (必須是零)
blob 名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
酬載串流 (變數大小)
- 二進位資料,在 0 至 8 位元組對齊的情況下填充
Blob 類型
已定義下列 blob 類型:
TRACE_BLOB_TYPE_DATA
=0x01
:原始的無類型資料。消費者必須知道 可能根據上下文而有所幫助TRACE_BLOB_TYPE_LAST_BRANCH
=0x02
:Intel Performance Monitor 的上次分支版本記錄。 格式會依照 CPU 效能 監控TRACE_BLOB_TYPE_PERFETTO =
0x03`:blob 包含從 Perfetto 朗讀元件。資料編碼採用 Perfetto 的 Proto 格式:
使用者空間物件記錄 (記錄類型 = 6)
說明使用者空間物件、為其指派標籤,以及選擇是否要建立關聯 做為引數系統會新增物件相關資訊 將查詢轉換為個別程序的 userspace 物件資料表
當追蹤記錄取用者遇到含有指標引數的事件,且該事件有 值符合程序物件表格中的項目,它可以交叉參照 透過先前的使用者空間物件記錄找出引數的指標值,以找出 參考資料。
格式
字句
[0 .. 3]
:記錄類型 (6)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 23]
:程序 (執行緒參照)[24 .. 39]
:name (字串參照)[40 .. 43]
:引數數目[44 .. 63]
:預留參數 (必須是零)
指標字詞
[0 .. 63]
:指標值
process id word (除非執行緒參照表示內嵌執行緒,否則省略)
[0 .. 63]
:程序 koid (核心物件 ID)
名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數資料 (每個引數重複)
- (請見下方)
核心物件記錄 (記錄類型 = 7)
說明核心物件、為其指派標籤,以及選擇是否要建立關聯 做為引數系統會新增物件相關資訊 加入全域核心物件資料表
當追蹤記錄取用者遇到含有 koid 引數的事件時 且值符合核心物件表格中的項目,則 將引數的 koid 值與先前的核心物件記錄交叉參照 可看到參照項目的說明。
格式
字句
[0 .. 3]
:記錄類型 (7)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 23]
:核心物件類型 (來自 zircon/syscalls/types.h[24 .. 39]
:name (字串參照)[40 .. 43]
:引數數目[44 .. 63]
:預留參數 (必須是零)
核心物件 ID 字詞
[0 .. 63]
:Kid (核心物件 ID)
名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數資料 (每個引數重複)
- (請見下方)
引數大會
按照慣例,追蹤寫入者應包含下列具名引數 編寫特定型別物件的核心物件記錄時。這個 可協助追蹤消費者連結核心物件之間的關係。
"process"
:針對ZX_OBJ_TYPE_THREAD
物件,指定 包含執行緒的處理程序
排程記錄 (記錄類型 = 8)
說明排程事件,例如喚醒執行緒的時間或背景資訊 或是切換至其他討論串
格式
+---------(4)--------------+--------(48)--------+--(8)--+-(4)-+
| scheduling record type | <type specific> | size | 8 |
+--------------------------+--------------------+-------+-----+
字句
[0 .. 3]
:記錄類型 (8)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 59]
:安排記錄類型特定資料[60 .. 63]
:排程記錄類型
情境切換記錄 (排程事件記錄類型 = 1)
格式
+-(4)-+----(20)---+--------(4)-------+----(16)---+-------(4)-------+----(8)--+-(4)-+
| 1 | reserved | out thread state | cpu | argument count | size | 8 |
+-----+-----------+------------------+-----------+-----------------+---------+-----+
+---------------------------(64)------------------------------+
| timestamp |
+-------------------------------------------------------------+
+---------------------------(64)------------------------------+
| outgoing thread id |
+-------------------------------------------------------------+
+---------------------------(64)------------------------------+
| incoming thread id |
+-------------------------------------------------------------+
+--------------------------(...)------------------------------+
| argument data |
+-------------------------------------------------------------+
字句
[0 .. 3]
:記錄類型 (8)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:引數數量[20 .. 35]
:CPU 號碼[36 .. 39]
:傳出執行緒狀態[40 .. 59]
:已預訂[60 .. 63]
:排程記錄類型 (1)
時間戳記字詞
[0 .. 63]
:刻點數
外部執行緒 ID
[0 .. 63]
:執行緒 koid (核心物件 ID)
傳入執行緒 ID
[0 .. 63]
:執行緒 koid (核心物件 ID)
引數資料 (每個引數的重複)
- (請參閱引數一節,瞭解引數格式)
引數大會
按照慣例,追蹤寫入者也可以視需要加入下列名稱: 引數,以提供追蹤的額外資訊 。
執行緒喚醒記錄 (排程事件記錄類型 = 2)
格式
+-(4)-+----(24)---+----(16)---+-------(4)-------+----(8)--+-(4)-+
| 2 | reserved | cpu | argument count | size | 8 |
+-----+-----------+-----------+-----------------+---------+-----+
+---------------------------(64)------------------------------+
| timestamp |
+-------------------------------------------------------------+
+---------------------------(64)------------------------------+
| waking thread id |
+-------------------------------------------------------------+
+--------------------------(...)------------------------------+
| argument data |
+-------------------------------------------------------------+
字句
[0 .. 3]
:記錄類型 (8)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 19]
:引數數。[20 .. 35]
:CPU 編號。[60 .. 63]
:排程記錄類型 (2)
時間戳記字詞
[0 .. 63]
:刻點數
喚醒執行緒 ID
[0 .. 63]
:執行緒 koid (核心物件 ID)
引數資料 (每個引數的重複)
- (請參閱引數一節,瞭解引數格式)
引數大會
按照慣例,追蹤寫入者也可以視需要加入下列名稱: 引數,以提供追蹤的額外資訊 。
"weight"
:Int32
說明喚醒執行緒的相對權重
舊版內容切換記錄 (關聯切換記錄類型 = 0)
隨著 Fuchsia 的日程改變,這項記錄已失效 情境切換模型但為了維持回溯相容性,
記錄會指定傳出執行緒的新狀態: 內容切換根據定義,傳入執行緒的新狀態是 「跑步」因為執行個體剛恢復運作
格式
[0 .. 3]
:記錄類型 (8)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 23]
:CPU 號碼[24 .. 27]
:傳出執行緒狀態 (下列任何值,但「Running」除外)[28 .. 35]
:傳出執行緒 (執行緒參照)[36 .. 43]
:傳入執行緒 (執行緒參照)[44 .. 51]
:傳出執行緒優先順序[52 .. 59]
:傳入執行緒優先順序[60 .. 63]
:排程記錄類型 (0)
時間戳記字詞
[0 .. 63]
:刻點數
傳出程序 ID 字詞 (除非傳出執行緒參照表示內嵌執行緒,否則省略)
[0 .. 63]
:程序 koid (核心物件 ID)
傳出執行緒 ID 文字 (除非外寄執行緒參照表示內嵌執行緒,否則省略)
[0 .. 63]
:執行緒 koid (核心物件 ID)
隨附程序 ID 字詞 (除非傳入執行緒 表示為內嵌執行緒,否則省略)
[0 .. 63]
:程序 koid (核心物件 ID)
傳入執行緒 ID 字詞 (除非傳入執行緒 表示為內嵌執行緒,否則省略)
[0 .. 63]
:執行緒 koid (核心物件 ID)
執行緒狀態
執行緒狀態已定義如下:
0
:最新1
:跑步2
:已暫停3
:已封鎖4
:即將死亡5
:已死
這些值會與ZX_THREAD_STATE_XXX
zircon/syscalls/object.h.
記錄檔記錄 (記錄類型 = 9)
說明在特定時間寫入記錄的訊息。
格式
字句
[0 .. 3]
:記錄類型 (9)[4 .. 15]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 30]
:記錄訊息長度 (以位元組為單位,範圍 0x0000 到 0x7fff)[31]
:一律為零 (0)[32 .. 39]
:執行緒 (執行緒參照)[40 .. 63]
:預留參數 (必須是零)
時間戳記字詞
[0 .. 63]
:刻點數
process id word (除非執行緒參照表示內嵌執行緒,否則省略)
[0 .. 63]
:程序 koid (核心物件 ID)
Thread id word (除非討論串參照表示內嵌執行緒,否則省略)
[0 .. 63]
:執行緒 koid (核心物件 ID)
記錄訊息串流
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
大型 BLOB 記錄 (記錄類型 = 15,大型型別 = 0)
提供要嵌入追蹤記錄中的大型二進位 BLOB 資料。這項服務 使用大型記錄標頭。
大型 BLOB 記錄支援多種不同格式。這些 格式可用於不同的 BLOB 資料和中繼資料類型 包含在記錄中。
格式
字句
[0 .. 3]
:記錄類型 (15)[4 .. 35]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[36 .. 39]
:大型記錄類型 (0)[40 .. 43]
:blob 格式類型[44 .. 63]
:預留值,必須是零
在頻帶大型 Blob 記錄 (含有中繼資料) 中 (blob 格式 = 0)
這個類型包含記錄中的 blob 資料和中繼資料 機器學習是向機器提供資料和答案 讓機器自行探索規則的科學中繼資料包含時間戳記、執行緒/程序 資訊、引數和引數
這個名稱應足以識別包含的資料類型 空白部分。
格式
字句
[0 .. 3]
:記錄類型 (15)[4 .. 35]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[36 .. 39]
:大型記錄類型 (0)[40 .. 43]
:blob 格式類型 (0)[44 .. 63]
:預留值,必須是零
標題文字格式
[0 .. 15]
:Category (字串參照)[16 .. 31]
:name (字串參照)[32 .. 35]
:引數數目[36 .. 43]
:執行緒 (執行緒參照)[44 .. 63]
:預留值,必須是零
類別串流 (除非字串代表內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
時間戳記字詞
[0 .. 63]
:刻點數
process id word (除非執行緒參照表示內嵌執行緒,否則省略)
[0 .. 63]
:程序 koid (核心物件 ID)
Thread id word (除非討論串參照表示內嵌執行緒,否則省略)
[0 .. 63]
:執行緒 koid (核心物件 ID)
引數資料 (每個引數重複)
- (請見下方)
blob 大小文字
[0 .. 63]
:blob 酬載大小,以位元組為單位 (不含邊框間距)
酬載串流 (變數大小)
- 二進位資料,在 0 至 8 位元組對齊的情況下填充
在頻帶大型 Blob 記錄沒有中繼資料 (blob 格式 = 1)
這個類型包含記錄本身的 blob 資料, 但不包括中繼資料記錄中只有 類別和名稱
這個名稱應足以識別包含的資料類型 空白部分。
格式
字句
[0 .. 3]
:記錄類型 (15)[4 .. 35]
:記錄大小 (含這個字詞),以 8 個位元組的倍數表示[36 .. 39]
:大型記錄類型 (0)[40 .. 43]
:blob 格式類型 (1)[44 .. 63]
:預留值,必須是零
標題文字格式
[0 .. 15]
:Category (字串參照)[16 .. 31]
:name (字串參照)[32 .. 63]
:預留值,必須是零
類別串流 (除非字串代表內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
blob 大小文字
[0 .. 63]
:blob 酬載大小,以位元組為單位 (不含邊框間距)
酬載串流 (變數大小)
- 二進位資料,在 0 至 8 位元組對齊的情況下填充
引數類型
引數會與型別的鍵和值資料記錄建立關聯。兩者搭配使用 包含事件記錄和使用者空間物件記錄,以及 核心物件記錄。
每個引數都包含一個字詞標頭,後面接著變數數字 輸入字詞在多數情況下,標頭本身就足以進行編碼 引數的內容
引數類型如下:
引數標題
所有引數都包含這個標頭,用來指定引數的類型, 命名、大小和大小,以及 32 位元的資料,用量會因資料而異 引數型別。
格式
引數標題文字
[0 .. 3]
:引數類型[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:不同 (如未使用,必須為 0)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
空值引數 (引數類型 = 0)
代表僅出現在名稱中的引數,不含任何值。
格式
引數標題文字
[0 .. 3]
:引數類型 (0)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
32 位元正負號整數引數 (引數類型 = 1)
代表 32 位元帶正負號整數。
格式
引數標題文字
[0 .. 3]
:引數類型 (1)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:32 位元帶正負號整數
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
32 位元無正負號整數引數 (引數類型 = 2)
代表 32 位元無正負號整數。
格式
引數標題文字
[0 .. 3]
:引數類型 (2)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:32 位元無正負號整數
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
64 位元帶正負號整數引數 (引數類型 = 3)
代表 64 位元帶正負號整數。如果值符合 32 位元 請改用 32 位元帶正負號整數引數類型。
格式
引數標題文字
[0 .. 3]
:引數類型 (3)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數值字詞
[0 .. 63]
:64 位元帶正負號整數
64 位元無正負號整數引數 (引數類型 = 4)
代表 64 位元無正負號整數。如果值符合 32 位元 請改用 32 位元無正負號整數引數類型。
格式
引數標題文字
[0 .. 3]
:引數類型 (4)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數值字詞
[0 .. 63]
:64 位元無正負號整數
雙精度浮點引數 (引數類型 = 5)
代表雙精度浮點數。
格式
引數標題文字
[0 .. 3]
:引數類型 (5)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數值字詞
[0 .. 63]
:雙精度浮點數
字串引數 (引數類型 = 6)
代表字串值。
格式
引數標題文字
[0 .. 3]
:引數類型 (6)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 47]
:引數值 (字串參照)[48 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數值串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
指標引數 (引數類型 = 7)
代表指標值。關於此來源的其他資訊 由與同一指標相關聯的使用者空間物件記錄提供。
格式
引數標題文字
[0 .. 3]
:引數類型 (7)[4 .. 15]
:引數大小 (包含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數值字詞
[0 .. 63]
:指標值
核心物件 ID 引數 (引數類型 = 8)
代表 Koid (核心物件 ID)。有關 參照來源則可透過與核心物件記錄相關聯的 相同的 koid
格式
引數標題文字
[0 .. 3]
:引數類型 (8)[4 .. 15]
:引數大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:預留參數 (必須是零)
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充
引數值字詞
[0 .. 63]
:Kid (核心物件 ID)
布林引數 (引數類型 = 9)
代表布林值。
格式
引數標題文字
[0 .. 3]
:引數類型 (9)[4 .. 15]
:引數大小 (含這個字詞),以 8 個位元組的倍數表示[16 .. 31]
:引數名稱 (字串參照)[32 .. 63]
:1 位元填充零
引數名稱串流 (除非字串 ref 表示內嵌字串,否則會省略)
- UTF-8 字串,在零至 8 位元組對齊的情況下填充