2009年12月7日 星期一

Cache, Write Buffer 與Device效能~

在很早以前的CPU是很單純的,固定從某一個地方去讀取下一道指令,照著指令要它做什麼就做什麼,隨著電子電路的進步,CPU和周邊的速度出現了極大的差距,CPU常常需要花時間在等待資料讀取或是寫入的動作而不是執行真正的運算工作,因此新的CPU架構:

1) 在CPU和存取的實際位址之間加入了Cache的機制
2) 在資料寫入的過程中加入 Write Buffer 來平衡兩邊的速度差異

Cache的好處是讓CPU可以有一個快速的記憶體減少等待的時間,缺點就是這塊叫做Cache的記憶體比較小,無法容納整個RAM裡頭的資料。而Write Buffer則是用來緩衝Cache和RAM之間的速度差異,而且在較新的CPU當中,還可以設定write-combine的屬性,讓連續位址存取,可以只透過一次的讀寫就達成,大大增加效率。

只是以上這些,究竟對一個撰寫device driver的工程師有什麼好處,因為提到CPU變快變好,好像只會讓一般軟體變快,driver應該不需要特別修改,也不會比較快速。

其實這幾項變革,對撰寫driver來說是有需要特別注意的小地方,而且對某些種類的driver大大有益處。

首先是Cache,CPU會把要寫入的資料先寫在Cache,而不是直接到要寫的位址上,這樣CPU等待時間很少,可是實際上要寫driver的時候,可能因為是要對device上的控制暫存器作讀寫,卻變成被cache住,動作沒有真正及時的被執行,造成程式人員以為已經寫入,實際上是寫到cache裡頭去了。因此,撰寫driver的時候首先要注意某些存取區段需要用non-cache的屬性。若是非得要用cache,那device就得考慮到cache和device/RAM的資料同步的問題。

再來是write-combine的屬性,利用現在記憶體的特性,將連續位址存取的命令合成一次,這對處理multimedia data的hardware相當有用,效能可以提升30%以上。

以上簡單的介紹對一些撰寫driver時,因為CPU不同特性造成device driver需要修改或是效能不同的現象和簡單原理,其他其實還有像是某些連接bus的device(像是pci/agp/pcie),其實也有一些需要注意的地方,了解來龍去脈,寫出來的driver才會大大加快。

沒有留言:

張貼留言

搜尋此網誌