监控linux内核中上下文切换次数的最有效方法是什么?

0x9*_*x90 6 c profiling arm linux-kernel embedded-linux

我希望得到以下的总统计数据:

  1. 有多少softirq发生?
  2. 有多少interrupts发生?
  3. 有多少context switches发生?

我知道你可以使用pidstat,cat /proc/interrupts/cat/proc/softirqs.但使用它们的开销太大了.

  • 如何在{1-3}不使用/proc最快速的情况下获得底线值?

  • 我可以使用ftrace帮助我跟踪事件吗?

我将使用高分辨率计时器来监控系统:

Con*_*ang 6

使用perf,例如:

# perf stat -B dd if=/dev/zero of=/dev/null count=1000000

1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 0.956217 s, 535 MB/s

 Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000':

            5,099 cache-misses             #      0.005 M/sec (scaled from 66.58%)
          235,384 cache-references         #      0.246 M/sec (scaled from 66.56%)
        9,281,660 branch-misses            #      3.858 %     (scaled from 33.50%)
      240,609,766 branches                 #    251.559 M/sec (scaled from 33.66%)
    1,403,561,257 instructions             #      0.679 IPC   (scaled from 50.23%)
    2,066,201,729 cycles                   #   2160.227 M/sec (scaled from 66.67%)
              217 page-faults              #      0.000 M/sec
                3 CPU-migrations           #      0.000 M/sec
               83 context-switches         #      0.000 M/sec
       956.474238 task-clock-msecs         #      0.999 CPUs

       0.957617512  seconds time elapsed
Run Code Online (Sandbox Code Playgroud)


aus*_*len 5

检查Linux的perf子系统,这是从Linux系统获得软硬件性能计数器所需的方法.