【发布时间】:2011-08-22 23:16:47
【问题描述】:
是否有任何关于 Linux 上同一进程的线程之间上下文切换成本的良好经验数据(主要是 x86 和 x86_64)?我说的是一个线程在自愿或非自愿进入睡眠之前在用户空间中执行的最后一条指令与同一进程的不同线程在同一 cpu/核心上唤醒后执行的第一条指令之间的周期数或纳秒数.
我编写了一个快速测试程序,它在分配给同一个 cpu/core 的 2 个线程中不断地执行rdtsc,将结果存储在一个 volatile 变量中,并与它的姊妹线程的相应 volatile 变量进行比较。当它第一次检测到姊妹线程的值发生变化时,它会打印出差异,然后返回循环。我在 Atom D510 cpu 上以这种方式获得了大约 8900/9600 个周期的最小/中值计数。这个程序是否合理,数字是否可信?
我的目标是估计在现代系统上,每个连接线程的服务器模型是否可以与选择类型的多路复用竞争甚至优于选择类型的多路复用。这在理论上似乎是合理的,因为从在 fd X 上执行 IO 到 fd Y 的转换仅涉及在一个线程中休眠并在另一个线程中唤醒,而不是多个系统调用,但这取决于上下文切换的开销.
【问题讨论】:
-
无论如何,你到底有没有做过任何基准测试?如果是,结果如何?
标签: c linux pthreads posix context-switch