ブロックサイズが小さいとき、なぜ私のddはとても遅いのですか?

ブロックサイズが小さいとき、なぜ私のddはとても遅いのですか?

オンライン記事によると、次のようにマウントするとnobarrierディスクの速度が速くなります。

  1. imgに小さなデータの塊を書き込みます(使用barrier)。遅い

    # dd if=/dev/zero of=xfs.img bs=1024 count=20000
    # mkfs.xfs xfs.img
    # mkdir -p xfs
    # mount -o loop xfs.img xfs
    # dd if=/dev/zero of=output bs=32K count=1 conv=fsync
    32768 bytes (33 kB) copied,0.01037167 s, 2.4 MB/s
    
  2. -o nobarrierimg()に小さなデータの塊を書き込みます。早く

    # dd if=/dev/zero of=xfs.img bs=1024 count=20000
    # mkfs.xfs xfs.img
    # mkdir -p xfs
    # mount -o loop,nobarrier xfs.img xfs
    # cd xfs ; dd if=/dev/zero of=output bs=32K count=1 conv=fsync
    32768 bytes (33 kB) copied, 0.000608567 s, 53.8 MB/s
    

今フラグを/追加するために再インストールしたいと思います。nobarrierだから編集しました/etc/fstab

/dev/sda2      /      xfs     defaults,nobarrier    0    0

次にmount -o remount /

しかし、結果は良くありません:

# pwd
/root
# dd if=/dev/zero of=output bs=32K count=1 conv=fsync
32768 bytes (33 kB) copied, 0.00811443 s, 4.0 MB/s

nobarrierdd-imgでは機能しますが、既存のパーティションでは機能しない理由を理解できません。誰でも教えてもらえますか?

ベストアンサー1

ループバックファイルシステムを使用する場合は、ループバックが生成されたファイルシステムを考慮する必要があります。特に、ループバックファイルシステムでfsyncが呼び出されたにもかかわらず、カーネルはループバックファイルシステムの書き込みページをファイルシステムを含むディスクにすぐにフラッシュしないことがあります。これらの書き込みはsyncループバックで発生する可能性がありますが、ファイルシステムを含むメモリのダーティページとして発生する可能性があります。

これで、nobarrierこのオプションがループバックドライバや埋め込みファイルシステムとどのようにやり取りするのかわかりません。だから実験してみました。含まれるファイルシステムをマウントするための変数を追加しましたsync。結果は次のとおりです。

(すべての出力はdd if=/dev/zero of=xfs/output bs=32K count=10000 conv=fsync

  1. asyncfs 、ループバックを含むbarrier

    32768000 bytes (33 MB) copied, 0.401873 s, 81.5 MB/s
    
  2. asyncfs 、ループバックを含むnobarrier

    32768000 bytes (33 MB) copied, 0.0414423 s, 791 MB/s
    
  3. syncfs 、ループバックを含むbarrier

    32768000 bytes (33 MB) copied, 71.5749 s, 458 kB/s
    
  4. syncfs 、ループバックを含むnobarrier

    32768000 bytes (33 MB) copied, 70.6415 s, 464 kB/s
    

fsを含めると、barrier総速度が大幅に変化します。しかし、インクルードファイルシステムがページキャッシングの利点を享受し、ページキャッシングのメリットを得ることができない場合、速度向上はほとんど失われます。nobarrierasyncsync

結論は、ループバックファイルシステムをテストしbarrierて使用することは役に立たないということです。nobarrierファイルシステムとカーネルキャッシュに関連する対話がブロックされます。ループバックを使用してパフォーマンスをテストするときに誤った結果をもたらす唯一の要因は、カーネルキャッシュではないようです。

おすすめ記事