LVMはパフォーマンスに影響しますか?


86

いくつかのサーバーをLinuxに移行する必要があり、評価する必要がある重要な側面の1つは、新しいホストシステムに弾力的なストレージ容量が必要であることです。当然のことながら、いくつかの基礎研究を行って、LVMに出会いました。

lvmを使用するとパフォーマンスが低下しますか?もしそうなら、どのようにそれを測定できますか?

私が今考えているのは、LVMとその上で実行される仮想化Linuxボックスを備えたホストOSとしてLinuxを使用することです(ゲストOSにもLVMを追加する必要がありますか?)。

回答:


102

LVMは、邪魔にならないように設計されています。ユーザースペースの観点からは、ディスクの上の「仮想スタッフ」の別のレイヤーのように見え、実際に出入りする前にすべてのI / Oがこれを通過しなければならないことを想像するのは自然なことですハードウェア。

しかし、それはそうではありません。カーネルにはすでに、「これをファイルに書き込む」などの高レベルの操作をデバイスドライバーに接続し、ディスク上の実際のブロックに接続するマッピング(または実際には複数のマッピング層)が必要です。

LVMが使用中の場合、そのルックアップは変更されますが、それだけです。(とにかく発生しなければならないので、少し違う方法で実行してもパフォーマンスへの影響は無視できます。)実際にファイルを書き込む場合、ビットは物理メディアへの直接のパスを取ります。

LVMがパフォーマンスの問題を引き起こす場合があります。LVMブロックが基礎となるシステムと適切に整合していることを確認する必要があります。これは、最新のディストリビューションで自動的に行われるはずです。そして、このようなバグの影響を受けやすい古いカーネルを使用していないことを確認してください。ああ、LVMスナップショットを使用するとパフォーマンスが低下します(アクティブなスナップショットごとにますます低下します)。しかし、ほとんどの場合、影響は非常に小さいはずです。

最後については、どのようにテストできますか?標準のディスクベンチマークツールはbonnie ++です。LVMでパーティションを作成し、テストし、それを消去して(同じ場所で、他の要素を同一に保つために)プレーンなファイルシステムを作成し、ベンチマークを再度作成します。それらは同一に近いはずです。


17

LVMは、他のすべてのものと同様に、複雑な祝福です。

パフォーマンスに関しては、ディスクにビットがヒットする(またはディスクから読み取ることができる)前に解決する必要がある抽象化の別のレイヤーであるため、LVMは少し邪魔になります。ほとんどの場合、このパフォーマンスヒットは実際には測定できません。

LVMの利点には、データを移動することなく既存のファイルシステムにストレージを追加できるという事実が含まれます。ほとんどの人はこの利点のためにそれが好きです。

この方法で使用されるLVMの欠点の1つは、追加のストレージがディスクにまたがる場合(つまり、複数のディスクが含まれる場合)、ディスク障害によってデータが犠牲になる可能性が高くなることです。ファイルシステムが2つのディスクにまたがっており、どちらかが失敗すると、おそらく失われます。ほとんどの人にとって、これはスペースとコストの関係で許容できるリスクです(つまり、これが本当に重要な場合、正しく実行するための予算があります)-そして、彼らが言うように、バックアップ良いからです?

私にとって、LVMを使用しない唯一の理由は、災害復旧が十分に定義されていない(または少なくとも定義されていなかった)ことです。スクランブルOSを搭載したLVMボリュームを備えたディスクを別のコンピューターに簡単に接続することはできず、そのコンピューターからデータを回復できました。LVMボリュームを回復するための多くの手順には、時間をさかのぼってvgcfgbackupを実行し、結果の/ etc / lvmconfファイルをホースボリュームをホストしているシステムにコピーするなどの手順が含まれているようです。私が最後にこれを見てから3年か4年で状況が変わったことを願っていますが、個人的にはこの理由でLVMを使用することはありません。

そうは言った。

あなたの場合、VMはホストシステムに比べて比較的小さくなると思われます。これは、私にとって、後でVMのストレージを拡張したいと思うことを意味します。これは、VMに別の仮想ディスクを追加し、影響を受けるVMファイルシステムを拡大することにより最適に実行されます。仮想ディスクはホストシステム上の同じ物理デバイス上にある可能性が高いため、spanning-multiple-disksの脆弱性はありません。

VMが重要な場合、ホストシステムを何らかの方法でRAID化することになり、後でストレージを拡張するための柔軟性が低下します。そのため、LVMの柔軟性はおそらく必要ないでしょう。

したがって、ホストシステムでLVMを使用しないで、LVMを使用するようにVMをインストールすると仮定します。


6
@DM-LVM2物理ボリュームは、md-RAIDを含む任意のブロックデバイスであるという言及をスキップしたようです。IE:基礎となるRAIDタイプ/ dev / md0が何であるかに関係なく、pvcreate / dev / md0。/ dev / md0がミラー化された物理ディスクのRAIDアレイである場合...単一の物理ドライブの損失がLVM2グループに影響を与えるのはかなり困難です。また、RAIDアレイを作成するときに、メディア側としてLVM2論理ボリュームを使用できます。どちらもデバイスマッパーレベルで動作し、どちらもデバイスイン/デバイスアウトレイヤーです。

1
あなたの回復の懸念は過度であり、比較的最近のLinuxディストリビューションを使用してコンピューター間でlvmアレイを移動するのは簡単です(つまり、debianのoldstableは十分新しい)
hildred

@ user13719:はい、ブロックデバイスをLVMできますが、実際にはこれをしません。最終的には単一のドライブがLVMされます。次に、別のドライブを追加し、LVMを使用して既存のファイルシステムを新しいディスクに拡張します。その時点で、いずれかのディスクに障害が発生すると、LVMが強制終了されます。
デビッドマッキントッシュ14

@hildred、上記は私が言及していたことです-1つのディスクが欠落している複数のディスク(ブロックデバイス)にまたがるLVMからデータを回復できるツールは知りません。
デビッドマッキントッシュ14

2
これは、ナイフをジャグリングしながら自分自身を切る可能性があるため、ナイフが悪いと言っているようなものです。野菜を切るなど、より適しているタスクに使用します。
チノトボクロ16年

3

一般的に:複雑さの新しいレイヤーを追加する場合(「やることが多い」)、何も速くなりません。注:作業を追加するだけで、作業の方法を「変更」することはできません。

どうやって測定できますか?さて、1つのパーティションをLVMで作成し、もう1つで作成してから、通常のベンチマークを使用して実行します。の人々のように

http://www.umiacs.umd.edu/~toaster/lvm-testing/

一見、速度への影響はごくわずかです。これは、ベンチマークを実行した他の誰かの調査結果と同期しているようです。

「ext4は、LVMを使用した場合よりも、LVMを使用した場合、および他のファイルシステムのベンチマークよりも高速です」

ただし、独自にベンチマークを実行し、使用するハードウェアとOSが同じ動作をするかどうか、および弾力性のあるストレージを提供する複雑さの追加レイヤーの(おそらく)影響を無視できるかどうかを確認してください。

ゲストOSにLVMを追加する必要があります。これは、ゲストOSにもエラスティックストレージが必要かどうかによって異なりますか?ニーズによって、展開するものが決まります。


@akriaは、おっと、それが移動されています
hildred

あなたは確かに仕事のやり方を変えることができます。たとえば、GPS座標を使用して、または通りの名前で、または地元のランドマークで場所への道順を指定できます。異なる方法ですが、あなたはまだ同じ道を歩かなければなりません。紙の地図を見る時間と携帯電話の指示に従う時間はわずかに異なる場合がありますが、最終的には歩行時間と比較して無視できます。
mattdm

lvmの場合に追加された作業の影響は、実際の影響を及ぼさないと既に述べました。あなたが運転しているポイントは何ですか?
アキラ

私が「運転」しているのは、「注:作業を追加するだけであり、作業が行われる方法を「変更」するのではない」ということは事実ではありません。
mattdm

@mattdm:作業の実行方法(別のアルゴリズム、別のfsなど)を変更すると、異なる結果が得られることは明らかです。lvmはfsの動作を変更していません。あなたはそれを知っています。そして、それはあなたのポイントが実際に何であるか疑問に思っている理由ですか?「何かの層を追加する」とは、「他のものも変更する」のではなく、「追加する」ことを意味します。あなたもそれを知っています。
アキラ

0

ゲストOSにもLVMを追加する必要がありますか?

ホストの論理ボリューム内にext3またはext 4ファイルシステムがあれば十分なので、そうすべきではありません。その中に別のボリュームグループと物理ボリュームと論理ボリュームを追加する必要はありません。


0

lvmだけでパフォーマンスが低下することはあまりありませんが、それを使用する場合は、代わりにzfsを使用してください。ボリューム管理と回復性、その他のあらゆる優れた機能を利用できます。


ZFSの1つの問題は、異なる速度とサイズの物理ボリュームをうまく処理できないことです。
ガブリエルフェア

1
それを処理しません...まだ。そして、あなたがそれらを適切に整理すれば、そうなります。lvmがどのように改善されるかわかりません。
-stu

0

lvm2が読み取りと書き込みの速度を倍増させることは誰にも言及していません(raid0と同様)。私は個人的に3つの同一のディスクを使用し、それらに対してストリップモードでlvm2を実行します。読み取りおよび書き込み操作は1/3の時間を要します。これは大きな影響であり、ファイルシステムは3倍高速です。私は知っています:どんなディスクも故障し、それらのすべてのデータはアクセスできなくなります。ただし、BackUPは必須であるため、これは失われることを意味するものではありません。Raid、LVM2、ZFSのようなものはBackUPを避けることはありません。だから、ミラーリングやraid5などは決して使用せず、常にストリッピング(最高のパフォーマンスを得るため)を使用し、バックアップを同期しました。ZFSはオンザフライ圧縮に最適であり、コピーパラメーターが1よりも大きい場合はミラーリングのようになりますが、ZFSには他にも誰も持っていないことの1つは、オンザフライで自動回復するビットロット(自発的に変化するビットディスクの電源がオフになっています)、

再開するには:外部ディスクのBackUPにのみZFSを使用し、OS用にストライプされたlvm2の複数(2つまたは3つ)のssd(aftwrのアップグレードでOSのクローンをやり直します)、不変のOSを使用する傾向があります。そして、仮想マシンのようにデータ用にストリップされたlvm2を備えた複数の(6つの)スピニンディスクを使用します。したがって、ディスクに障害が発生した後は、ディスクを交換して最後のバックアップを復元するだけで済みます。現在、書き込み速度は1.8GiB / s近くになっているため、BackUPから1つの仮想マシンを復元するのに必要な時間は30秒未満です(仮想マシンディスクあたり32GiB)。

だから私の答えは次のとおりです。1つのことだけを使用するのではなく、賢く、各パーツのベストを使用してください。ssdをストリッピングする1つの警告、2、3は良い、4 ssdはパフォーマンスを低下させる可能性があります(lvm、mdraid0などに関係なく、4つの同じssdをストリッピングモードで使用すると書き込み速度が低下します)、SSD TRIMなど書き込み増幅は、削除されたボリュームにssdを追加する主な原因となり、書き込み速度が低下します。

ssd、および任意のraid0(ストリップボリューム)を使用した警告、物事の完全な調整、ファイルシステムでのクラスターサイズの割り当て、stipサイズなど。サンプルとして:ディスクセクターは2048であるため、minimunとしての読み取り/書き込みでは2Kで、512バイトclusyerを使用するファイルシステムを使用しないでください。2Kまたは4Kクラスターサイズを使用することをお勧めします。今、2Kセクターごとに3xHDDを使用することを想像してください。したがって、任意の読み取り/書き込み最適化ファイルシステムクラスターは3x2K = 6Kになりますが、それは多くのファイルシステムでは不可能です。 / 3、不均衡を引き起こすため、最適ではない、など。最適なクラスターサイズを得るための計算を行います。

最良の結果は次のとおりです。クラスターサイズ= stripsize *ストライプ上のディスクの数。そのように、各読み取り/書き込みは、すべてのディスクを動作させる正確なサイズであるため、速度の向上は非常に優れています。64Kストライプサイズの3台のディスクの192Kクラスターサイズの例。別の例では、32Kストライプサイズの6ディスクの192Kクラスターサイズです。

そして、4K、8K、16K、32K、64Kブロックで単一ディスクをテストすることを常に忘れないでください。多くのディスクは、4Kなどの低い数値では本当に悪い速度を提供しますが、64K、128K以上では10倍以上の時間を提供します。

はい、大きなクラスターサイズを使用すると、各ファイルのlasクラスターでスペースの無駄をなくすことができます(各1バイトのみの数百万のファイルを使用する場合)。サンプルとして、4Kクラスターサイズの4TiBディスクは、それぞれ1バイトの4TiB / 4K = 1073741824未満のファイルしか持つことができません。つまり、すべてのファイルが1バイトサイズ(クラスターサイズ4K)であれば、1GiBです。仮想マシン(サンプルとして32GiBに近い、またはほんの数メガバイト)のように、ファイルは巨大で、失われるのは最後のクラスターのみです。大きなファイル、大きなクラスターサイズの方がパフォーマンスには優れていますが、仮想マシンでの使用方法に注意してください。

この秘密は誰にもわかりません。ゲスト内では4Kクラスターサイズを使用せず、仮想ディスクが存在するクラスターサイズと同じクラスターサイズを使用するか、その倍数を使用します。

はい、私はゲストディスク内で最高の速度を得るのがman病です、私は1.7GiB / sに近づいている6つの回転ディスクで言ったように、SATA IIIバス速度はディスク自体ではなくボトルネックです。私は、ハイエンド(安価ではない)ディスク、128MiBキャッシュをそれぞれ283MiB / sの書き込み速度で使用しています。

あなたとすべての人々のために:速度テストを行う前に、クラスターサイズ、ストライプサイズ、ブロックサイズがどのように関連している必要があるかを学ぶことをお勧めします。さもなければ、LVM2または他のRAID(ZFSも)をテストすると、誤った結論が得られます。

たとえば、Sata IIポートメインボード上の2x60MiB / s 2.5インチ5400rpm SataディスクでLinuxブート時間をテストしてから、2xSSD Sata IIIでテストします(Sata IIIに接続している場合、それぞれ250MiB / s以上を書き込むことができます)ポート)、ブート時間は2秒短く、5分間のブートではわずか2秒です。ほとんどのブートタイムディスクは使用されていないため、RAMとCPUで処理を行っていますが、I / Oでは処理していません。

粗野な速度(言い換えれば、最高速度)だけでなく、あなたがする実際のことを常にテストします。

最大速度は、表現できないビットを知っているのは良いことです、あなたは100%の最大速度でディスクを使用していないかもしれません、OSとAPPはI / OなしでRAMとCPUで何かをしなければならないので、その時ディスク速度はすべての問題。

すべての人がSSDはWindowsブート速度を大幅に改善すると言いますが、私のテストでも偽であり、8分の近くのブート時間で28秒しか証明していません。

あなたが私を好きなら:ブート時のLinux copy-to-ram、SSDは回転HDDよりも賭けられません、私はUSB 3.1 Gen2スティック(139MiB / s読み取り)もテストしました、ブート時間は数秒で5分間のブート、なぜですか?簡単に、読み取りはRAMにコピーするときに行われ、ディスク/ ssd / usb-stickがボルトの残りの部分で再び使用されることはなく、データはRAMドライブのようにRAM上にあります。

今、私は持っているすべてのSSDを販売していますが、ブート時にLinuxのコピーオンラムを改善しませんが、ベンチマークでは5倍の速度であると言います...参照してください、ベンチマークは間違った結論を出します...はい、テストして実際にテストしてくださいデイワーク。

これが男性のことが明らかになることを願っています...クラスターとストライプのサイズが悪いLVMは、レイヤーのオーバーヘッドよりもはるかに大きな影響を与えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.