第 9 章。直接和内存映射 IO

目录
9.1. 直接 IO
9.2. 内存映射 IO

对于读取操作(从设备读取),sg 驱动程序的正常操作是请求底层(适配器)驱动程序将 [1] 数据 DMA 传输到 sg 驱动程序管理的内核缓冲区中。然后,sg 驱动程序会将其缓冲区的内容复制到用户空间。[对于写入操作(向设备写入),此顺序相反]。虽然这种双重数据处理显然效率低下,但它确实将一些硬件问题与用户应用程序解耦。由于这些以及历史原因,“双缓冲”IO 仍然是 sg 驱动程序的默认设置。

“直接”和“内存映射”IO 都是允许数据直接从底层(适配器)驱动程序 DMA 传输到用户应用程序的技术(反之亦然,对于写入操作)。这两种技术都能带来更快的速度、更小的延迟和更低的 CPU 利用率,但代价是复杂性(始终如此)。例如,当 SCSI 适配器正忙于将数据 DMA 传输到用户应用程序时,Linux 内核不得尝试换出用户应用程序中的页面。

注释

[1]

较旧的 SCSI 适配器和一些伪适配器驱动程序没有 DMA 功能,在这种情况下,将使用 CPU 复制数据。