我一直在为BeagleBone Black开发USB帧缓冲驱动程序。驱动程序处理Page Fault的概念。每次出现Page Fault时,它都会读取Page并通过USB将其发送到设备。如果页面错误的数量太多,将会有大量数据通过USB传输,USB带宽可能无法及时传递那么多数据。
如果我在BeagleBoard上测试我的驱动程序,我会看到大约21000个页面错误,持续7秒的视频文件。但对于相同的驱动程序和相同的视频文件,我在戴着Intel CPU的戴尔笔记本电脑中的Ubuntu中出现了5600页的故障。起初我虽然我的Ubuntu机器比BeagleBone(512 MB)有更多的RAM(4GB),这导致Ubuntu中的少量页面错误。
因此,为了确保,我创建了一个安装了Ubuntu和512 MB RAM的虚拟机,并使用它测试了相同的驱动程序和视频文件。我很惊讶地发现,在VM上,Page Fault的数量仍然是5600。
所以我确实创建了更多虚拟机并对所有这些进行了测试,并且在每种情况下页面错误的数量都是5600.我在Arch Linux上测试了多个版本的Debian。在每种情况下,页面错误的数量是5600。
所以最后我将代码移到新硬件(AMD CPU)和不同版本的Ubuntu中,并且在那个版本中发生了相同数量的页面错误。
为了方便起见,我在测试期间没有运行任何其他程序或者没有安装任何服务。所有硬件或VM中的页面大小也相同:4096字节
所以我想知道一些可能导致BeagleBone中页面错误数量增加的因素,而在所有其他机器中则完全相同。我认为它至少应该在不同的机器上有所不同,这是没有发生的。