Bagikan melalui


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

Lihat juga

EVENT_TRACE

EventCallback

TraceEvent