|
|
Acute
論壇第一大毒王
論壇第一小神童
. 積分: 3281
. 精華: 8
. 文章: 11574
. 收花: 14037 支
. 送花: 3260 支
. 比例: 0.23
. 在線: 323 小時
. 瀏覽: 2250 頁
. 註冊: 8220 天
. 失蹤: 5572 天
|
|
|
|
|
|
|
#7 : 2008-12-8 02:49 AM
只看本作者
|
送花
(21)
送出中...
|
|
|
先強調.. 我沒用過supercache
supercache 有強調, 他是block-level cache, 所謂block-level 是指他是建構在filesystem 跟實體storage device 之間. 通常OS 本身在block-level 也會有一層小小的cache 機制, 即使是早期的DOS 也有, DOS 的block-level cache 就是config.sys 裡面的BUFFER 設定.
討論cache 機制, 就得先知道電腦系統怎樣跟硬碟溝通, 還有硬碟真正的存取瓶頸在哪兒 ^^"
硬碟的存取以512 bytes (sector size) 為單位, 一次硬碟存取的動作是: 傳送讀取指令, 之後CPU 就去忙他的事情, 等待約9ms 硬碟資料準備完成, 會傳送interrupt 給CPU, 然後系統就去把資料搬到記憶體, 搬資料的時間很短, 以ATA100 的速度算, 搬4K 資料, 只需要0.04ms左右, 所以, 真正花時間都是在等待, 而不是搬資料. 一般而言, 硬碟一次可以讀取的最大資料通常都是32K, 所以, 如果一次讀取32K, 所需要的時間成本是9ms + 0.32ms, 一次讀取16K 的時間成本是9ms + 0.15ms... 以此類推.
filesystem 面對硬碟時, 當然也不會笨到每次存取512 bytes, 可是filesystem 受限於cluster 的關係, 每次讀/寫的最大容量就是一個cluster, 以NTFS 為例, 幾乎cluster size 都4K, 而FAT32 通常都是32K(除非硬碟容量很小, FAT32 才能用比較小的cluster size). 無論一個檔案在硬碟上多分散, 通常還是會連續存放, 以我自己的硬碟而言, 最慘的一個file, 大小是1.5G, 分散成將近3000個區塊, 平均起來, 一個區塊也足足有500K.
block-level 的read-ahead, 他不用管cluster size, 正常來說, 他會把讀取動作擴展到硬碟容許的最大讀取值, 如前面所說, 至少一次是32K. 就算整個多讀取的資料都浪費了, 其實浪費時間小於0.3ms(以32K 為例), 但是只要省到一次, 就是省下9ms!! 因此, 其實不用擔心read-ahead 會浪費的問題, 如果記憶體夠, read-ahead 絕對是加分的!!
可是, read-ahead 也不應該設過大, 因為只要造成硬碟多次讀取, 其實就形成一種浪費, 最好的設定法, 是配合硬碟的存取限制, 一般來說, 32K 是一個不錯的數值, 因為supercache 是根據page size 為單位設定read-ahead, 所以, 如果page size 已經是32K, 應該是設定1. 這部份我跟badcat 對於supercache 的認定不同, badcat 是認為:
引用: badcat寫到:
cache size / cache page * Read-ahead 數 = 每次預讀資料量 Byte(s)
128MB / 32k * 5 = 20480 Bytes = 20kB
256MB / 32k * 3 = 24576 Bytes = 24kB
384MB / 32k * 2 = 24576 Bytes = 24kB
即 無論多少 ???MB Cache,Read-ahead 的量都壓低在 20kB 左右。
可是我看supercache 官方資料, 我覺得, 那個數值是表示, 每次read-ahead 幾個page !!
我是從這個網頁看的:
http://www.superspeed.com/desktop/scsv-desktop_release_notes.htm
裡面提到:
The maximum value of this setting varies according to page size. For page sizes of 4, 8, 16, 32, and 64 KB, the maximum value is 15 pages. For page sizes of 128 and 256 KB, the maximum values are 7 and 3 pages, respectively.
write cache 一直是disk cache 最恐怖的一部分, 當系統因故停擺, 所有還沒真實寫入硬碟的資料, 全部消失. 事實上現在的硬碟很多本身都有write cache 機制, 只是, 做系統的人, 打死也不願意去開啟這項功能.
啟用write cache 除了要負擔系統停擺可能資料流失的問題外, 另一個困擾其實就是ROACH遇到的問題 -- 系統在執行需要即時反應的程式! 怎麼說呢? cache memory 是有限度的, write cache 比較大的用處在於頻繁的細微改變硬碟資料, 例如資料庫程式, 可能因故不斷改變幾個特定的資料錄. 如果發生不斷的寫入硬碟資料, 然後位置都不同, write cache 用途就完全消失了, 反而造成更大的困擾, 因為當cache memory 被耗盡, cache 程式就得把記憶體內的資料真實寫入硬碟, 而且這時候, 極可能是一次大量的寫入, 所以反而造成系統瞬間被整個拉住, 如果播放影片, 後果當然就挺悽慘嚕.
Acute.
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
|
|