两次读取内存值不一致的问题
环境:
cpu:intel i7-3615QE
内存:ddr3 8G
系统:Ubuntu16.04,linux4.4.0 x64,
设备:pcie3.0x8,使用FPGA实现
现象描述:
1.这款pcie设备采用dma方式写内存,传输速度大概在6Gb/s,每次传输大小在512字节以内的数据包;
2.采用中断+轮询混合方式,由于每秒钟大概能完成100万+次数据包传输,因此估计还是轮询方式为主;
3.驱动里采用多buffer乒乓方式,10x4MB的buffer轮换,初步排除cache一致性问题
4.在内核层对内存里数据进行检查时,会发现某一次数据值不对。将该内存区域的值打印出来时,发现值是对的。也就是说同一地址,两次读取的值不一致;
5.上述情况发生时机不固定,短则在完成几千万个包时就会发生,长则几十亿个包时才发生;
6.如果完全采用中断方式,多个数据包完成给一次中断方式,在中断里唤醒等待对列来读取数据,未发现上述现象发生(1000+小时),怀疑与读取内存的时机有关;
7.该系统pcie不稳定,个别机器在link到pcie3.0x8时,跑上一段时间FPGA里的pcie核会死掉