Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1349364
  • 博文数量: 281
  • 博客积分: 8800
  • 博客等级: 中将
  • 技术积分: 3346
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 22:31
文章分类

全部博文(281)

文章存档

2013年(1)

2012年(18)

2011年(16)

2010年(44)

2009年(86)

2008年(41)

2007年(10)

2006年(65)

我的朋友

分类: LINUX

2010-07-15 15:08:22

IOMMU


  IOMMU:input/output memory management unit。
  Device的IOMMU类似于CPU的MMU。
  

IOMMU/MMU

  对IOMMU的支持主要有两个原因,一个是对老设备的支持,另外一个是对scatter/gather的支持。
  要在系统上支持32位设备,比如说网卡,如果没有IOMMU,就需要在物理内存底端,也就是32位设备能够访问到的地方设置一个叫做"bounce buffers"的东西,如果设备要访问高端内存,操作系统就要在高端内存和"bounce buffers"之间做一个拷贝。带来的性能影响显而易见。如果有了IOMMU,这个问题就迎刃而解了。在设备驱动做DMA邦定的时候,系统返回给驱动的不再是物理地址,而是内核空间的某个地址(有的书上叫做总线地址),传输的时候,这个内核空间地址会经由IOMMU单元,IOMMU将这个地址转换为物理地址。
  scatter/gather并不会带来性能上的好处,但是会简化设备驱动程序。例如网卡驱动在发送包的时候,DMA邦定后,系统可能会返回给设备驱动多个不连续的物理地址,Solaris叫做cookie。这样的话,每一个cookie都需要占用一个发送描述符。如果系统支持IOMMU的话,系统只会返回给设备驱动一个cookie。当然了有专家提醒,因为这个原因,如果设备驱动是在没有IOMMU的情况下开发的,在支持IOMMU的系统上是没有问题的。但反之不然。
  IOMMU除了上述功能外还加入了对虚拟化的支持。简单来说有两个功能,一个DMA Remapping, 两外一个是Interrupt Remapping。
  IOMMU在源于SUN公司的SPARC平台,现在Intel平台及AMD平台也支持这一技术。[1]
阅读(2804) | 评论(1) | 转发(0) |
0

上一篇:智力测试

下一篇:atapi

给主人留下些什么吧!~~

chinaunix网友2010-07-18 23:44:44

你好,我看到你的文章是关于kgdb调试socket内核路线,可是我怎么也没能 在sys_sicketcall停下来,我的是2.6.32.6内核。我的q-q:8-2-9-5-7-1-3-8,谢谢.指点。你的文档可以发邮箱,或者联系我.yalogr@163.com