Debian
為什麼我的同步 I/O 與直接相比如此糟糕?
我在軟體 RAID 1 設置中有兩個 3TB 磁碟,主機作業系統是 64 位 Debian wheezy。
發行:
dd if=/dev/zero of=test bs=64k count=3k oflag=direct && rm test
產量:
201326592 bytes (201 MB) copied, 1.423 s, 141 MB/s
如果我更改 dd 命令以使用同步 IO 呼叫(通過將 oflag 開關從“直接”更改為“同步”),寫入性能下降:
201326592 bytes (201 MB) copied, 76.0286 s, 2.6 MB/s
顯然,同步 IO 會導致性能下降,但我預計寫入吞吐量可能會下降到直接等效值的一半或三分之一(最壞情況)。2.6MB/s 似乎很極端,讓我覺得某處有問題。
同步 IO 會停止,直到塊被寫入磁碟並由控制器確認,因此您最終會在塊之間等待至少一個尋軌時間。您每秒獲得大約 40 個 64k 塊,或者每 25 毫秒一個。這與花費一個 10 毫秒的尋軌時間寫入數據和另一個更新 inode 中的元數據以及一些作業系統成本是一致的。
這就是為什麼你不想使用同步 IO,除非你真的需要強一致性。