Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 通过DMA从设备访问大缓冲区_Linux Kernel_Linux Device Driver - Fatal编程技术网

Linux kernel 通过DMA从设备访问大缓冲区

Linux kernel 通过DMA从设备访问大缓冲区,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我想知道当我们想从支持DMA的设备传输10GB(超过可用RAM)这样的大数据时,设备、cpu和操作系统是如何协同工作的。在上网浏览之后,我了解了以下两种方法 使用IOMMU(它将设备地址转换为物理地址) 将缓冲区复制到外设的可寻址内存空间,或从外设的可寻址内存空间复制缓冲区 我读了一些相关的stackoverflow文章,说我们可以在启动时增加dma大小,但我想知道一些非常大的缓冲区,它们不能放入内存。这些方法正确吗?您不必一次将其全部转移到其他位置。。。大数据通常以非常小的块传输,并分批处理。

我想知道当我们想从支持DMA的设备传输10GB(超过可用RAM)这样的大数据时,设备、cpu和操作系统是如何协同工作的。在上网浏览之后,我了解了以下两种方法

  • 使用IOMMU(它将设备地址转换为物理地址)
  • 将缓冲区复制到外设的可寻址内存空间,或从外设的可寻址内存空间复制缓冲区

  • 我读了一些相关的stackoverflow文章,说我们可以在启动时增加dma大小,但我想知道一些非常大的缓冲区,它们不能放入内存。这些方法正确吗?

    您不必一次将其全部转移到其他位置。。。大数据通常以非常小的块传输,并分批处理。例如,一次获取1MB,将其流式传输到磁盘或网络,或实时从中提取有用信息并丢弃,等等。如果您的问题没有提到,请添加一个更具体的示例。@Peter谢谢您的时间。这就是我想知道的。我认为有一些不同的机制可以用来优化大块。是的,我现在明白了,这是一个小批量的转移。将要传输的区块复制到DMA可寻址区域。