处理设备时缓存有限制吗?

时间:2011-07-04 15:01:26

标签: c++ c cache-control device cpu-cache

在我的计算机架构课程中,教授向我们提出了以下问题:

"Caches can have serious limitations when dealing with devices. Why is this?"

我不知道为什么会有限制或者它们可能是什么。在Google上搜索后,我似乎找不到准确的答案。有人可以解释为什么存在限制以及这些限制可能是什么,或者指出我可以帮助我回答这个问题的方向?

3 个答案:

答案 0 :(得分:2)

换句话说,您无法控制实际发送到设备的内容/时间。

答案 1 :(得分:2)

缓存和设备存在两个问题。第一个问题是基本功能正确性之一。即,系统通常必须将设备的存储器映射寄存器放置在完全绕过高速缓存的地址范围内。想象一下,这并没有发生,缓存是“在路上”。在这种情况下,尝试读取设备上的状态寄存器的软件将读取缓存提供的陈旧值!祝您的设备驱动程序正常工作。有些CPU为不可缓存的访问提供了特殊指令,但基本结果是相同的,因为缓存没有任何好处,只会在处理设备内存时使问题复杂化。

第二个问题是智能设备的性能问题,能够与内存进行直接内存访问(DMA)事务。当设备执行DMA写操作时,系统中的硬件总线逻辑会根据MESI协议完全远离CPU监听缓存行。核心强烈依赖于将数据保存在密切缓存中以提高效率。现在,该设备刚刚将所有缓存线拉开,这迫使内核在下一次软件访问时进行高延迟重新加载。即使对于DMA读取,通常也会发生相同的窥探,因为CPU通常会避免数据线处于共享状态。

集成到CPU本身的设备可能能够将缓存行留在CPU的最后一级缓存中,与CPU封装外的设备相比,这可以显着提升性能。

答案 2 :(得分:0)

基本上,您必须有办法确切地知道数据何时从缓存中刷出并进入您正在与之交谈的设备中。 RAM是一种与任何其他设备一样的设备,它会记住写入某个位置的最后一个数据。如果它不会存储在RAM中,那么设备也不会看到写入。 Linux使用与读取/写入障碍相关的函数,这些函数取决于体系

How Linux deals with it