| |
| 利用Machine State Word (MSW) Register 实现即时开关系统缓冲 |
|
| 来源:
ChinaUnix博客 日期:
2006.03.10 05:44 (共有条评论) 我要评论 |
| |
原载RTAI SPACE
http://justin8086.cublog.cn/
背景:
开始对新写的实时CAN驱动做带干扰的Roundtrip测试,在测试时发现一个奇怪的现象:当连续进行Roundtrip 测试时,每次耗时照理说应该几乎是一样的(不然怎么是实时驱动?)可是事实上每次试验结果,耗时都是在连续测试大概20个样本之后就会有个100微秒左右的骤降。例如1Mbps码速率Roundtrip,前20个样本大概需要约146微秒完成一次,在骤降之后就会出现平稳的136左右的耗时。而在此之后的实时表现都非常理想,再没有大的波动。于是开始怀疑是系统缓冲的原因(CPU Caching),不然还真找不到其他的理由了。既然这样,如果禁用这些缓冲(包括L1,L2 两级缓冲)
原载RTAI SPACE
http://justin8086.cublog.cn/
实现方法:
言归正传,现在我所知道的禁用缓冲的方法只有两种(希望能在以后补充):
1、在主板BIOS中设置。因为做测试用的SECO M570+VIA EDEN ESP 6000配置的BIOS没有设置缓冲的选项,所以要禁用缓冲似乎还不是很直接的事。
2、修改MSW,就是所谓的机器状态字。这一点好像还没人提过,因为MSW从第5位到第30位的含义都是不公开的,哪怕是很多关于intel的文档中也都是注明为“RESERVED”,我在其官方网站上也找过,不过没发现有更详尽的说明。事实上,对于缓冲的设置,修改MSW的第30位就可以实现。直接说白了,用0x4000000与MSW或运算,缓冲就被禁用了(disable caching);反之,将该位置零就启用了缓冲(enable caching)。哪怕是LINUX已经启动,我们也可以随时开关缓冲!
不过到现在我还不能确定是否同时开关了L1,L2两级缓冲,抑或只是其中之一。
原载RTAI SPACE
http://justin8086.cublog.cn/
测试结果:
关闭缓冲后(disable caching),整个系统反映马上慢了下来,小小一个ls都可以看出延迟。有兴趣的朋友可以试试。
原载RTAI SPACE
http://justin8086.cublog.cn/
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11160/showart_83239.html
|
| 发表评论
查看评论(共有条评论)
我要提问
|
| |
|
|
|