內存究竟有多快?

一般來說。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/

發佈了24 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章