web-dev-qa-db-ja.com

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

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

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

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

90
Pablo

LVMは、本当に邪魔にならないように設計されています。ユーザー空間の観点からは、ディスクの上の「仮想的なもの」の別のレイヤーのように見え、すべてのI/Oが実際のパスに到達する前にこれを通過する必要があると想像するのは自然なことです。ハードウェア。

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

LVMが使用されている場合、そのルックアップは変更されますが、それだけです。 (とにかく起こる必要があるので、少し異なる方法でそれを行うと、パフォーマンスへの影響は無視できます。)実際にファイルを書き込む場合、ビットは物理メディアへの直接パスとしてそれ以外の場合はそうします。

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

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

109
mattdm

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をインストールします。

17

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

どのようにして何かを測定できますか?さて、あなたはLVMがあるパーティションとないパーティションを1つ作成し、通常のベンチマークを使用してそれを実行します。の人々のように

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

どうやら、速度への影響はわずかです。それは、ベンチマークを実行した他の誰かの発見と同期しているようです:

"ext4は、LVMを使用すると、使用しない場合よりも高速になり、他のファイルシステムベンチマーク" Linuxカーネルメーリングリストスレッド

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

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

4
akira

lvmは通常のパーティションよりも速度が遅く、特に小さなファイルでは速度が遅くなります。素晴らしい研究: https://www.researchgate.net/publication/284897601_LVM_in_the_Linux_environment_Performance_examination

1
Kha Vu

Lvmだけではパフォーマンスに大きな影響はありませんが、それでも構わない場合は、代わりにzfsを使用してください。ボリューム管理と回復性、およびその他のさまざまな優れた機能を利用できます。

0
stu

Lvm2が読み取りと書き込みの速度を倍増させることについて言及している人はいません(raid0と同様)。私は個人的に3つの同一のディスクを使用しており、それらの上でストリップモードのlvm2を使用します。読み取りおよび書き込み操作にかかる時間は3分の1です。これは大きな影響であり、ファイルシステムはそれよりも3倍高速です。私は知っています:ディスクが故障すると、それらのすべてのデータにアクセスできなくなります。しかし、それは失われたという意味ではありません。なぜなら、BackUPは必須であり、Raid、LVM2、ZFSのようなものは、BackUPを持つことを避けます。だから私はミラーリング、raid5などを決して使用せず、常にストリッピングを使用して(最高のパフォーマンスを得る)、バックアップを同期しています。 ZFSはオンザフライ圧縮に最適で、1よりも大きいコピーパラメータを使用するとミラーリングのようになりますが、ZFSが持っているものと他の誰も持っていないものの1つは、ビットの腐敗を自動的に回復することです(ビットは自然に変化します)。ディスクの電源がオフになっています)が、ZFS iは非常に大きな影響(チェックサムの計算、検証)と市長の問題(物理ディスクの追加)を引き起こします。

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

したがって、私の答えは、1つだけを使用するのではなく、賢く、各部分の最良の部分を使用することです。lvm2は、mdraidレベル0よりも高速で、6つの回転ディスクを使用する場合の方が高速です。 ssdを削除する警告が1つあり、2つと3つは良好ですが、4つのssdはパフォーマンスを低下させる可能性があります(lvm、mdraid0などに関係なく、4つの同じssdをストリップモードで使用すると、書き込み速度が低下しました)、SSD TRIMなど書き込み増幅は、ストリップされたボリュームにSSDを追加する主な原因になり、書き込み速度が低下します。

Ssdとraid0(ストリップされたボリューム)でウォーリングし、物事を完璧に調整し、ファイルシステムのクラスターサイズを正しく割り当て、stipサイズなどを設定することで、誰も劣化を引き起こさないサンプルとして:ディスクセクターは2048なので、最小読み取りとして任意の読み取り/書き込みで2K、512バイトのクラスターを使用するファイルシステムを使用しないでください。それ以上に、2Kまたは4Kクラスターサイズを使用することをお勧めします。ここで、2Kセクターのそれぞれで3xHDDを使用していると想像してください。そのため、読み取り/書き込みoptimunファイルシステムクラスターは3x2K = 6Kになりますが、多くのファイルシステムでは不可能です。64Kクラスターサイズ、64K/6K = 32を使用するとどうなるでしょうか。/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)で、クラスターサイズが最悪である場合、ファイルは仮想マシンのように巨大です(サンプルとして32GiBに近い、または数メガバイト)失われるのは最後のクラスター上だけです。ファイルが大きいほど、クラスターサイズが大きいほどパフォーマンスは向上しますが、仮想マシンがどのように使用するかに注意してください。

この秘密は誰にも教えられません。ゲスト内では4Kクラスターサイズを使用しないか、仮想ディスクが存在する場合はクラスターサイズと同じクラスターサイズを使用するか、またはその倍数にします。

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

あなたとすべての人にとって:速度テストを行う前に、クラスターサイズ、ストライプサイズ、ブロックサイズがどのように関連していなければならないかを学ぶのが一番です。

そのための単なる例:私は、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のブート速度を大幅に向上させると誰もが言っていますが、私のテストではFALSEでもあり、起動時間が8分近くであることが28秒しかわかりません。

だからあなたが私を好きなら:ブート時のLinuxのコピーからRAM、SSDは回転するHDDよりもベッティングされません、私はUSB 3.1 Gen2スティック(139MiB /秒の読み取り)もテストしました、ブート時間は数秒で影響を受けます5分の起動、なぜ?読み取りは、ramにコピーするときに行われ、disk/ssd/usb-stickよりも後のボルトでは使用されず、データはramドライブのようにramにあります。

今私が持っているすべてのSSDを販売していますが、それらはブート時のLinuxのコピーオンRAMを改善しませんが、ベンチマークは5倍高速であると言います...参照、ベンチマークはFALSEの結論を与えます...はい、テストと実際のテストデイワーク。

これで問題が解決することを願っています...クラスターとストライプのサイズが悪いLVMは、レイヤーのオーバーヘッドよりもはるかに影響します。

0
Anonymous

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

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

0
Marc