IO
MMU,计算机术语,input/output memory management unit。Device的IOMMU类似于
CPU的MMU。
要在64位系统上支持32位设备,比如说网卡,如果没有IOMMU,就需要在
物理内存设备驱动做
DMA绑定的时候,系统返回给驱动的不再是
物理地址,而是
内核空间的某个地址(有的书上叫做总线地址),传输的时候,这个内核空间地址会经由IOMMU单元,IOMMU将这个
地址转换为物理地址。
scatter/gather并不会带来性能上的好处,但是会简化设备
驱动程序。例如
网卡驱动在发送包的时候,DMA绑定后,系统可能会返回给设备驱动多个
不连续的物理地址,
Solaris叫做cookie。这样的话,每一个cookie都需要占用一个发送描述符。如果
系统支持IOMMU的话,系统只会返回给
设备驱动一个cookie。当然了有专家提醒,因为这个原因,如果设备驱动是在没有IOMMU的情况下开发的,在支持IOMMU的系统上是没有问题的。但反之不然。