vmstat 为上下文切换提供了一个计数器 cs。这解释,上下文切换可以是从一个进程切换到另一个进程,从内核切换到用户,或者由于触发中断。cs 是否给出了总计?如果是,我是否有办法获得单个输出
答案1
Vmstat cs 列至少在 Solaris 上显示自愿上下文切换,即当进程(实际上是线程)释放 CPU 时发生的切换,因为它没有其他事情要做,例如等待某些外部事件(如待处理的 I/O 完成)。
如果要显示非自愿上下文切换,可以使用 mpstat 命令并查看其 icsw 列。这里显示的是因某个进程被中断/抢占而导致的上下文切换,因为优先级更高的进程需要 CPU。
答案2
我认为它可能与操作系统有关。在 AIX 6.1 上,您有(http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/vmstat_command.htm):
“(cs 是)在间隔内观察到的每秒上下文切换次数。物理 CPU 资源细分为每个 10 毫秒的逻辑时间片。假设一个线程被安排执行,它将运行直到其时间片到期、被抢占或自愿放弃对 CPU 的控制。当另一个线程获得对 CPU 的控制权时,必须保存前一个线程的上下文或工作环境,并加载当前线程的上下文。操作系统具有非常高效的上下文切换过程,因此每次切换在资源方面都很便宜。上下文切换的任何显著增加,例如当 cs 远高于磁盘 I/O 和网络数据包速率时,都应该引起进一步调查。”
如果您的系统上有 vmstat 的来源,您可以查看内部并尝试找出它的作用。
答案3
对于 Linux,在内核 2.6.23 及更高版本中,您可以使用以下命令按进程细分自愿和非自愿上下文切换
pidstat -w