Mac OS Xで“ / dev / rdisk”が“ / dev / disk”の約20倍速いのはなぜですか


117

による ラズベリーパイドキュメンテーション / dev / diskまたは/ dev / rdiskを使ってOSをフラッシュカードにロードできます。

rdiskはrawディスクを表します。

/ dev / diskはブロックレベルのデバイスです。 なぜrdiskは20倍速くなるのでしょうか。

Mac OSXを使う

注:OS Xでは、各ディスクの/ devに2つのパス参照があります。   / dev / disk#はバッファされたデバイスです。これはデータが送信されていることを意味します。   追加の処理が行われます。 / dev / rdisk#は生のパスです。   より速く、そしてddプログラムを使用するとき完全にOKです。クラス4 SD   rdiskパスを使用すると、その差は約20倍速くなりました。


2
ちなみに、私はテストを実行しましたが、rdiskは実際にはもっと時間がかかりました。
spuder

4
別の副次的注意として、私もテストしなければならないと感じました、そして(ddによる)rdiskコピーはディスク対応物を使用するよりほぼ正確に4倍速いことがわかりました。
Travis Griggs

@TravisGriggs私はどのOS、Mac、またはLinuxに興味がありますか?
spuder

2
私が読んでいたRaspberry Pi SDカードの画像のいくつかの指示では、 "rdisk"はタイプミスだと思いました。さらに調べてみると、私はその違いをグーグルしてこのスレッドを見つけました。私の場合は、/ dev / diskの代わりに/ dev / rdiskを使って1.7GBのイメージをSDカードに書き込むほうが13倍高速でした。 Macbook Pro Retina 13 "、2015年初頭モデル。
tobias.mcnulty

2
さらに別の注意点として、私はUbuntu ARMの画像を新しく購入したSandisk Extreme Pro MicroSDカードに追加しました。 / dev / disk1は2.3 MB /秒で書き込みましたが、/ dev / rdisk1は83.7 MB /秒、つまり36.4倍の速度で書き込みました。
DanielSmedegaardBuus

回答:


87

から man hdiutil

/ dev / rdiskノードはキャラクタ型の特殊デバイスですが、BSDの意味では "raw"であり、ブロックアラインの入出力を強制します。それらはバッファキャッシュよりも物理ディスクに近いです。一方、/ dev / diskノードはバッファ付きブロック特殊デバイスであり、主にカーネルのファイルシステムコードによって使用されます。

素人の言葉で /dev/rdisk ディスクにほとんど直接行き、 /dev/disk より高価なルートを経由する


13
rdiskが使えるのになぜディスクを使うのですか?
user391339

15
@ user391339キャッシングはまだ望ましいことです。リムーバブルメディアがある場合は、物理デバイス上のデータをできるだけ早く取得する必要があります。これは、データを別の物理的な場所に保存する必要があるためです。内蔵ハードドライブは別の話です。あなたは通常それらを持ち歩かないので、データが実際にいつデバイスに書き込まれるかは気にしません。デバイスに読み書きするデータをキャッシュすると、ディスクに書き込むのがより高価になりますが、プログラムは高速です。書き込みたいデータがすべてディスクに書き込まれるまで待つ必要がないためです。
Kritzefitz

@ダン、再 "強制";意味?
Pacerier

91

受け入れられた答えは正しいですが、それは詳細には入りません。

間の主な違いの1つ /dev/disk そして /dev/rdiskあなたがユーザ空間からそれらにアクセスするとき、それはそれです /dev/disk バッファリングされています。読み取り/書き込みパス /dev/disk I / Oを4KBのチャンクに分割し、それをバッファキャッシュに読み込み、次にユーザスペースのバッファにコピーします(そして次の4KBの読み込みを発行します…)。これは、整列されていない読み取りと書き込みを実行できるという点で優れており、それだけで機能します。対照的に、 /dev/rdisk 基本的には単に読み取りまたは書き込みをデバイスに直接渡すだけです。つまり、I / Oの開始と終了はセクタの境界に合わせる必要があります。

1セクタよりも大きい読み取りまたは書き込みをすると、 /dev/rdiskその要求はそのまま渡されます。下位層はそれを分割するかもしれません(例えば、USBプロトコルの最大ペイロードサイズのために、USBはそれを128KBの部分に分割します)が、通常はより大きくより効率的なI / Oを得ることができます。ストリーミングするときは、viaのように dd128KBから1MBは、現在の非RAIDハードウェアでほぼ最適なパフォーマンスを得るためにはかなり良いサイズです。

によって行われているキャッシング /dev/disk 読み取り/書き込みパスは非常に単純で、ほぼ頭脳的に死んでいます。厳密には必要でなくてもキャッシュします。デバイスがメモリマップを作成してアプリのバッファに直接転送できるかのように。それは小さな(4KB)I / Oを行います、そしてそれはI / O毎の多くのオーバーヘッドにつながります。先読みも後書きもしません。


詳細な説明に感謝します。
gpanda

3

そうみたいです /dev/disk そして /dev/rdisk HDDとSSDでは動作が異なります。 MicroSDカードをチェックしたいです。 Sandisk Ultra MicroSD 64GBに2GBのディスクイメージを書き込んだだけです( https://www.amazon.com/gp/product/B073JYVKNX

テストを数回繰り返しましたが、結果は安定していました。 17MB /秒 にとって /dev/disk vs 20MB /秒 にとって /dev/rdisk。変化 bs=1mbs=16m 書き込み速度に全く違いはありません。

  1. に書く /dev/disk2

    sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/disk2 bs=1m
    2094006272 bytes transferred in 121.860007 secs (17183704 bytes/sec)
    
  2. に書く /dev/rdisk2

    $ sudo dd if=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img of=/dev/rdisk2 bs=1m
    2094006272 bytes transferred in 102.743870 secs (20380839 bytes/sec)
    

それから私は読書速度をテストすることにしました: 26MB /秒 にとって /dev/disk vs 87MB /秒 にとって /dev/rdisk。変化 bs=1mbs=16m 読み取り速度に全く違いはありません。

  1. から読む /dev/disk2

    sudo dd if=/dev/disk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531-2.img bs=1m
    257949696 bytes transferred in 9.895572 secs (26067184 bytes/sec)
    
  2. から読む /dev/rdisk2

    $ sudo dd if=/dev/rdisk2 of=~/Downloads/ubuntu-18.04-4.14-minimal-odroid-xu4-20180531.img bs=1m
    877658112 bytes transferred in 10.021974 secs (87573377 bytes/sec)
    

1

記録的には、少なくともmacOS High Sierraでは、/ dev / diskは/ dev / rdiskよりずっと速いようです。 ddまたはddrescueを実行して、磁気HDからSSDへのスループット比較コピーは、/ dev / rdiskを使用して3.7MBps、/ dev / diskを使用して45MBpsでした。したがって、最新バージョンのmacOSでは、最高のパフォーマンスを得るには、/ dev / rdiskの代わりに/ dev / diskを使用するのが最善かもしれません。


2
内蔵SSDストレージからddと1MBのbsを持つSDカードに4.6GBのラズビアストレッチイメージを書き込むとき、それでもmacOS 10.13.2を実行している2013年後半のmacbook proの/ dev / diskよりもはるかに高速に実行されます。 / dev / diskを使用して27.16分、/ dev / rdiskを使用してわずか5.18分かかりました。
digitaladdictions

@digitaladdictionsは最新のmacOSでいくつかテストを行いました。 superuser.com/a/1346063/126537
k06a
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.