Raspberry Piのサイトにも書かれているdiskとrdiskのアクセス速度の違い。どういう理由で違うのか、調べてみました。
diskとrdiskの違い
diskとrdisk、デバイス名が違うと速度が違うということから名前は違うけれど同じものを指しているというのはわかります。では何が違うかというとUNIXから見た扱い方。
- disk … ランダムアクセス可能なデバイス
- rdisk … シーケンシャルアクセスされるデバイス
シーケンシャルっていうのは先頭から順番にってこと。ランダムと違って割り込んだりできないから順番に処理される。
UNIXはマルチタスクOSなので、ディスク読み書き要求が同時に複数発生することがありえます。その際、ランダムアクセスが可能になっていないと最初の読み書きが完全に終了するまで次の要求に応えることができません。
したがって通常はランダムアクセス可能なdiskデバイスに対して操作をします。
それでなんで速度が違う?
同じ疑問を持った人がいてStackExchangeのQ&Aで質問していました。まさにmacOSからRapberry PiへのOS書き込みに関してです。ここで細かい回答をしている人がいます。
diskもrdiskも同じものを見ているのですが、ユーザーがdiskという名前でアクセスしたときは4kBごとのバッファを経由してアクセスしています。
原文は from user space と表現されているので、カーネルからだとまた違うのかな?
rdiskでアクセスした場合はバッファを通さずに読み書きができるので、いちいち4kBの細切れデータを扱う必要がありません。ddのようにランダムアクセスの発生しないものであれば大変都合がよく、大幅なスピードアップが望めるということです。