いくつかのリアルタイムの制約がある C コードを書いています。dd を使用してディスクに書き込める速度をテストしました。
dd if=/dev/zero of=/dev/sdb bs=32K count=32768 oflag=direct
これにより、32K ブロック サイズで 1GB のゼロが /dev/sdb に書き込まれます。
これで約103 MB /秒に達します
今、私はプログラムで似たようなことをします:
open("/dev/sdb",O_WRONLY|O_CREAT|O_DIRECT|O_TRUNC, 0666);
タイムスタンプ値を 32K バッファから /dev/sdb に 10,000 回 (for ループで) 書き込みます。別のタイムスタンプ値を取得し、MB/s で速度を取得するために少し計算を行います。約 49 MB/s です。
dd と同じ速度に達しないのはなぜですか? strace は、私が使用するのと同じ open コマンドを明らかにします。