读拷贝更新RCU和中断延迟

读拷贝更新RCU和中断延迟

原文网址:https://lwn.net/Articles/65832

原文作者:Corbet

原文时间:2004年1月10日

自从RCU算法被kernel 2.5接纳之后,就获得大量应用。在很多场景下,RCU避免了对锁的竞争,可以大幅度提高多处理器系统的性能和可扩展性。更多关于RCU的工作原理,请参考 https://lwn.net/Article/4974和https://lwn.net/Article/37889这两篇讨论,或者参与SCO小组的讨论。

但RCU还存在一个小问题,它影响了*软*件*中断响应时间【its effect on interrupt response times】。对于内核近期不会引用的数据结构,RCU的清零工作会延迟/拖后进行。清理工作是在软中断上下文中执行的,也就是说,在硬中断之后或在重调度期间【at rescheduling time】才会执行RCU清理工作。RCU需要清理的、受保护的数据链表,可能相当长;例如,目录入口缓存【dentry cache】。这样一来,软件中断上下文的执行时间可能很长。换句话说,RCU清理程序代码就会长期霸占处理器,这导致高优先级进程一直处于等待状态。

Dipankar Sarma 观察到这种现象,发现RCU回调函数在某些情况下需要400毫秒。这看上去好像不长,但这种响应延迟也足够长了。因此,他提供补丁来解决这个问题。

基于现代内核编程思想,这种问题似乎存在一个标准处理方法:创建一个新的内核线程。Dipankar的补丁确实也是这么做的;它在每个CPU上都绑定了一个krcud线程,只有在RCU回调列表比较长的时候才负责清理工作。如果回调列表比较短,还是在软件中断上下文中来处理,因为这样会更快些;但是如果列表比较长,默认超过256项时,一旦检测到有高优先级的实时进程需要执行时,RCU的软中断处理就会将CPU控制权返还给内核调度器,将列表尾部的数据留到krcud线程来处理。

Dipankar补丁的测试效果比较好,整个系统延迟小于400毫秒。但是他还没有得出最后的结论,因为补丁还需要更多的测试。如果事情进展顺利,linux2.6内核会很快响应这个补丁。

缺页中断延迟可能会影响 RCU stall 的发生,原因如下: 1. RCU 机制的宽限期:在 RCU 机制中,序需要等待宽限期结束后才能访问到旧版本的数据。宽限期是为了确保所有已经开始的操作都能够访问到旧版本的数据,以避免数据不一致性。当一个更新操作发生时,RCU 会将旧版本的数据保留一段时间,直到宽限期结束。 2. 缺页中断导致的页面加载延迟:当系统内存不足时,如果一个进或线发起一个内存访问请求,但所需的页面不在内存中,操作系统会触发缺页中断来将所需的页面从磁盘加载到内存中。这个页面加载的过可能涉及磁盘 I/O 操作,而磁盘 I/O 操作的延迟相对较高。 3. RCU stall 的产生:在缺页中断导致页面加载延迟的情况下,RCU 序可能会被阻塞。因为在宽限期内,RCU 序需要等待页面加载完成,以确保可以访问到旧版本的数据。这种阻塞造成了 RCU stall,也就是序的延迟。 4. RCU stall 的影响:RCU stall 会导致取操作的延迟性能下降。当缺页中断延迟较高时,RCU 序可能需要等待较长的时间才能继续执行,这会导致系统的响应性能下降,并可能影响到其他并发操作的执行。 为了减轻缺页中断延迟导致的 RCU stall,可以考虑优化内存管理策略,增加系统内存容量,或者使用高速缓存技术来加速页面加载操作等。这样可以减少缺页中断延迟,提高系统的内存访问效率,从而改善 RCU 的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值