2013-08-21 76 views
1

我在寫一個應用程序,其中磁盤性能很有趣。我以前使用的舊的,機械硬盤和使用的技術,this thread明確衡量業績前緩存:以編程方式清除Linux中安裝的(SSD)磁盤上的緩存

// Clear cache for benchmarking            
sync();  
std::ofstream ofs("/proc/sys/vm/drop_caches"); 
ofs << "3" << std::endl; 
ofs.close(); 

運作良好,並給了我預期的結果 - 的〜100 MB/s的測量盤連續讀取速度清理緩存時,緩存獨立時會高出許多倍。

有一天,我安裝了一個SSD盤,安裝在/ media /下。在新的計算機重新啓動後,第一對測量結果與預期的一樣(約300 MB/s),但當緩存開始時,它們顯然要高得多。

我現在的問題是,自從將應用程序移動到SSD之後,以前使用的代碼行無效。那個緩存的行爲方式可能不同嗎?任何我需要做的不同來清除它?現在唯一可行的就是重啓電腦。

+1

給那個downvoted這個的人:請留下評論,並指出爲什麼我可以修復它。 –

+0

奇怪的是,這些磁盤應該具有相同的行爲,因爲緩存位於操作系統的更高層......可能是其他內容,比如讀取SSD上的緩存(注意:我甚至不確定它們是否有一個.. 。)? –

+0

@ KarolyHorvath:你能詳細說明一下讀取緩存的想法嗎?我對這些事情大部分都是新手。 –

回答

0

你不會說你剛剛在做什麼,也不知道是否有其他方法可以處理這些數據。您只能使用drop_caches從緩存中清除未使用的數據 - 如果由於某些原因需要保留數據(例如,因爲它很髒並且需要寫回),它將不會被清除。從kernel documentation for drop_caches

這是一個非破壞性的操作,不會釋放任何髒物體。 要增加通過此操作釋放的對象數量,用戶可以在寫入/proc/sys/vm/drop_caches之前運行 sync。這將最大限度地減少系統上的髒對象的數量,並創建更多的候選人,以便刪除 。

相關問題