发博文
个人资料
  • 博客访问:39416
  • 博文数量:16
  • 博客积分:1410
  • 博客等级:上尉
  • 注册时间:2005-10-29 04:47:00
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
分类: linux basic


背景:
    开始对新写的实时CAN驱动做带干扰的Roundtrip测试,在测试时发现一个奇怪的现象:当连续进行Roundtrip 测试时,每次耗时照理说应该几乎是一样的(不然怎么是实时驱动?)可是事实上每次试验结果,耗时都是在连续测试大概20个样本之后就会有个100微秒左右的骤降。例如1Mbps码速率Roundtrip,前20个样本大概需要约146微秒完成一次,在骤降之后就会出现平稳的136左右的耗时。而在此之后的实时表现都非常理想,再没有大的波动。于是开始怀疑是系统缓冲的原因(CPU Caching),不然还真找不到其他的理由了。既然这样,如果禁用这些缓冲(包括L1,L2 两级缓冲)
实现方法:
    言归正传,现在我所知道的禁用缓冲的方法只有两种(希望能在以后补充):
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两级缓冲,抑或只是其中之一。
测试结果:
   关闭缓冲后(disable caching),整个系统反映马上慢了下来,小小一个ls都可以看出延迟。有兴趣的朋友可以试试。

亲,您还没有登录,请[登录][注册]后再进行评论