AMD主板設(shè)置里的iommu?
IOMMU:input/output memory management unit。Device的IOMMU類似于CPU的MMU。
要在64位系統(tǒng)上支持32位設(shè)備,比如說(shuō)網(wǎng)卡,如果沒(méi)有IOMMU,就需要在物理內(nèi)存底端,也就是32位設(shè)備能夠訪問(wèn)到的地方設(shè)置一個(gè)叫做"bounce buffers"的東西,如果設(shè)備要訪問(wèn)高端內(nèi)存,操作系統(tǒng)就要在高端內(nèi)存和"bounce buffers"之間做一個(gè)拷貝。帶來(lái)的性能影響顯而易見(jiàn)。如果有了IOMMU,這個(gè)問(wèn)題就迎刃而解了。在設(shè)備驅(qū)動(dòng)做DMA綁定的時(shí)候,系統(tǒng)返回給驅(qū)動(dòng)的不再是物理地址,而是內(nèi)核空間的某個(gè)地址(有的書上叫做總線地址),傳輸?shù)臅r(shí)候,這個(gè)內(nèi)核空間地址會(huì)經(jīng)由IOMMU單元,IOMMU將這個(gè)地址轉(zhuǎn)換為物理地址。scatter/gather并不會(huì)帶來(lái)性能上的好處,但是會(huì)簡(jiǎn)化設(shè)備驅(qū)動(dòng)程序。例如網(wǎng)卡驅(qū)動(dòng)在發(fā)送包的時(shí)候,DMA邦定后,系統(tǒng)可能會(huì)返回給設(shè)備驅(qū)動(dòng)多個(gè)不連續(xù)的物理地址,Solaris叫做cookie。這樣的話,每一個(gè)cookie都需要占用一個(gè)發(fā)送描述符。如果系統(tǒng)支持IOMMU的話,系統(tǒng)只會(huì)返回給設(shè)備驅(qū)動(dòng)一個(gè)cookie。當(dāng)然了有專家提醒,因?yàn)檫@個(gè)原因,如果設(shè)備驅(qū)動(dòng)是在沒(méi)有IOMMU的情況下開發(fā)的,在支持IOMMU的系統(tǒng)上是沒(méi)有問(wèn)題的。但反之不然。IOMMU除了上述功能外還加入了對(duì)虛擬化的支持。簡(jiǎn)單來(lái)說(shuō)有兩個(gè)功能,一個(gè)DMA Remapping, 另外一個(gè)是Interrupt Remapping。IOMMU在源于SUN公司的SPARC平臺(tái),現(xiàn)在Intel平臺(tái)及AMD平臺(tái)也支持這一技術(shù)。
特么說(shuō)白了,就是硬件虛擬化!