struktur EVENT_TRACE_HEADER (evntrace.h)
Struktur EVENT_TRACE_HEADER berisi informasi pelacakan peristiwa standar yang umum untuk semua peristiwa yang ditulis oleh TraceEvent.
Sintaks
typedef struct _EVENT_TRACE_HEADER {
USHORT Size;
union {
USHORT FieldTypeFlags;
struct {
UCHAR HeaderType;
UCHAR MarkerFlags;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
union {
ULONG Version;
struct {
UCHAR Type;
UCHAR Level;
USHORT Version;
} Class;
} DUMMYUNIONNAME2;
ULONG ThreadId;
ULONG ProcessId;
LARGE_INTEGER TimeStamp;
union {
GUID Guid;
ULONGLONG GuidPtr;
} DUMMYUNIONNAME3;
union {
struct {
ULONG KernelTime;
ULONG UserTime;
} DUMMYSTRUCTNAME;
ULONG64 ProcessorTime;
struct {
ULONG ClientContext;
ULONG Flags;
} DUMMYSTRUCTNAME2;
} DUMMYUNIONNAME4;
} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;
Anggota
Size
Jumlah total byte peristiwa. Ukuran mencakup ukuran struktur header, ditambah ukuran data khusus peristiwa apa pun yang ditambahkan ke header .
Pada input, ukurannya harus kurang dari ukuran buffer sesi pelacakan peristiwa dikurangi 72 (0x48).
Pada output, jangan gunakan angka ini dalam perhitungan.
DUMMYUNIONNAME
DUMMYUNIONNAME.FieldTypeFlags
Dicadangkan.
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.HeaderType
Dicadangkan.
DUMMYUNIONNAME.DUMMYSTRUCTNAME.MarkerFlags
Dicadangkan.
DUMMYUNIONNAME2
DUMMYUNIONNAME2.Version
Ini adalah roll-up anggota Kelas. Byte urutan rendah berisi Jenis, byte berikutnya berisi Tingkat, dan dua byte terakhir berisi versi.
DUMMYUNIONNAME2.Class
DUMMYUNIONNAME2.Class.Type
Jenis peristiwa. Penyedia dapat menentukan jenis peristiwa mereka sendiri atau menggunakan jenis peristiwa yang telah ditentukan sebelumnya yang tercantum dalam tabel berikut.
EVENT_TRACE_TYPE_CHECKPOINT: Peristiwa titik pemeriksaan. Gunakan untuk peristiwa yang tidak berada di awal atau akhir aktivitas.
EVENT_TRACE_TYPE_DC_END: Peristiwa akhir pengumpulan data.
EVENT_TRACE_TYPE_DC_START: Peristiwa mulai pengumpulan data.
EVENT_TRACE_TYPE_DEQUEUE: Membatalkan antrean peristiwa. Gunakan saat aktivitas diantrekan sebelum dimulai. Gunakan EVENT_TRACE_TYPE_START untuk menandai waktu saat item kerja diantrekan. Gunakan jenis peristiwa penghapusan antrean untuk menandai waktu saat pekerjaan pada item benar-benar dimulai. Gunakan EVENT_TRACE_TYPE_END untuk menandai waktu saat pekerjaan pada item selesai.
EVENT_TRACE_TYPE_END: Akhiri peristiwa. Gunakan untuk melacak status akhir peristiwa multi-langkah.
EVENT_TRACE_TYPE_EXTENSION: Peristiwa ekstensi. Gunakan untuk peristiwa yang merupakan kelanjutan dari peristiwa sebelumnya. Misalnya, gunakan jenis peristiwa ekstensi saat jejak peristiwa merekam lebih banyak data daripada yang dapat dimuat dalam buffer sesi.
EVENT_TRACE_TYPE_INFO: Peristiwa informasi. Ini adalah jenis peristiwa default.
EVENT_TRACE_TYPE_REPLY: Peristiwa balasan. Gunakan saat aplikasi yang meminta sumber daya dapat menerima beberapa respons. Misalnya, jika aplikasi klien meminta URL, dan server web membalas dengan mengirim beberapa file, setiap file yang diterima dapat ditandai sebagai peristiwa balasan.
EVENT_TRACE_TYPE_START: Mulai peristiwa. Gunakan untuk melacak status awal peristiwa multi-langkah.
Jika Anda menentukan jenis peristiwa Anda sendiri, Anda harus menggunakan angka mulai dari 10. Namun, tidak ada yang mencegah Anda menggunakan angka apa pun yang ingin Anda gunakan. Jika GUID kelas pelacakan peristiwa Anda mendukung beberapa jenis peristiwa, konsumen akan menggunakan jenis peristiwa untuk menentukan peristiwa dan cara menginterpretasikan kontennya.
DUMMYUNIONNAME2.Class.Level
Nilai yang ditentukan penyedia yang menentukan tingkat keparahan yang digunakan untuk menghasilkan peristiwa. Nilai berkisar antara 0 hingga 255. Pengontrol menentukan tingkat keparahan saat memanggil fungsi EnableTraceEx2 . Penyedia mengambil tingkat keparahan dengan memanggil fungsi GetTraceEnableLevel dari implementasi ControlCallback-nya . Penyedia menggunakan nilai untuk mengatur anggota ini.
ETW mendefinisikan tingkat keparahan berikut. Memilih tingkat yang lebih tinggi dari 1 juga akan mencakup peristiwa untuk tingkat yang lebih rendah. Misalnya, jika pengontrol menentukan TRACE_LEVEL_WARNING (3), penyedia juga menghasilkan peristiwa TRACE_LEVEL_FATAL (1) dan TRACE_LEVEL_ERROR (2).
Nilai | Makna |
---|---|
TRACE_LEVEL_CRITICAL (1) | Peristiwa keluar atau penghentian abnormal |
TRACE_LEVEL_ERROR (2) | Peristiwa kesalahan parah |
TRACE_LEVEL_WARNING (3) | Peristiwa peringatan seperti kegagalan alokasi |
TRACE_LEVEL_INFORMATION (4) | Peristiwa non-kesalahan seperti peristiwa masuk atau keluar |
TRACE_LEVEL_VERBOSE (5) | Peristiwa pelacakan terperinci |
DUMMYUNIONNAME2.Class.Version
Menunjukkan versi kelas pelacakan peristiwa yang Anda gunakan untuk mencatat peristiwa. Tentukan nol jika hanya ada satu versi kelas pelacakan peristiwa Anda. Versi ini memberi tahu konsumen kelas MOF mana yang akan digunakan untuk menguraikan data peristiwa.
ThreadId
Pada output, mengidentifikasi utas yang menghasilkan peristiwa.
Perhatikan bahwa pada Windows 2000, ThreadId adalah nilai ULONGLONG .
ProcessId
Pada output, mengidentifikasi proses yang menghasilkan peristiwa.
Windows 2000: Anggota ini tidak didukung.
TimeStamp
Pada output, berisi waktu peristiwa terjadi. Resolusi adalah waktu sistem kecuali anggota ProcessTraceModedari EVENT_TRACE_LOGFILE berisi PROCESS_TRACE_MODE_RAW_TIMESTAMP
bendera, dalam hal ini resolusi tergantung pada nilai anggota Wnode.ClientContextEVENT_TRACE_PROPERTIES pada saat pengontrol membuat sesi.
DUMMYUNIONNAME3
DUMMYUNIONNAME3.Guid
GUID kelas pelacakan peristiwa. Anda dapat menggunakan GUID kelas untuk mengidentifikasi kategori peristiwa dan anggota Class.Type untuk mengidentifikasi peristiwa dalam kategori peristiwa.
Atau, Anda dapat menggunakan anggota GuidPtr untuk menentukan GUID kelas.
Windows XP dan Windows 2000: GUID kelas harus telah terdaftar sebelumnya menggunakan fungsi RegisterTraceGuids .
DUMMYUNIONNAME3.GuidPtr
Penunjuk ke GUID kelas pelacakan peristiwa. Atau, Anda dapat menggunakan anggota Guid untuk menentukan GUID kelas.
Saat peristiwa ditulis, ETW menggunakan penunjuk untuk menyalin GUID ke peristiwa (GUID disertakan dalam peristiwa, bukan penunjuk).
Jika Anda menggunakan anggota ini, anggota Bendera juga harus berisi WNODE_FLAG_USE_GUID_PTR.
DUMMYUNIONNAME4
DUMMYUNIONNAME4.DUMMYSTRUCTNAME
DUMMYUNIONNAME4.DUMMYSTRUCTNAME.KernelTime
Waktu eksekusi yang berlalu untuk instruksi mode kernel, dalam unit waktu CPU. Jika Anda menggunakan sesi privat, gunakan nilai di anggota ProcessorTime sebagai gantinya. Untuk informasi selengkapnya, lihat Keterangan.
DUMMYUNIONNAME4.DUMMYSTRUCTNAME.UserTime
Waktu eksekusi yang berlalu untuk instruksi mode pengguna, di unit waktu CPU. Jika Anda menggunakan sesi privat, gunakan nilai di anggota ProcessorTime sebagai gantinya. Untuk informasi selengkapnya, lihat Keterangan.
DUMMYUNIONNAME4.ProcessorTime
Untuk sesi privat, waktu eksekusi yang berlalu untuk instruksi mode pengguna, dalam centang CPU.
DUMMYUNIONNAME4.DUMMYSTRUCTNAME2
DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.ClientContext
Dicadangkan.
DUMMYUNIONNAME4.DUMMYSTRUCTNAME2.Flags
Anda harus mengatur anggota ini ke WNODE_FLAG_TRACED_GUID, dan dapat secara opsional menentukan kombinasi berikut.
WNODE_FLAG_USE_GUID_PTR: Tentukan apakah anggota GuidPtr berisi GUID kelas.
WNODE_FLAG_USE_MOF_PTR: Tentukan apakah array struktur MOF_FIELD berisi data peristiwa yang ditambahkan ke struktur ini. Jumlah elemen dalam array terbatas pada MAX_MOF_FIELDS.
Keterangan
Pastikan untuk menginisialisasi memori untuk struktur ini ke nol sebelum mengatur anggota mana pun.
Anda dapat menggunakan anggota KernelTime dan UserTime untuk menentukan biaya CPU dalam unit untuk serangkaian instruksi (nilai menunjukkan penggunaan CPU yang dibebankan ke utas tersebut pada saat pengelogan). Misalnya, jika Peristiwa A dan Peristiwa B dicatat secara berturut-turut oleh utas yang sama dan mereka memiliki nomor penggunaan CPU 150 dan 175, maka aktivitas yang dilakukan oleh utas tersebut antara peristiwa A dan B dikenakan biaya 25 unit waktu CPU (175 – 150).
TimerResolution dari struktur TRACE_LOGFILE_HEADER berisi resolusi timer penggunaan CPU dalam 100 unit nanodetik. Anda dapat menggunakan resolusi timer dengan nilai waktu kernel dan waktu pengguna untuk menentukan jumlah waktu CPU yang digunakan kumpulan instruksi. Misalnya, jika resolusi timer adalah 156.250, maka 25 unit waktu CPU adalah 0,39 detik (156.250 * 25 * 100 / 1.000.000.000). Ini adalah jumlah waktu CPU (waktu jam dinding tidak berlalu) yang digunakan oleh serangkaian instruksi antara peristiwa A dan B.
Namun, perhatikan bahwa resolusi timer penggunaan CPU biasanya sangat rendah (sekitar 10 milidetik atau lebih). Oleh karena itu, nomor penggunaan CPU tidak dapat digunakan untuk mempertangungjawabkan penggunaan waktu CPU di antara utas dengan akurasi tinggi. Sebaliknya, mereka cocok untuk jenis analisis statistik jangka panjang.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
Header | evntrace.h |