我正在忙着寫一些東西來測試Linux上磁盤IO的讀取速度。讀取二進制文件,Linux緩衝區緩存
目前,我有這樣的事情來讀取文件:
編輯以更改代碼這樣:
const int segsize = 1048576;
char buffer[segsize];
ifstream file;
file.open(sFile.c_str());
while(file.readsome(buffer,segsize)) {}
對於foo.dat,這是150GB,我第一次讀它大約需要2分鐘。 但是,如果我在第一次運行的60秒內運行它,則需要大約3秒的時間才能運行。這怎麼可能?當然,唯一可以從這個快速讀取的地方是RAM中的緩衝區緩存,並且該文件太大而無法放入RAM中。
該機器具有50GB的RAM,並且該驅動器是具有所有默認設置的NFS安裝。請讓我知道我在哪裏可以確認這個文件實際上是以這種速度讀取的?我的代碼錯了嗎?第一次讀取文件時似乎需要一段正確的時間。
編輯爲添加: 發現我的文件只能讀取到一個隨機點。我已經設法通過從1048576將segsize降低到1024來解決這個問題。我不知道爲什麼改變它可以讓ifstream讀取整個文件,而不是在隨機點停止。
感謝您的答案。
爲什麼你認爲整個文件必須適合緩存? – 2009-08-10 13:20:51
當我第一次讀取文件時,它幾乎完全是IO綁定,130s WALL,3s CPU,當我第二次讀取文件時,CPU和WALL的時間幾乎完全相同,表明沒有IO足夠接近。 – Salgar 2009-08-10 13:24:25