优先考虑RAM访问Linux

时间:2015-07-10 15:17:05

标签: multithreading linux-kernel real-time

我有一个FPGA采集板,可通过PCIe2 4通道将数据流传输到PC。我设法获得了大约1.6 GB / s的完整规格带宽。数据以1.5 GB / s的速度从ADC进入FPGA,我使用相对较小的FIFO(16k点)进行缓冲。在PC端,我有32GB的DDR4-2133,我锁定了,dma映射了16GB。当我开始传输数据时,PCIe根联合体开始限制通道,有时节流非常强烈,累积等待时间达到〜1ms。我的意思是我得到授权转移一个TLP,等待〜1us,一个TLP,等待等等......最终FIFO变满了,我开始丢失数据,我无法增加FIFO大小。数据限制的沉重程度与操作系统的工作负载之间存在相关性,尤其是以太网,音频,图形流量。我一直在寻找是否有办法强行优先考虑RAM访问。

在一种情况下,这些流式数据最终将被写入磁盘,希望是实时的,而不是将数据流式传输到RAM然后打开并写入文件,我想知道是否有办法直接映射将文件存入已经存在的内存区域,这样我只需要强行冲洗。

在另一种情况下,数据最终将由CPU实时处理。现在,我正在运行用户空间代码来处理具有专用内核的线程中的驱动程序(我有10个内核HT)。每当流数据流被传输时,我得到一个中断,另一个专用核心中的另一个线程(处理线程)被唤醒并开始处理数据。在执行此操作之前,内核代码会同步dma映射缓冲区以进行cpu访问,这需要时间,但并不是很多,但在我使用的数据速率非常重要。原则上我想我可以避免这种情况,因为CPU不会像FPGA一样同时访问同一个位置,是吗? 然后处理线程开始读取并处理数据,同时流式传输继续进行。而不是使用for循环从ram读取数据到缓存,有没有办法强制将大量内存传输到缓存?

我知道我处理的是庞大的数据吞吐量。

最后一个问题:在深入研究RT Linux操作系统之前,您认为我会有一些优势吗?

由于

0 个答案:

没有答案