dd CFへの書き込みが遅れました。

dd CFへの書き込みが遅れました。

私はCardBusアダプタを搭載したラップトップ(カーネル2.6.38)で使用されている古い64MBのCFカードを持っています。このCFカードに64MBの画像を書き込むと、書き込み速度が200MB/sを超えます。

T42 ~ # fdisk -lu

Disk /dev/sda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders, total 78140160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00043afc

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    73947135    36972544   83  Linux
/dev/sda2        73949182    78139391     2095105    5  Extended
/dev/sda5        73949184    78139391     2095104   82  Linux swap / Solaris

Disk /dev/sdb: 64 MB, 64225280 bytes
8 heads, 32 sectors/track, 490 cylinders, total 125440 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          32      125300       62634+   4  FAT16 <32M
Partition 1 has different physical/logical endings:
     phys=(488, 7, 32) logical=(489, 3, 21)
T42 ~ # mount | grep -i sdb
T42 ~ # time dd if=64MB of=/dev/sdb bs=10M
6+1 records in
6+1 records out
64225280 bytes (64 MB) copied, 0.320419 s, 200 MB/s

real    0m0.624s
user    0m0.000s
sys 0m0.304s
T42 ~ #

64MBを0.32秒で転送することは、10年後のCFカードとしては当然非現実的であり、完了後すぐにノートブックからカードを取り外すと、出力にdd if=64MB of=/dev/sdb bs=10M多くのエラーが見られます<timestamp> end_request: I/O error, dev sdb, sector <sector number>dmesgこの動作の原因は何ですか?

ベストアンサー1

ブロックデバイスの書き込みはカーネルによってバッファリングされます。これはファイルシステムがマウントされているときにはっきりと表示されます(アンマウント時にバッファをフラッシュする必要があるため、返されるまでに長い遅延が発生します)umount。より多くのRAMが利用可能になると、この遅延はさらに悪化するようです。カーネルがデータ転送を開始する直前に0.5GBを書き込むこともできます。転送が完了した後、数分間カーネルがデバイスに透過的に書き込むことができます。

この機能はいくつかの理由で役立ちます。これにより、デバイスの読み書きに対する応答速度が速くなり、データも透過的に転送できます。読む書き込み後、実際の物理書き込みが完了する前にバッファから読み出されます。長期間取り付けられたハードドライブの場合、カーネルは時間の経過とともに書き込みが行われるようにスケジュールし、ユーザーの観点からデバイスの応答性を向上させます。特に磁気ハードドライブの場合、大きなブロックを順次書き込む方が、ドライブ全体の複数の場所に小さなブロックを書き込むよりも高速です。ブロックは物理デバイスにプッシュされる前にソートおよびグループ化できます(ハードドライブは一部のバッファリングとデータソートも実行します)。ハードウェア内で)。つまり、デバイスがどれくらい遅いのかわからず、ネットワークに搭載されているドライブやハードドライブを休止状態から起動する必要がある場合、初期遅延もわかりません。

ブロックデバイスに直接アクセスすると、呼び出しを行わずにumount転送が完了した時点を実際に認識できないため、バッファリングはやや残念です。syncとにかく電話する必要があります。

おすすめ記事