ax-task 0.8.2

OS-independent IRQ-safe SMP task scheduling core
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
//! Lock-free snapshot projection of scheduler counters.

use super::*;

/// Aggregate scheduler counters captured without allocating or taking locks.
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct QperfSchedulerMetricsSnapshot {
    pub switch_phase_scheduler_count: u64,
    pub switch_phase_scheduler_total_ns: u64,
    pub switch_phase_prepare_count: u64,
    pub switch_phase_prepare_total_ns: u64,
    pub switch_phase_runtime_tail_count: u64,
    pub switch_phase_runtime_tail_total_ns: u64,
    pub switch_phase_owner_tail_count: u64,
    pub switch_phase_owner_tail_total_ns: u64,
    pub switch_scheduler_detail_count: [u64; SWITCH_SCHEDULER_DETAIL_COUNT],
    pub switch_scheduler_detail_total_ns: [u64; SWITCH_SCHEDULER_DETAIL_COUNT],
    pub current_thread_handle_queries: u64,
    pub runtime_cpu_owner_claims: u64,
    pub cpu_placement_publication_acquires: u64,
    pub cpu_owner_control_publication_acquires: u64,
    pub scheduler_deadline_derivation_entries: u64,
    pub scheduler_deadline_derivation_clock_event_entries: u64,
    pub scheduler_deadline_derivation_park_arm_entries: u64,
    pub scheduler_deadline_derivation_park_cancel_entries: u64,
    pub scheduler_deadline_derivation_kernel_timer_entries: u64,
    pub scheduler_deadline_derivation_ktimer_service_entries: u64,
    pub scheduler_deadline_derivation_enqueue_entries: u64,
    pub scheduler_deadline_derivation_placement_entries: u64,
    pub scheduler_deadline_derivation_schedule_selection_entries: u64,
    pub scheduler_deadline_derivation_schedule_no_switch_entries: u64,
    pub runtime_preempt_guard_entries: u64,
    pub runtime_preempt_guard_none: u64,
    pub preempt_guard_ticket_entries: u64,
    pub preempt_guard_ticket_none: u64,
    pub preempt_guard_explicit_entries: u64,
    pub preempt_guard_explicit_none: u64,
    pub preempt_guard_sync_entries: u64,
    pub preempt_guard_sync_none: u64,
    pub preempt_guard_activity_entries: u64,
    pub preempt_guard_activity_none: u64,
    pub preempt_guard_irq_return_entries: u64,
    pub preempt_guard_irq_return_none: u64,
    pub runtime_irq_guard_entries: u64,
    pub runtime_irq_guard_none: u64,
    pub irq_guard_ticket_entries: u64,
    pub irq_guard_ticket_none: u64,
    pub irq_ticket_thread_sched_entries: u64,
    pub irq_ticket_deadline_server_entries: u64,
    pub irq_ticket_cpu_run_queue_entries: u64,
    pub irq_ticket_cpu_run_queue_transaction_entries: u64,
    pub irq_ticket_cpu_run_queue_owner_observation_entries: u64,
    pub irq_ticket_cpu_run_queue_owner_current_thread_observation_entries: u64,
    pub irq_ticket_cpu_run_queue_owner_current_core_observation_entries: u64,
    pub irq_ticket_cpu_run_queue_owner_runnable_observation_entries: u64,
    pub irq_ticket_cpu_run_queue_timer_observation_entries: u64,
    pub irq_ticket_cpu_run_queue_timer_deadline_derivation_observation_entries: u64,
    pub irq_ticket_cpu_run_queue_rt_accounting_entries: u64,
    pub irq_ticket_cpu_run_queue_deadline_accounting_entries: u64,
    pub irq_ticket_cpu_run_queue_membarrier_entries: u64,
    pub irq_ticket_cpu_run_queue_lifecycle_entries: u64,
    pub irq_ticket_cpu_rt_bandwidth_entries: u64,
    pub irq_ticket_cpu_deadline_entries: u64,
    pub irq_ticket_cpu_deadline_observation_entries: u64,
    pub irq_ticket_cpu_deadline_publication_entries: u64,
    pub irq_ticket_cpu_deadline_registration_entries: u64,
    pub irq_ticket_cpu_deadline_hard_expiry_entries: u64,
    pub irq_ticket_cpu_deadline_soft_expiry_entries: u64,
    pub irq_ticket_cpu_deadline_lifecycle_entries: u64,
    pub irq_ticket_root_rt_runtime_entries: u64,
    pub irq_ticket_root_rt_period_entries: u64,
    pub irq_ticket_root_deadline_index_entries: u64,
    pub irq_guard_explicit_entries: u64,
    pub irq_guard_explicit_none: u64,
    pub irq_guard_runtime_cpu_entries: u64,
    pub irq_guard_runtime_cpu_none: u64,
    pub irq_guard_executor_entries: u64,
    pub irq_guard_executor_none: u64,
    pub owner_rq_irqsave_transactions: u64,
    pub owner_rq_scheduler_transactions: u64,
    pub owner_rq_bootstrap_transactions: u64,
    pub direct_wake_attempts: u64,
    pub direct_wake_activations: u64,
    pub direct_wake_enqueues: u64,
    pub direct_wake_preemptions: u64,
    pub direct_wake_current_kept: u64,
    pub direct_wake_queued_candidate_selected: u64,
    pub fair_pick_protected_current: u64,
    pub fair_wake_wakee_ineligible: u64,
    pub fair_wake_current_ineligible: u64,
    pub fair_wake_current_protected: u64,
    pub fair_wake_deadline_precedes: u64,
    pub fair_wake_deadline_loses: u64,
    pub fair_sleep_lag_positive: u64,
    pub fair_sleep_lag_zero: u64,
    pub fair_sleep_lag_negative: u64,
    pub fair_sleep_wake_lag_positive: u64,
    pub fair_sleep_wake_lag_zero: u64,
    pub fair_sleep_wake_lag_negative: u64,
    pub fair_delayed_wake_lag_zero: u64,
    pub fair_delayed_wake_lag_negative: u64,
    pub fair_wake_wakee_debt_total_ns: u64,
    pub fair_wake_current_debt_total_ns: u64,
    pub fair_wake_current_credit_total_ns: u64,
    pub fair_yield_eligible: u64,
    pub fair_yield_ineligible: u64,
    pub fair_yield_forfeit_total_ns: u64,
    pub fair_yield_debt_total_ns: u64,
    pub fair_delayed_begin_count: u64,
    pub fair_delayed_begin_debt_total_ns: u64,
    pub fair_delayed_wake_saved_debt_total_ns: u64,
    pub fair_delayed_wake_actual_debt_total_ns: u64,
    pub fair_delayed_wake_saved_clamp_count: u64,
    pub task_work_publish_calls: u64,
    pub task_work_publish_edges: u64,
    pub task_work_pending_consumed: u64,
    pub task_work_reassertions: u64,
    pub task_work_worker_passes: u64,
    pub task_work_worker_processed: u64,
    pub task_work_worker_yields: u64,
    pub task_work_worker_waits: u64,
    pub task_work_deadline_events: u64,
    pub task_work_scheduler_tick_events: u64,
    pub task_work_exit_callbacks: u64,
    pub task_work_reaped_threads: u64,
    pub task_work_coroutine_reclaims: u64,
    pub task_work_address_space_reclaims: u64,
    pub pi_mutex_lock_attempts: u64,
    pub pi_mutex_fast_acquisitions: u64,
    pub pi_mutex_slow_entries: u64,
    pub pi_mutex_slow_race_acquisitions: u64,
    pub pi_mutex_waiter_registrations: u64,
    pub pi_mutex_waiter_parks: u64,
    pub pi_mutex_contended_releases: u64,
    pub pi_schedule_recompute_attempts: u64,
    pub pi_schedule_no_rq_fast_returns: u64,
    pub pi_schedule_owner_rq_transactions: u64,
    pub pi_schedule_unchanged_after_rq: u64,
    pub context_switches: u64,
    pub context_switches_preempted: u64,
    pub context_switches_yield: u64,
    pub context_switches_blocked: u64,
    pub context_switches_exited: u64,
    pub context_switches_migrated: u64,
}
impl QperfSchedulerMetrics {
    pub(super) fn snapshot(&self) -> QperfSchedulerMetricsSnapshot {
        let preempt_entries = |source: PreemptGuardSource| {
            self.preempt_guard_entries[source as usize].load(Ordering::Relaxed)
        };
        let preempt_none = |source: PreemptGuardSource| {
            self.preempt_guard_none[source as usize].load(Ordering::Relaxed)
        };
        let irq_entries = |source: IrqGuardSource| {
            self.irq_guard_entries[source as usize].load(Ordering::Relaxed)
        };
        let irq_none =
            |source: IrqGuardSource| self.irq_guard_none[source as usize].load(Ordering::Relaxed);
        let deadline_derivations = |source: SchedulerDeadlineDerivationSource| {
            self.scheduler_deadline_derivations[source as usize].load(Ordering::Relaxed)
        };
        let scheduler_deadline_derivation_clock_event_entries =
            deadline_derivations(SchedulerDeadlineDerivationSource::ClockEvent);
        let scheduler_deadline_derivation_park_arm_entries = 0;
        let scheduler_deadline_derivation_park_cancel_entries = 0;
        let scheduler_deadline_derivation_kernel_timer_entries = 0;
        let scheduler_deadline_derivation_ktimer_service_entries =
            deadline_derivations(SchedulerDeadlineDerivationSource::KtimerService);
        let scheduler_deadline_derivation_enqueue_entries =
            deadline_derivations(SchedulerDeadlineDerivationSource::Enqueue);
        let scheduler_deadline_derivation_placement_entries =
            deadline_derivations(SchedulerDeadlineDerivationSource::Placement);
        let scheduler_deadline_derivation_schedule_selection_entries =
            deadline_derivations(SchedulerDeadlineDerivationSource::ScheduleSelection);
        let scheduler_deadline_derivation_schedule_no_switch_entries =
            deadline_derivations(SchedulerDeadlineDerivationSource::ScheduleNoSwitch);
        let scheduler_deadline_derivation_entries =
            scheduler_deadline_derivation_clock_event_entries
                + scheduler_deadline_derivation_park_arm_entries
                + scheduler_deadline_derivation_park_cancel_entries
                + scheduler_deadline_derivation_kernel_timer_entries
                + scheduler_deadline_derivation_ktimer_service_entries
                + scheduler_deadline_derivation_enqueue_entries
                + scheduler_deadline_derivation_placement_entries
                + scheduler_deadline_derivation_schedule_selection_entries
                + scheduler_deadline_derivation_schedule_no_switch_entries;
        let preempt_guard_ticket_entries = preempt_entries(PreemptGuardSource::TicketLock);
        let preempt_guard_ticket_none = preempt_none(PreemptGuardSource::TicketLock);
        let preempt_guard_explicit_entries = preempt_entries(PreemptGuardSource::ExplicitScope);
        let preempt_guard_explicit_none = preempt_none(PreemptGuardSource::ExplicitScope);
        let preempt_guard_sync_entries = preempt_entries(PreemptGuardSource::SyncContext);
        let preempt_guard_sync_none = preempt_none(PreemptGuardSource::SyncContext);
        let preempt_guard_activity_entries = preempt_entries(PreemptGuardSource::SchedulerActivity);
        let preempt_guard_activity_none = preempt_none(PreemptGuardSource::SchedulerActivity);
        let preempt_guard_irq_return_entries = preempt_entries(PreemptGuardSource::IrqReturn);
        let preempt_guard_irq_return_none = preempt_none(PreemptGuardSource::IrqReturn);
        let irq_ticket_thread_sched_entries = irq_entries(IrqGuardSource::ThreadSchedTicket);
        let irq_ticket_deadline_server_entries = irq_entries(IrqGuardSource::DeadlineServerTicket);
        let irq_ticket_cpu_run_queue_transaction_entries =
            irq_entries(IrqGuardSource::CpuRunQueueTransactionTicket);
        let irq_ticket_cpu_run_queue_owner_current_thread_observation_entries =
            irq_entries(IrqGuardSource::CpuRunQueueOwnerCurrentThreadObservationTicket);
        let irq_ticket_cpu_run_queue_owner_current_core_observation_entries =
            irq_entries(IrqGuardSource::CpuRunQueueOwnerCurrentCoreObservationTicket);
        let irq_ticket_cpu_run_queue_owner_runnable_observation_entries =
            irq_entries(IrqGuardSource::CpuRunQueueOwnerRunnableObservationTicket);
        let irq_ticket_cpu_run_queue_owner_observation_entries =
            irq_ticket_cpu_run_queue_owner_current_thread_observation_entries
                + irq_ticket_cpu_run_queue_owner_current_core_observation_entries
                + irq_ticket_cpu_run_queue_owner_runnable_observation_entries;
        let irq_ticket_cpu_run_queue_timer_deadline_derivation_observation_entries =
            irq_entries(IrqGuardSource::CpuRunQueueTimerDeadlineDerivationObservationTicket);
        let irq_ticket_cpu_run_queue_timer_observation_entries =
            irq_ticket_cpu_run_queue_timer_deadline_derivation_observation_entries;
        let irq_ticket_cpu_run_queue_rt_accounting_entries =
            irq_entries(IrqGuardSource::CpuRunQueueRtAccountingTicket);
        let irq_ticket_cpu_run_queue_deadline_accounting_entries =
            irq_entries(IrqGuardSource::CpuRunQueueDeadlineAccountingTicket);
        let irq_ticket_cpu_run_queue_membarrier_entries =
            irq_entries(IrqGuardSource::CpuRunQueueMembarrierTicket);
        let irq_ticket_cpu_run_queue_lifecycle_entries =
            irq_entries(IrqGuardSource::CpuRunQueueLifecycleTicket);
        let irq_ticket_cpu_run_queue_entries = irq_ticket_cpu_run_queue_transaction_entries
            + irq_ticket_cpu_run_queue_owner_observation_entries
            + irq_ticket_cpu_run_queue_timer_observation_entries
            + irq_ticket_cpu_run_queue_rt_accounting_entries
            + irq_ticket_cpu_run_queue_deadline_accounting_entries
            + irq_ticket_cpu_run_queue_membarrier_entries
            + irq_ticket_cpu_run_queue_lifecycle_entries;
        let irq_ticket_cpu_rt_bandwidth_entries = irq_entries(IrqGuardSource::CpuRtBandwidthTicket);
        let irq_ticket_cpu_deadline_observation_entries =
            irq_entries(IrqGuardSource::CpuDeadlineObservationTicket);
        let irq_ticket_cpu_deadline_publication_entries =
            irq_entries(IrqGuardSource::CpuDeadlinePublicationTicket);
        let irq_ticket_cpu_deadline_registration_entries =
            irq_entries(IrqGuardSource::CpuDeadlineRegistrationTicket);
        let irq_ticket_cpu_deadline_hard_expiry_entries =
            irq_entries(IrqGuardSource::CpuDeadlineHardExpiryTicket);
        let irq_ticket_cpu_deadline_soft_expiry_entries =
            irq_entries(IrqGuardSource::CpuDeadlineSoftExpiryTicket);
        let irq_ticket_cpu_deadline_lifecycle_entries =
            irq_entries(IrqGuardSource::CpuDeadlineLifecycleTicket);
        let irq_ticket_cpu_deadline_entries = irq_ticket_cpu_deadline_observation_entries
            + irq_ticket_cpu_deadline_publication_entries
            + irq_ticket_cpu_deadline_registration_entries
            + irq_ticket_cpu_deadline_hard_expiry_entries
            + irq_ticket_cpu_deadline_soft_expiry_entries
            + irq_ticket_cpu_deadline_lifecycle_entries;
        let irq_ticket_root_rt_runtime_entries = irq_entries(IrqGuardSource::RootRtRuntimeTicket);
        let irq_ticket_root_rt_period_entries = irq_entries(IrqGuardSource::RootRtPeriodTicket);
        let irq_ticket_root_deadline_index_entries =
            irq_entries(IrqGuardSource::RootDeadlineIndexTicket);
        let irq_guard_ticket_entries = irq_ticket_thread_sched_entries
            + irq_ticket_deadline_server_entries
            + irq_ticket_cpu_run_queue_entries
            + irq_ticket_cpu_rt_bandwidth_entries
            + irq_ticket_cpu_deadline_entries
            + irq_ticket_root_rt_runtime_entries
            + irq_ticket_root_rt_period_entries
            + irq_ticket_root_deadline_index_entries;
        let irq_guard_ticket_none = irq_none(IrqGuardSource::ThreadSchedTicket)
            + irq_none(IrqGuardSource::DeadlineServerTicket)
            + irq_none(IrqGuardSource::CpuRunQueueTransactionTicket)
            + irq_none(IrqGuardSource::CpuRunQueueOwnerCurrentThreadObservationTicket)
            + irq_none(IrqGuardSource::CpuRunQueueOwnerCurrentCoreObservationTicket)
            + irq_none(IrqGuardSource::CpuRunQueueOwnerRunnableObservationTicket)
            + irq_none(IrqGuardSource::CpuRunQueueTimerDeadlineDerivationObservationTicket)
            + irq_none(IrqGuardSource::CpuRunQueueRtAccountingTicket)
            + irq_none(IrqGuardSource::CpuRunQueueDeadlineAccountingTicket)
            + irq_none(IrqGuardSource::CpuRunQueueMembarrierTicket)
            + irq_none(IrqGuardSource::CpuRunQueueLifecycleTicket)
            + irq_none(IrqGuardSource::CpuRtBandwidthTicket)
            + irq_none(IrqGuardSource::CpuDeadlineObservationTicket)
            + irq_none(IrqGuardSource::CpuDeadlinePublicationTicket)
            + irq_none(IrqGuardSource::CpuDeadlineRegistrationTicket)
            + irq_none(IrqGuardSource::CpuDeadlineHardExpiryTicket)
            + irq_none(IrqGuardSource::CpuDeadlineSoftExpiryTicket)
            + irq_none(IrqGuardSource::CpuDeadlineLifecycleTicket)
            + irq_none(IrqGuardSource::RootRtRuntimeTicket)
            + irq_none(IrqGuardSource::RootRtPeriodTicket)
            + irq_none(IrqGuardSource::RootDeadlineIndexTicket);
        let irq_guard_explicit_entries = irq_entries(IrqGuardSource::ExplicitScope);
        let irq_guard_explicit_none = irq_none(IrqGuardSource::ExplicitScope);
        let irq_guard_runtime_cpu_entries = irq_entries(IrqGuardSource::RuntimeCpu);
        let irq_guard_runtime_cpu_none = irq_none(IrqGuardSource::RuntimeCpu);
        let irq_guard_executor_entries = irq_entries(IrqGuardSource::Executor);
        let irq_guard_executor_none = irq_none(IrqGuardSource::Executor);
        QperfSchedulerMetricsSnapshot {
            switch_phase_scheduler_count: self.switch_phase_scheduler_count.load(Ordering::Relaxed),
            switch_phase_scheduler_total_ns: self
                .switch_phase_scheduler_total_ns
                .load(Ordering::Relaxed),
            switch_phase_prepare_count: self.switch_phase_prepare_count.load(Ordering::Relaxed),
            switch_phase_prepare_total_ns: self
                .switch_phase_prepare_total_ns
                .load(Ordering::Relaxed),
            switch_phase_runtime_tail_count: self
                .switch_phase_runtime_tail_count
                .load(Ordering::Relaxed),
            switch_phase_runtime_tail_total_ns: self
                .switch_phase_runtime_tail_total_ns
                .load(Ordering::Relaxed),
            switch_phase_owner_tail_count: self
                .switch_phase_owner_tail_count
                .load(Ordering::Relaxed),
            switch_phase_owner_tail_total_ns: self
                .switch_phase_owner_tail_total_ns
                .load(Ordering::Relaxed),
            switch_scheduler_detail_count: core::array::from_fn(|index| {
                self.switch_scheduler_detail_count[index].load(Ordering::Relaxed)
            }),
            switch_scheduler_detail_total_ns: core::array::from_fn(|index| {
                self.switch_scheduler_detail_total_ns[index].load(Ordering::Relaxed)
            }),
            current_thread_handle_queries: self
                .current_thread_handle_queries
                .load(Ordering::Relaxed),
            runtime_cpu_owner_claims: self.runtime_cpu_owner_claims.load(Ordering::Relaxed),
            cpu_placement_publication_acquires: self
                .cpu_placement_publication_acquires
                .load(Ordering::Relaxed),
            cpu_owner_control_publication_acquires: self
                .cpu_owner_control_publication_acquires
                .load(Ordering::Relaxed),
            scheduler_deadline_derivation_entries,
            scheduler_deadline_derivation_clock_event_entries,
            scheduler_deadline_derivation_park_arm_entries,
            scheduler_deadline_derivation_park_cancel_entries,
            scheduler_deadline_derivation_kernel_timer_entries,
            scheduler_deadline_derivation_ktimer_service_entries,
            scheduler_deadline_derivation_enqueue_entries,
            scheduler_deadline_derivation_placement_entries,
            scheduler_deadline_derivation_schedule_selection_entries,
            scheduler_deadline_derivation_schedule_no_switch_entries,
            runtime_preempt_guard_entries: preempt_guard_ticket_entries
                + preempt_guard_explicit_entries
                + preempt_guard_sync_entries
                + preempt_guard_activity_entries
                + preempt_guard_irq_return_entries,
            runtime_preempt_guard_none: preempt_guard_ticket_none
                + preempt_guard_explicit_none
                + preempt_guard_sync_none
                + preempt_guard_activity_none
                + preempt_guard_irq_return_none,
            preempt_guard_ticket_entries,
            preempt_guard_ticket_none,
            preempt_guard_explicit_entries,
            preempt_guard_explicit_none,
            preempt_guard_sync_entries,
            preempt_guard_sync_none,
            preempt_guard_activity_entries,
            preempt_guard_activity_none,
            preempt_guard_irq_return_entries,
            preempt_guard_irq_return_none,
            runtime_irq_guard_entries: irq_guard_ticket_entries
                + irq_guard_explicit_entries
                + irq_guard_runtime_cpu_entries
                + irq_guard_executor_entries,
            runtime_irq_guard_none: irq_guard_ticket_none
                + irq_guard_explicit_none
                + irq_guard_runtime_cpu_none
                + irq_guard_executor_none,
            irq_guard_ticket_entries,
            irq_guard_ticket_none,
            irq_ticket_thread_sched_entries,
            irq_ticket_deadline_server_entries,
            irq_ticket_cpu_run_queue_entries,
            irq_ticket_cpu_run_queue_transaction_entries,
            irq_ticket_cpu_run_queue_owner_observation_entries,
            irq_ticket_cpu_run_queue_owner_current_thread_observation_entries,
            irq_ticket_cpu_run_queue_owner_current_core_observation_entries,
            irq_ticket_cpu_run_queue_owner_runnable_observation_entries,
            irq_ticket_cpu_run_queue_timer_observation_entries,
            irq_ticket_cpu_run_queue_timer_deadline_derivation_observation_entries,
            irq_ticket_cpu_run_queue_rt_accounting_entries,
            irq_ticket_cpu_run_queue_deadline_accounting_entries,
            irq_ticket_cpu_run_queue_membarrier_entries,
            irq_ticket_cpu_run_queue_lifecycle_entries,
            irq_ticket_cpu_rt_bandwidth_entries,
            irq_ticket_cpu_deadline_entries,
            irq_ticket_cpu_deadline_observation_entries,
            irq_ticket_cpu_deadline_publication_entries,
            irq_ticket_cpu_deadline_registration_entries,
            irq_ticket_cpu_deadline_hard_expiry_entries,
            irq_ticket_cpu_deadline_soft_expiry_entries,
            irq_ticket_cpu_deadline_lifecycle_entries,
            irq_ticket_root_rt_runtime_entries,
            irq_ticket_root_rt_period_entries,
            irq_ticket_root_deadline_index_entries,
            irq_guard_explicit_entries,
            irq_guard_explicit_none,
            irq_guard_runtime_cpu_entries,
            irq_guard_runtime_cpu_none,
            irq_guard_executor_entries,
            irq_guard_executor_none,
            owner_rq_irqsave_transactions: self
                .owner_rq_irqsave_transactions
                .load(Ordering::Relaxed),
            owner_rq_scheduler_transactions: self
                .owner_rq_scheduler_transactions
                .load(Ordering::Relaxed),
            owner_rq_bootstrap_transactions: self
                .owner_rq_bootstrap_transactions
                .load(Ordering::Relaxed),
            direct_wake_attempts: self.direct_wake_attempts.load(Ordering::Relaxed),
            direct_wake_activations: self.direct_wake_activations.load(Ordering::Relaxed),
            direct_wake_enqueues: self.direct_wake_enqueues.load(Ordering::Relaxed),
            direct_wake_preemptions: self.direct_wake_preemptions.load(Ordering::Relaxed),
            direct_wake_current_kept: self.direct_wake_current_kept.load(Ordering::Relaxed),
            direct_wake_queued_candidate_selected: self
                .direct_wake_queued_candidate_selected
                .load(Ordering::Relaxed),
            fair_pick_protected_current: self.fair_pick_protected_current.load(Ordering::Relaxed),
            fair_wake_wakee_ineligible: self.fair_wake_wakee_ineligible.load(Ordering::Relaxed),
            fair_wake_current_ineligible: self.fair_wake_current_ineligible.load(Ordering::Relaxed),
            fair_wake_current_protected: self.fair_wake_current_protected.load(Ordering::Relaxed),
            fair_wake_deadline_precedes: self.fair_wake_deadline_precedes.load(Ordering::Relaxed),
            fair_wake_deadline_loses: self.fair_wake_deadline_loses.load(Ordering::Relaxed),
            fair_sleep_lag_positive: self.fair_sleep_lag_positive.load(Ordering::Relaxed),
            fair_sleep_lag_zero: self.fair_sleep_lag_zero.load(Ordering::Relaxed),
            fair_sleep_lag_negative: self.fair_sleep_lag_negative.load(Ordering::Relaxed),
            fair_sleep_wake_lag_positive: self.fair_sleep_wake_lag_positive.load(Ordering::Relaxed),
            fair_sleep_wake_lag_zero: self.fair_sleep_wake_lag_zero.load(Ordering::Relaxed),
            fair_sleep_wake_lag_negative: self.fair_sleep_wake_lag_negative.load(Ordering::Relaxed),
            fair_delayed_wake_lag_zero: self.fair_delayed_wake_lag_zero.load(Ordering::Relaxed),
            fair_delayed_wake_lag_negative: self
                .fair_delayed_wake_lag_negative
                .load(Ordering::Relaxed),
            fair_wake_wakee_debt_total_ns: self
                .fair_wake_wakee_debt_total_ns
                .load(Ordering::Relaxed),
            fair_wake_current_debt_total_ns: self
                .fair_wake_current_debt_total_ns
                .load(Ordering::Relaxed),
            fair_wake_current_credit_total_ns: self
                .fair_wake_current_credit_total_ns
                .load(Ordering::Relaxed),
            fair_yield_eligible: self.fair_yield_eligible.load(Ordering::Relaxed),
            fair_yield_ineligible: self.fair_yield_ineligible.load(Ordering::Relaxed),
            fair_yield_forfeit_total_ns: self.fair_yield_forfeit_total_ns.load(Ordering::Relaxed),
            fair_yield_debt_total_ns: self.fair_yield_debt_total_ns.load(Ordering::Relaxed),
            fair_delayed_begin_count: self.fair_delayed_begin_count.load(Ordering::Relaxed),
            fair_delayed_begin_debt_total_ns: self
                .fair_delayed_begin_debt_total_ns
                .load(Ordering::Relaxed),
            fair_delayed_wake_saved_debt_total_ns: self
                .fair_delayed_wake_saved_debt_total_ns
                .load(Ordering::Relaxed),
            fair_delayed_wake_actual_debt_total_ns: self
                .fair_delayed_wake_actual_debt_total_ns
                .load(Ordering::Relaxed),
            fair_delayed_wake_saved_clamp_count: self
                .fair_delayed_wake_saved_clamp_count
                .load(Ordering::Relaxed),
            task_work_publish_calls: self.task_work_publish_calls.load(Ordering::Relaxed),
            task_work_publish_edges: self.task_work_publish_edges.load(Ordering::Relaxed),
            task_work_pending_consumed: self.task_work_pending_consumed.load(Ordering::Relaxed),
            task_work_reassertions: self.task_work_reassertions.load(Ordering::Relaxed),
            task_work_worker_passes: self.task_work_worker_passes.load(Ordering::Relaxed),
            task_work_worker_processed: self.task_work_worker_processed.load(Ordering::Relaxed),
            task_work_worker_yields: self.task_work_worker_yields.load(Ordering::Relaxed),
            task_work_worker_waits: self.task_work_worker_waits.load(Ordering::Relaxed),
            task_work_deadline_events: self.task_work_deadline_events.load(Ordering::Relaxed),
            task_work_scheduler_tick_events: self
                .task_work_scheduler_tick_events
                .load(Ordering::Relaxed),
            task_work_exit_callbacks: self.task_work_exit_callbacks.load(Ordering::Relaxed),
            task_work_reaped_threads: self.task_work_reaped_threads.load(Ordering::Relaxed),
            task_work_coroutine_reclaims: self.task_work_coroutine_reclaims.load(Ordering::Relaxed),
            task_work_address_space_reclaims: self
                .task_work_address_space_reclaims
                .load(Ordering::Relaxed),
            pi_mutex_lock_attempts: self.pi_mutex_lock_attempts.load(Ordering::Relaxed),
            pi_mutex_fast_acquisitions: self.pi_mutex_fast_acquisitions.load(Ordering::Relaxed),
            pi_mutex_slow_entries: self.pi_mutex_slow_entries.load(Ordering::Relaxed),
            pi_mutex_slow_race_acquisitions: self
                .pi_mutex_slow_race_acquisitions
                .load(Ordering::Relaxed),
            pi_mutex_waiter_registrations: self
                .pi_mutex_waiter_registrations
                .load(Ordering::Relaxed),
            pi_mutex_waiter_parks: self.pi_mutex_waiter_parks.load(Ordering::Relaxed),
            pi_mutex_contended_releases: self.pi_mutex_contended_releases.load(Ordering::Relaxed),
            pi_schedule_recompute_attempts: self
                .pi_schedule_recompute_attempts
                .load(Ordering::Relaxed),
            pi_schedule_no_rq_fast_returns: self
                .pi_schedule_no_rq_fast_returns
                .load(Ordering::Relaxed),
            pi_schedule_owner_rq_transactions: self
                .pi_schedule_owner_rq_transactions
                .load(Ordering::Relaxed),
            pi_schedule_unchanged_after_rq: self
                .pi_schedule_unchanged_after_rq
                .load(Ordering::Relaxed),
            context_switches: self.context_switches.load(Ordering::Relaxed),
            context_switches_preempted: self.context_switches_preempted.load(Ordering::Relaxed),
            context_switches_yield: self.context_switches_yield.load(Ordering::Relaxed),
            context_switches_blocked: self.context_switches_blocked.load(Ordering::Relaxed),
            context_switches_exited: self.context_switches_exited.load(Ordering::Relaxed),
            context_switches_migrated: self.context_switches_migrated.load(Ordering::Relaxed),
        }
    }
}