web-dev-qa-db-ja.com

悪いIO LUKS /ソフトウェアRAID / LVMの注文による?

IOパフォーマンスが低いため、RAIDアレイを再セットアップする必要があるかどうかを判断しようとしています。まず、システム:

  • i7 920
  • 4 4TB WD5400グリーンドライブ
  • CentOS6.3ホスト

次に、ディスクのセットアップ:

  • / dev/sda2、b2、c2、d2は個別にLUKS暗号化されます
  • / dev/mapper/a2、b2、c2、d2はすべてソフトウェアRAID5の一部です/ dev/md1
  • / dev/md1にはその上にLVMがあります
  • LVMは、/、/ storage、およびスワップを分離するために使用されます

この構造を選択して、kcryptdの複数のインスタンスを許可します。これを行うと、ドライブごとに1つのインスタンスが実行されるため、暗号化でマルチスレッドサポートが得られると考えています。しかし、それは良い考えだったのだろうかと思い始めています。

たとえば、ランダムデータのRARファイルで大量の解凍ルーチンを実行すると、IO待機が約25%になり、システム全体の速度が低下します。すべてかどうか疑問に思います。すべてのkcryptdプロセスが原因で、命令セットが何らかの形でバックアップされています。

したがって、次のように変更することを検討しています。

  • / dev/sda2、b2、c2、d2は/ dev/md1に配置されます
  • / dev/md1は暗号化され、/ dev/mapper/1にマップされます
  • / dev/mapper/1の上にあるLVM

これは単一のkcrpytdプロセスにドロップダウンし、それ自体がボトルネックになる可能性もあります。これが私のIOの問題に役立つと思う人はいますか?

5
Fmstrat

暗号化の上にレイド5を配置すると、暗号化/復号化操作の数が25%増加するため、階層化は最適ではありません。4* 4 TBが暗号化されているためです。

暗号化をレイド5の上に置くと、3 * 4 TBのみが暗号化されます。

その背後にある理由は、セキュリティを向上させないため、暗号化されたデータのパリティデータ(例では4 TB)を占める)を暗号化する必要がないということです。

複数のkcryptプロセスについてのあなたの推測はまさにそれです。それに基づいて決定を下す場合、まったく逆の効果をもたらす可能性があるのは時期尚早の最適化です。 i7は非常に頑丈で、おそらくAESの高速化に役立ついくつかの特別な命令が含まれています。また、Linuxカーネルには、起動時に自動的に選択される暗号化プリミティブの最適化されたバリアントがいくつか含まれています。

CPU用に最適化されたルーチンが使用されているかどうかは、/proc/cpuinfo(たとえば、フラグaesがあります)、/proc/cryptolsmod(aesモジュールがカーネルにコンパイルされます)およびカーネルログ。

低速ディスクを使用せずにkryptdのスループットをベンチマークして、実際の上限を確認する必要があります(つまり、iozoneを使用するRAMディスク)。

潜在的なパフォーマンスの問題を後で診断できるようにするには、暗号化せずに選択したRAIDセットアップをベンチマークして、その上限を取得することも役立ちます。

暗号化のトピックに加えて、RAID5にはRAID1または10よりも多くのIO操作が含まれます。ストレージは一種の安価であるため、より多くのハードディスクを購入して別のRAIDレベルを使用することもできます。

4
maxschlepzig

1 + 0 [a2、b2] + [c2、d2]をRAIDし、次にLVM overLUKSをRAIDします。

$ Sudo mdadm --create /dev/md0 -v --raid-devices=4 \
      --level=raid10 /dev/sdb1 /dev/sdc1 /dev/sde1 /dev/sde1

注:このように構成すると、ミラーのストライプが作成され、最大2つのディスク(最大各ミラーに1つ)が失敗し、raid5とは対照的に合計/ 2のスペースが得られます。合計* 〜0.75。

また、RAID5はパフォーマンスを低下させることが知られているため、このスキーマは大幅に高速であると思いますが、使用可能なスペースは少なくなります。

暗号をチェックすることもできますが、aes-cbc-essivがデフォルトで適度に高速だと思いますが、より高速なaes-xts-plainを使用することもできます。

セットアップでは、書き込み時に合計でより多くのデータを暗号化する必要があります(パリティデータ)。暗号化がすでに遅い場合は、マルチコアプロパティではそれを相殺するのに十分でない可能性があります。読み取りでは、違いはありません(パリティデータは通常読み取られません)。それはまだmdadmタイミングなどの副作用を考慮していません。

私は別のアプローチを取りました。 1つの大きなRAIDを作成する代わりに、ディスクをパーティション分割して、いくつかの小さなRAIDを作成しました(たとえば、2TBディスク上の8x 250Gパーティション)。つまり、1つではなく8つのRAID、8つのLUKSコンテナー、およびLVMがすべてを1つの大きなVGに結び付けます。

次に、ディスクのさまざまな領域でプロセスが機能している限り、さまざまなLUKSコンテナーとRAIDは互いに独立して機能します。これは真の並列暗号化ではありませんが(カーネルはそれ自体ではまだサポートしていませんか?)、私にとっては非常にうまく機能しました。

AES-NIのおかげで暗号化がまったく問題にならない新しいHaswellボックスでも、そのセットアップを維持しました。他にもプラスの副作用があるので、これを行いました。たとえば、単一の欠陥セクターにより、ディスクの250G部分のみがRAIDからドロップアウトし、他の1750Gは冗長性を維持します。または、3.13.0のRAID5カーネルパニックのようなバグがある場合、すべてではなく1つのRAIDのみを再同期する必要があります。

同時に、書き込みインテントビットマップなどの他のソリューションとは異なり、パフォーマンスの問題には気づきませんでした。

1
frostschutz