前幾天在 LinuxFab 上的 [QA 特搜] 看到打開 DMA 的方法,迫不及待拿來一試,首先下指令 :
hdparm -Tt /dev/hda
測測目前的速度, 同樣指令多跑幾次求一個平均值, 然後用 :
hdparm -d 1 /dev/hda
把 DMA 功能打開,再測一次速度,哇 ! 果然就是不一樣,Timing Buffer disk reads 的效率足足提升了四倍以上 !
當然測試的數據不是拿來看爽的,真正跑程序的時候要有效果才算數, ㄟ.....說真的,開了DMA之後,照往常的習慣打開 Xwindow,開個 Netscape 來上網,都還是要讀個一陣子,好象沒有感覺快多少勒 ? 干脆拿個表來計時好了,結果果然令人失望,開不開 DMA,結果都一樣。
啊....怎麼會這樣,好吧,干脆拿出特耗硬盤的指令 locate -u 好好的給它操一下,這下總該看的出差距了吧,嗯.....沒開 DMA 花了1分22秒,為避免有些資料 cache 在 RAM 裡面影響測試結果,重開機打開 DMA 再跑一次,嗯.....1 分 22 秒,天啊,又是同燈同分 !
難道 DMA 是沒用的嗎 ? 還是 hdparm 根本沒用還秀個假數據來騙人 ? 怎麼會這樣 ? 嗯.....還好以前上課沒打瞌睡,對 DMA 這東西還稍有概念,在這裡跟大家解釋一下。
硬盤上的東西,一定要先搬到RAM裡面才能拿來執行,早期把資料由 Hard Disk 搬到 RAM 的工作,是由 CPU 來執行的,而這項工作可不如想象中的輕松,資料是以 1 byte 為單位來搬的,所以要讀取 1 MB的資料,CPU要從硬盤搬 1 byte 到 CPU的緩存器,然後再從 CPU 搬到 RAM,重復這樣單調而無聊的動作 1048576 次。
殺雞焉用牛刀,以一個高價位而且多用途的 CPU 來做這樣的苦工,實在有點可惜,於是 DMA(direct-memory-access) controller 便誕生了,CPU 只要告訴它 "請幫我搬 1MB的資料到內存" ,DMA controller 就會開始做這份苦工,同時間 CPU 便可以去做別的工作,等到資料搬好,DMA controller 會通知 CPU,CPU 就有現成的資料可以用了。
了解 DMA 的運作原理,就不難想象為什麼之前的測試結果都相同。因為處理 locate 這一件簡單的事,對 CPU 來說是游刃有余的,沒有 DMA 做幫手,照樣處理的很妥當。所以呢,當你需要從硬盤存取大筆的資料,同時間 CPU loading 又重的時候,DMA 的價值就會顯現出來。
重新設計測試的方式,要 loading 重而且存取又多的,就屬壓 mp3 這件事了,於是抓了 NotLame 來,針對一個 53.8 MB 的 wav 檔做壓縮,嗯.....沒有 DMA 花了 1 分 52 秒,重開機打開 DMA 再試一次,哈哈 ! 1 分 37 秒,果然有比較快。
以目前的硬盤跟主機板來說,很少沒有支持 DMA 的,打開 DMA,多多少少都會增進你的效能,尤其在 High Loading 的時候特別顯出價值,不要猶豫了,打開你的 DMA 吧!
摘自:http://linuxfab.cx