LinuxでソフトウェアRAIDとLVMを使用する場合、どのIOスケジューラーと先読み設定が優先されますか?


28

複数のレイヤー(物理ドライブ-> md-> dm-> lvm)の場合、スケジューラー、先読み設定、およびその他のディスク設定はどのように相互作用しますか?

mdadmで作成されたソフトウェアRAIDデバイス(/ dev / md0)の一部である複数のディスク(/ dev / sda-​​/ dev / sdd)があるとします。各デバイス(物理ディスクおよび/ dev / md0を含む)には、IOスケジューラ(そのように変更)および先読み(blockdevを使用して変更)の独自の設定があります。dm(crypto)やLVMなどを追加すると、独自の設定でさらにレイヤーを追加できます。

たとえば、物理デバイスに128ブロックの先読みがあり、RAIDに64ブロックの先読みがある場合、/ dev / md0からの読み取りを行うときにこれは受け入れられますか?mdドライバーは64ブロックの読み取りを試みますが、物理デバイスドライバーはそれを128ブロックの読み取りに変換しますか?または、RAIDは先のデバイスへの「パススルー」を先読みして、64ブロックの読み取りを行いますか?

スケジューラにも同じ種類の質問がありますか?IOスケジューラの複数の層とそれらがどのように相互作用するかを心配する必要がありますか、または/ dev / md0が基礎となるスケジューラを効果的にオーバーライドしますか?

この質問に答えようとする試みの中で、これを理解するのに役立つかもしれないスケジューラーとツールに関する興味深いデータを掘り下げました。

回答:


7

md0から読み取りを行う場合、md0の先読みが使用されます。md0のコンポーネントであるsdaから読み取りを行った場合、sda設定が使用されます。デバイスマッパーはI / Oを複数の読み取りと書き込みに分割してRAIDを実行しますが、それはすべて先読みが行われるブロックキャッシュレイヤーの下にあります。ストレージスタックは次のようになります。

ファイルシステム-O_DIRECTで開くときにキャッシュをバイパスします

ブロックキャッシュ-先読み、書き込みキャッシュ、スケジューラー

デバイスマッパー-dm、lvm、ソフトウェアRAID、スナップショットなど

sd-ディスクドライバー

SCSI-エラー処理、デバイスルーティング

ハードウェアドライバー-scsiカード、FCカード、イーサネット

あなたがすることに注意してください

dd if=/dev/sda of=foo

あなたはsdaをファイルとして読んでいるので、ブロックキャッシュを通過しています。ディスクに直接移動するには、次の操作を行います

dd if=/dev/sda of=foo iflag=direct

I / Oエレベータースケジューラについては、ディスクドライバー(sd)にのみ存在します。/ sys / block / mdまたは/ sys / block / dmの下にキューディレクトリはありません。ディスクエレベータのソートは1回だけ実行します。


2
あり/sys/block/md0/queue/scheduler、私のシステムでは、そこでの唯一の選択肢ですnone
ピーターアイゼントラウト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.