理論極限值是可以計算的:1333MHz * 64bit(單通道,雙通道則128bit) / 8(位到字節單位轉換) = 10.664GB/s。這只是理論,實際發揮還要看內存控制器,實際上1333單條跑出來的數據在7~9GB/s差不多了。
首先,實際中我沒見過內存速度超過10GB/s的情況,不知道是不是題主你把單位弄錯了?實際見過的像RamDisk之類的軟件,連續讀寫能達到的速度也不過5~8GB/s左右,如果是隨機讀寫,性能大概還要下降接近十分之一。
所以內存沒你想的那么快。
其次,內存檢測不是把內存讀寫一遍就完事,讀寫完還要檢測讀寫數據是否一致,這些都是要通過CPU的ALU完成,CPU的負載會非常重,而且很多時候也並非是大塊讀寫,而是4字節甚至單字節讀寫,這樣算下來,為了檢測一個字節的內存單元,CPU可能需要十幾個到幾十指令,這里還包含不少算數指令,速度很慢。
這樣最終算下來,內存檢測的速度大概在100MB/s或者更慢,這還沒完,為了檢測內存的每個bit是否正確,通常來說要擦寫很多中不同的數據,比如uboot里的內存檢測就寫了好幾次,如果以4字節16進制數來看,那么寫入的東西包括:全0,全1,全5,全A,全F,基於地址的移位,地址值,地址值求反……
這還沒完,還要檢測物理地址的地址線是否有效,地址線可能會斷開、互繞、短路等等,還有一堆堆的數字要寫進去、讀出來,有些地址線還可能把同一個內存位置錯誤的映射成兩個不同的地址,因此寫入的次序也有要求。
所以最終的結果就是內存檢測的時間非常漫長,不亞於壓縮一部像內存那么大的片子。
補充:以上僅限於用專門的內存檢測工具測試的效果,PC機開機自檢一般只做很簡單的測試,速度很快。
首先,實際中我沒見過內存速度超過10GB/s的情況,不知道是不是題主你把單位弄錯了?實際見過的像RamDisk之類的軟件,連續讀寫能達到的速度也不過5~8GB/s左右,如果是隨機讀寫,性能大概還要下降接近十分之一。
所以內存沒你想的那么快。
其次,內存檢測不是把內存讀寫一遍就完事,讀寫完還要檢測讀寫數據是否一致,這些都是要通過CPU的ALU完成,CPU的負載會非常重,而且很多時候也並非是大塊讀寫,而是4字節甚至單字節讀寫,這樣算下來,為了檢測一個字節的內存單元,CPU可能需要十幾個到幾十指令,這里還包含不少算數指令,速度很慢。
這樣最終算下來,內存檢測的速度大概在100MB/s或者更慢,這還沒完,為了檢測內存的每個bit是否正確,通常來說要擦寫很多中不同的數據,比如uboot里的內存檢測就寫了好幾次,如果以4字節16進制數來看,那么寫入的東西包括:全0,全1,全5,全A,全F,基於地址的移位,地址值,地址值求反……
這還沒完,還要檢測物理地址的地址線是否有效,地址線可能會斷開、互繞、短路等等,還有一堆堆的數字要寫進去、讀出來,有些地址線還可能把同一個內存位置錯誤的映射成兩個不同的地址,因此寫入的次序也有要求。
所以最終的結果就是內存檢測的時間非常漫長,不亞於壓縮一部像內存那么大的片子。
補充:以上僅限於用專門的內存檢測工具測試的效果,PC機開機自檢一般只做很簡單的測試,速度很快。
所以內存沒你想的那么快。
其次,內存檢測不是把內存讀寫一遍就完事,讀寫完還要檢測讀寫數據是否一致,這些都是要通過CPU的ALU完成,CPU的負載會非常重,而且很多時候也並非是大塊讀寫,而是4字節甚至單字節讀寫,這樣算下來,為了檢測一個字節的內存單元,CPU可能需要十幾個到幾十指令,這里還包含不少算數指令,速度很慢。
這樣最終算下來,內存檢測的速度大概在100MB/s或者更慢,這還沒完,為了檢測內存的每個bit是否正確,通常來說要擦寫很多中不同的數據,比如uboot里的內存檢測就寫了好幾次,如果以4字節16進制數來看,那么寫入的東西包括:全0,全1,全5,全A,全F,基於地址的移位,地址值,地址值求反……
這還沒完,還要檢測物理地址的地址線是否有效,地址線可能會斷開、互繞、短路等等,還有一堆堆的數字要寫進去、讀出來,有些地址線還可能把同一個內存位置錯誤的映射成兩個不同的地址,因此寫入的次序也有要求。
所以最終的結果就是內存檢測的時間非常漫長,不亞於壓縮一部像內存那么大的片子。
補充:以上僅限於用專門的內存檢測工具測試的效果,PC機開機自檢一般只做很簡單的測試,速度很快。
