2014-02-05 50 views
1

我已經使用「dd」來創建測試文件並跨HDD執行備份。沒問題。dd - 瞭解塊大小

目前,我試圖用它來測試NFS傳輸速率。起初,我正在改變塊大小(「bs」的論點)......但是這讓我想到了,爲什麼我需要改變這個論點?

,我想模擬一個典型的用例是:

  • X節點的存儲器中大數據結構
  • 節點X想要將其寫入到位於NFS安裝目錄中的文件

在這種情況下,用於2D陣列的典型的C/C++代碼將是:

FILE *ptr = fopen("path_to_nfs_area", "w"); 
for (int i = 0; i < data.size(); ++i) 
    fwrite(data[i], sizeof(float), width, ptr); 
... 

因此,在這種情況下,我們以32位增量寫入緩衝區(sizeof(float)) - 因爲這是一個FILE對象,所以它可能也被緩衝了(也許這不是一件好事,但可能無關緊要這個討論)。

我很難從「dd」寫入「bs」塊中的if->與寫入內存變量(並使用dd模擬此變量)的應用程序之間的跳轉。

是否有意義的說,改變「bs」的值比系統PAGE_SIZE小是沒有意義的?

這是我目前的理解,所以我不明白爲什麼改變「DD」塊大小會事宜:

Interaction between app and NFS/TCP

+0

嘗試使用'nfsstat'進行基準測試。 –

回答

1

你可能會得到superuser.com更好的答案,因爲這個問題是一個有點偏離主題。

但考慮nfs共享沒有裝上異步標誌的可能性 - 在這種情況下,在下一次寫入啓動之前,需要nfs服務器確認每個單獨的寫入。所以bs=1bs=2相比需要大約兩倍的時間,並且它們中的每一個都會比合理的塊大小慢得多。

如果在nfs mount上設置了異步標誌,那麼內核可能會將幾個小的寫入合併爲一個大的寫入,所以設置bs的效果應該是可以忽略的。

無論如何,如果您正在測試爲特定應用程序設置環境,請使用該應用程序進行測試,而不是其他任何操作。性能可能取決於特定於應用程序的行爲,以至於任何通用工具都無法重現。

+0

我認爲你的意思是「UNIX&Linux」而不是superuser.com。 –

+0

謝謝你的迴應。我們總是以「同步」的方式進行安裝 - 過去的測試結果顯示可以忽略不計的改進,但不會超過風險。但是這並沒有成爲問題的核心 - 我開始更加說服自己,當談到性能測試NFS的傳輸速率時,塊的大小並沒有起作用,我添加了一個OP的圖表 - 隨時糾正任何錯誤的假設/錯誤。 – Jmoney38

+1

@ Jmoney38我同意你的觀點,'bs'在NFS基準測試中不起主要作用。 (但是,Linux VFS層會比較小''bs'')。順便說一下'cd/mount/nfs; tar -xf linux-kernel.tar.gz是NFS的流行基準之一。在運行之前,務必使用'#echo 3>/proc/sys/vm/drop_caches'刪除所有內核讀取緩存。 – nodakai