rtla-timerlat-top.rst 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. .. |tool| replace:: timerlat top
  2. ====================
  3. rtla-timerlat-top
  4. ====================
  5. -------------------------------------------
  6. Measures the operating system timer latency
  7. -------------------------------------------
  8. :Manual section: 1
  9. SYNOPSIS
  10. ========
  11. **rtla timerlat top** [*OPTIONS*] ...
  12. DESCRIPTION
  13. ===========
  14. .. include:: common_timerlat_description.txt
  15. The **rtla timerlat top** displays a summary of the periodic output
  16. from the *timerlat* tracer. It also provides information for each
  17. operating system noise via the **osnoise:** tracepoints that can be
  18. seen with the option **-T**.
  19. OPTIONS
  20. =======
  21. .. include:: common_timerlat_options.txt
  22. .. include:: common_top_options.txt
  23. .. include:: common_options.txt
  24. .. include:: common_timerlat_aa.txt
  25. **--aa-only** *us*
  26. Set stop tracing conditions and run without collecting and displaying statistics.
  27. Print the auto-analysis if the system hits the stop tracing condition. This option
  28. is useful to reduce rtla timerlat CPU, enabling the debug without the overhead of
  29. collecting the statistics.
  30. EXAMPLE
  31. =======
  32. In the example below, the timerlat tracer is dispatched in cpus *1-23* in the
  33. automatic trace mode, instructing the tracer to stop if a *40 us* latency or
  34. higher is found::
  35. # timerlat -a 40 -c 1-23 -q
  36. Timer Latency
  37. 0 00:00:12 | IRQ Timer Latency (us) | Thread Timer Latency (us)
  38. CPU COUNT | cur min avg max | cur min avg max
  39. 1 #12322 | 0 0 1 15 | 10 3 9 31
  40. 2 #12322 | 3 0 1 12 | 10 3 9 23
  41. 3 #12322 | 1 0 1 21 | 8 2 8 34
  42. 4 #12322 | 1 0 1 17 | 10 2 11 33
  43. 5 #12322 | 0 0 1 12 | 8 3 8 25
  44. 6 #12322 | 1 0 1 14 | 16 3 11 35
  45. 7 #12322 | 0 0 1 14 | 9 2 8 29
  46. 8 #12322 | 1 0 1 22 | 9 3 9 34
  47. 9 #12322 | 0 0 1 14 | 8 2 8 24
  48. 10 #12322 | 1 0 0 12 | 9 3 8 24
  49. 11 #12322 | 0 0 0 15 | 6 2 7 29
  50. 12 #12321 | 1 0 0 13 | 5 3 8 23
  51. 13 #12319 | 0 0 1 14 | 9 3 9 26
  52. 14 #12321 | 1 0 0 13 | 6 2 8 24
  53. 15 #12321 | 1 0 1 15 | 12 3 11 27
  54. 16 #12318 | 0 0 1 13 | 7 3 10 24
  55. 17 #12319 | 0 0 1 13 | 11 3 9 25
  56. 18 #12318 | 0 0 0 12 | 8 2 8 20
  57. 19 #12319 | 0 0 1 18 | 10 2 9 28
  58. 20 #12317 | 0 0 0 20 | 9 3 8 34
  59. 21 #12318 | 0 0 0 13 | 8 3 8 28
  60. 22 #12319 | 0 0 1 11 | 8 3 10 22
  61. 23 #12320 | 28 0 1 28 | 41 3 11 41
  62. rtla timerlat hit stop tracing
  63. ## CPU 23 hit stop tracing, analyzing it ##
  64. IRQ handler delay: 27.49 us (65.52 %)
  65. IRQ latency: 28.13 us
  66. Timerlat IRQ duration: 9.59 us (22.85 %)
  67. Blocking thread: 3.79 us (9.03 %)
  68. objtool:49256 3.79 us
  69. Blocking thread stacktrace
  70. -> timerlat_irq
  71. -> __hrtimer_run_queues
  72. -> hrtimer_interrupt
  73. -> __sysvec_apic_timer_interrupt
  74. -> sysvec_apic_timer_interrupt
  75. -> asm_sysvec_apic_timer_interrupt
  76. -> _raw_spin_unlock_irqrestore
  77. -> cgroup_rstat_flush_locked
  78. -> cgroup_rstat_flush_irqsafe
  79. -> mem_cgroup_flush_stats
  80. -> mem_cgroup_wb_stats
  81. -> balance_dirty_pages
  82. -> balance_dirty_pages_ratelimited_flags
  83. -> btrfs_buffered_write
  84. -> btrfs_do_write_iter
  85. -> vfs_write
  86. -> __x64_sys_pwrite64
  87. -> do_syscall_64
  88. -> entry_SYSCALL_64_after_hwframe
  89. ------------------------------------------------------------------------
  90. Thread latency: 41.96 us (100%)
  91. The system has exit from idle latency!
  92. Max timerlat IRQ latency from idle: 17.48 us in cpu 4
  93. Saving trace to timerlat_trace.txt
  94. In this case, the major factor was the delay suffered by the *IRQ handler*
  95. that handles **timerlat** wakeup: *65.52%*. This can be caused by the
  96. current thread masking interrupts, which can be seen in the blocking
  97. thread stacktrace: the current thread (*objtool:49256*) disabled interrupts
  98. via *raw spin lock* operations inside mem cgroup, while doing write
  99. syscall in a btrfs file system.
  100. The raw trace is saved in the **timerlat_trace.txt** file for further analysis.
  101. Note that **rtla timerlat** was dispatched without changing *timerlat* tracer
  102. threads' priority. That is generally not needed because these threads have
  103. priority *FIFO:95* by default, which is a common priority used by real-time
  104. kernel developers to analyze scheduling delays.
  105. SEE ALSO
  106. --------
  107. **rtla-timerlat**\(1), **rtla-timerlat-hist**\(1)
  108. *timerlat* tracer documentation: <https://www.kernel.org/doc/html/latest/trace/timerlat-tracer.html>
  109. AUTHOR
  110. ------
  111. Written by Daniel Bristot de Oliveira <bristot@kernel.org>
  112. .. include:: common_appendix.txt