轉自:https://www.xuebuyuan.com/2125675.html
dd 測試sync、fsync和fdatasync參數詳解
ceph.com/docs/master/rados/operations/crush-map/ 在這兩個連接中,在DD創建文件時都推薦使用conv=fdatasync 這個參數,又查了一下,一篇UC對ceph集群做的測試:http://tech.uc.cn/?p=1223,他們沒有使用 conv=fdatasync這個參數,而使用了另
dd if=/dev/zero of=test-geml-02.iso bs=1M count=5120 oflag=dsync 15.1 MB/秒
在大多數的unix/linux對磁盤io的寫操作都是通過緩存來完成的,基本的原理如下:當將數據寫入文件時,內核通常先將該
數據復制到其中一個緩沖區中,如果該緩沖區尚未寫滿,則並不將其排入輸出隊列,而是等待其寫滿或者當內核需要重用
該緩沖區以便存放其他磁盤塊數據時,再將該緩沖排入輸出隊列,然后待其到達隊首時,才進行實際的I/O操作。 我們稱之
為延遲寫,極大的減少了寫磁盤的次數。
但是在沒寫特殊的應用中我們需要實時的將應用層數據寫入到磁盤上 特別是一些高可靠性要求的系統中 數據需要及時的寫入磁盤 即便是瞬時系統故障 數據也可以安全恢復,於是就有了sync、fsync和fdatasync函數。但在功能上 這三個函數又略
有區別:
sync函數只是將所有修改過的塊緩沖區排入寫隊列,然后就返回,它並不等待實際寫磁盤操作結束。通常稱為update的
系統守護進程會周期性地(一般每隔30秒)調用sync函數。這就保證了定期沖洗內核的塊緩沖區。
fsync函數只對由文件描述符filedes指定的單一文件起作用,並且等待寫磁盤操作結束,然后返回。fsync可用於數據庫這
樣的應用程序,這種應用程序需要確保將修改過的塊立即寫到磁盤上。
fdatasync函數類似於fsync,但它只影響文件的數據部分。而除數據外,fsync還會同步更新文件的屬性。
參考:http://www.hostloc.com/thread-86657-1-1.html