我们如何减少上下文切换时间

时间:2012-01-15 07:12:05

标签: operating-system context-switch

我们都知道上下文切换时间是纯粹的开销并没有用。但我想知道如何减少上下文切换时间。使用更多寄存器可以帮助我们这样做吗?

3 个答案:

答案 0 :(得分:1)

您是否正在编写操作系统?上下文切换时间取决于您必须保存/恢复的寄存器。一种可以节省时间的方法是通过新处理器上的AVX扩展,允许您将所有寄存器保存/恢复到一块内存。

答案 1 :(得分:1)

最小化上下文大小和/或避免上下文切换。究竟是怎么做的取决于上下文(不是你正在切换的上下文,而是问题的上下文,CPU,操作系统等)。

在x86 CPU上,如果浮点单元没有发生变化,可以避免不必要的保存和恢复浮点单元的状态。这是通过在上下文切换期间将task switched中的CR0位设置为1,然后等待源自新线程的第一个FPU指令的特殊CPU异常来完成的。当它发生时,保存旧线程的FPU状态,加载当前线程的FPU状态,重置CR0.TS并继续执行该FPU指令。如果线程来来往往但是没有发生异常,那意味着线程没有进行FPU工作而你没有进行完整的上下文切换。

答案 2 :(得分:0)

程序员应该实现最小化锁争用的线程策略,同步机制和数据结构。当一个线程试图获取另一个线程已经获取的锁时,它几乎没有选择,只能多次轮询,希望它们能在很短的时间内释放它,然后放弃并进行上下文切换。

如果这个问题是从linux管理员的角度出发的,那么你可以通过增加最小时间片(参见sched_latency_ns和sched_min_granularity_ns)或者确保对处理器的需求小于或等于可用处理器数量。当你有备用处理器时,上下文切换速率会显着降低 - 它不需要"切换"任何现有的处理器,它都可以使用空闲处理器。