一般來說。CPU需要0個週期來訪問其寄存器,1-30個週期來訪問高速緩存,50-200個週期來訪問主存。
對於Intel Core i7來說。這個值可以很具體。Intel Core i7的主頻約在2-3GHz。可以計算出。
L1—指令緩存 | L1-數據緩存 | L2-緩存 | L3-緩存 | 內存 | |
訪問週期 | 4 | 4 | 11 | 30-40 | 50-200 |
緩存大小 | 32KB | 32KB | 256KB | 8MB | 若干GB |
訪問時間 | 2ns | 2ns | 5ns | 14-18ns | 24-93ns |
也就是說,訪問內存的時間是ns級別的。
再來看看磁盤。
磁盤的訪問時間=尋道時間+旋轉延遲+數據傳輸時間。對於普通的7200轉STAT磁盤。這個值是:9ms+4ms+0.02ms=13.02ms。
也就是說,如果從磁盤隨機訪問一個字節,需要13.02ms,比從內存獲取的時間24-93ns,至少要多14萬倍。相差5個數據級,何其巨大的差距。
順序讀寫磁盤會快一些。 假設一個盤片有1000個扇區,每個扇區512字節,7200轉。順序讀可以忽略掉尋道的時間。所以吞吐量是 扇區數×扇區大小×轉速=1000*512/(60/7200)=58MB/s。這個數據似乎不咋樣。如果使用多盤系統。STAT II的接口,吞吐量可以達到300MB/s。追求極限性能可以mount裸盤直接操作多盤。
存儲器山
《深入理解計算機系統》一書中提到了一個存儲器山的概念。教授先生別出心裁的將存儲器的吞吐量,畫成了一座山。
存儲器山的測試程序是這樣的:
X軸表示的是讀取步長,Y軸是吞吐量,Z軸是數據總量的大小。
可以看出來步長越小,數據數據總量越小。性能越好。
很明顯,山是不是平滑的,是成階梯狀。紅色部分爲L1緩存,綠色爲L2緩存,淺藍是L3緩存,深藍是內存。我們可以得一些數據。
L1-數據緩存 | L2-緩存 | L3-緩存 | 內存 | 磁盤 | SSD | |
緩存大小 | 32KB | 256KB | 8MB | 十幾GB | 幾TB | 幾百GB |
訪問時間 | 2ns | 5ns | 14-18ns | 24-93ns | 13.0ms | 30-300us |
吞吐量 | 6500MB/s | 3300MB/s | 2200MB/s | 800MB/s | 60MB/s | 250MB/s |
也就是說,去除高速緩存的內存,吞吐量性能只有800MB/s而已。比起磁盤的300MB/s,網絡的100MB/s。也只是快了幾倍。平時說內存比磁盤快許多,其實沒有那麼多,如果不好好操作內存,內存的頻繁讀寫,也可以成爲系統瓶頸。
總結
現在處理器的主頻已經停止了增長。但是高速緩存仍然以摩爾定律的速度增長的。長久的看,高速緩存頻率逐漸會追上處理器的性能,容量也會越來越大。但是內存則不容樂觀,雖然容量增加了許多,但是性能確沒有大的提升,磁盤的狀況也是類似;SSD剛剛開始普及,趨勢不明顯。
但可以看到,SSD的吞吐量和內存的吞吐量相去並不大。也就是說在未來,當SSD完全替代了磁盤。我們要像現在操作磁盤一樣小心翼翼地操作內存,纔有可能寫出符合那個時代計算機性能的程序。相比之下,SSD的使用比磁盤要輕鬆一些,畢竟隨機讀寫的速度在一兩個數量級上。
轉載自http://www.yankay.com/%E5%86%85%E5%AD%98%E7%A9%B6%E7%AB%9F%E6%9C%89%E5%A4%9A%E5%BF%AB%EF%BC%9F/