在vmstat命令的输出中的cs参数中计算了什么样的上下文切换

vmstat为上下文切换提供了一个计数器cs。 正如这解释,上下文切换可以从一个进程到另一个进程,内核到用户或由于中断被触发。 cs是否给出了这个总数?如果是的话,有没有办法可以得到一个单独的输出

Vmstat cs列至less在Solaris上显示了自愿的上下文切换,即当进程(真正的线程)正在释放CPU时发生的自发上下文切换,因为它没有其他任何事情处理,例如等待一些外部事件,如待处理的I / O完成。

如果你想显示非自愿的上下文切换,你可以使用mpstat命令查看它的icsw列。 这里显示的上下文切换是由于进程被中断/抢占,因为具有更高优先级的东西需要CPU。

我认为这可能取决于操作系统。 在AIX 6.1上,您可以( http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/vmstat_command.htm ):

“(cs is)间隔中观察到的每秒钟上下文切换的次数,物理CPU资源被细分为10毫秒的逻辑时间片,假设一个线程被调度执行,它将运行直到它的时间片到期,直到它被抢占或自动放弃CPU的控制,当另一个线程被CPU控制时,必须保存前一个线程的上下文或工作环境,并且必须加载当前线程的上下文。有一个非常有效的上下文切换过程,所以每个交换机在资源方面是廉价的。上下文切换的任何显着增加,例如当cs比磁盘I / O和networking分组速率高很多时,应该引起进一步的调查“。

如果你的系统上有vmstat的源代码,你可以看看里面的内容,试着找出它的作用。

对于Linux,在内核2.6.23和更高版本上,可以通过命令进行自愿和非自愿的上下文切换

pidstat -w