非常に大きなファイルシステムと高いIOWAITでのパフォーマンス向上のためのオプション


10

SATA 3.0バックプレーン経由で8x10TB HDDを備えたUbuntu 16.04バックアップサーバーを使用しています。8つのハードディスクはRAID6に組み立てられ、EXT4ファイルシステムが使用されています。このファイルシステムは、非常に多くのSEEK操作を伴う大量の小さなファイルを格納しますが、IOスループットは低くなります。実際、毎日rsnapshotを介してスナップショットを取得するさまざまなサーバーからの多くの小さなファイルがあります(複数のINODESが同じファイルに直接送信されます。ファイルシステム(60TBネット)の使用率が50%を超えているため、パフォーマンスは非常に低くなっています。現在、使用率は75%で、

du -sch /backup-root/

数日かかります!マシンには8つのコアと16GのRAMがあります。RAMはOSファイルシステムキャッシュによって完全に利用され、8つのコアのうち7つはIOWAITのために常にアイドル状態です。

Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          5af205b0-d622-41dd-990e-b4d660c12bd9
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              912203776
Block count:              14595257856
Reserved block count:     0
Free blocks:              4916228709
Free inodes:              793935052
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         2048
Inode blocks per group:   128
RAID stride:              128
RAID stripe width:        768
Flex block group size:    16
Filesystem created:       Wed May 31 21:47:22 2017
Last mount time:          Sat Apr 14 18:48:25 2018
Last write time:          Sat Apr 14 18:48:18 2018
Mount count:              9
Maximum mount count:      -1
Last checked:             Wed May 31 21:47:22 2017
Check interval:           0 (<none>)
Lifetime writes:          152 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       513933330
Default directory hash:   half_md4
Directory Hash Seed:      5e822939-cb86-40b2-85bf-bf5844f82922
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke journal_64bit
Journal size:             128M
Journal length:           32768
Journal sequence:         0x00c0b9d5
Journal start:            30179

この種のファイルシステムの使用経験はありません。これを調整するにはどのようなオプションが必要ですか。このシナリオではどのファイルシステムがより良いパフォーマンスを発揮しますか?OS組み込みのもの以外のキャッシュオプション用にRAMを使用するオプションはありますか?

大規模なRAIDアセンブリで非常に大量の小さなファイルをどのように処理しますか?

ありがとう、セバスチャン


2
より高速なディスク、できればSSD。読み取りキャッシュ用にできるだけ多くのRAM。16GiBは同じ惑星に十分なRAMがありません。512GiB以上でさえ、それをたくさん入手してください。そしてもちろん、RAID 6を使用していない
マイケル・ハンプトン

お返事をありがとうございます。SSDオプションを知っていますが、これにより、データをバックアップするための7000 $サーバーと70000 $サーバーが異なります。RAMヒントは良いものですが、60TBネットを意味するSEEK操作のDISK IOを完全に回避した場合にのみ、バージンのようなファイルシステムのパフォーマンスが得られるのではないかと心配しています。容量は60TB RAMキャッシュですね。過去にはEXT2 / 3/4以外のファイルシステムは避けましたが、今はこの方向のオプションがあれば完全にオープンです。:)
t2m

このディスク構成でのRAID6交換の推奨は何ですか?
t2m

1
「実際には、rsnapshotを介して毎日スナップショットされるさまざまなサーバーからの多くの小さなファイルがあります(複数のINODESが同じファイルに直接リンクします。) -同じiノードへの複数のリンク/名前を意味します。ファイルをハードリンクする場合、 iノードは1つだけですが、2つ(またはそれ以上)のリンク/名前
marcelm

1
おい、それが7000ドルのサーバーであるなら、GET GETTING RIPPED OFFを止めなさい。また、PCIe SSDに1000 USDをサーバーに追加しても、魔法のように70k SSDサーバーになることはありません。
TomTom

回答:


11

私は似ていますが(よ​​り小さいですが)、同じ目的(rsnapshotバックアップサーバー)に使用されるRAID6アレイの12x 2TBディスクを使用しています。

まず、du -hsこのように大きく、使用されているファイルシステムで非常に時間がかかることは完全に正常です。さらにdu、ハードリンクも考慮に入れられます。これにより、明らかなIO負荷に加えて、かなりのバースト性のあるCPU負荷が発生します。

ファイルシステムのメタデータが非常に離れた(LBA用語で)ブロックに配置されているために多くのシークが発生するため、速度が低下します。通常の7.2K RPMディスクは約100 IOPSを提供するので、すべてのメタデータをロードするのに何日ではなくても何時間が必要かを確認できます。

あなたが(非破壊的に)状況を改善しようとすることができる何か:

  • インデックスを作成しないようにしてmlocate/slocateください/backup-root/プルーン機能を使用して回避できます)。そうしないと、メタデータキャッシュのトラッシングがバックアップ時間を著しく損ないます。
  • 同じ理由で、実行しないようdu/backup-root/。必要に応じて、du関心のある特定のサブフォルダでのみ実行します。
  • vfs_cache_pressureデフォルト値(100)からより控えめな値(10または20)に下げます。これは、データキャッシュではなくメタデータキャッシュを優先するようにカーネルに指示します。これにより、rsnapshot/rsync検出フェーズが高速化されます。
  • たとえば、lvmcacheまたはbcacheを介して、ライトスルーメタデータキャッシングデバイスを追加してみてください。このメタデータデバイスは明らかにSSDである必要があります。
  • 使用可能なRAMを増やします。
  • ext4を使用しているときは、inode割り当ての問題に注意してください(例については、こちらをお読みください)。これはパフォーマンスとは直接関係ありませんが、extベースのファイルシステムに非常に多くのファイルがある場合は重要な要素です。

あなたが試すことができる他のこと-しかし、これらは破壊的な操作です:

  • XFS -ftype-finobtオプションセットの両方を使用します。
  • Linux(ZoL)でZFSを使用し、ARCとprimarycache=metadata設定を圧縮します(おそらく、読み取り専用キャッシュ用のL2ARC )。

お返事ありがとうございます。ご想像のとおり、今読みたいものがあります。vfs_cache_pressureオプションは非常に興味深いものです。私はここ数分間キャッシュをいじってみましたが、システムの応答性が少し向上したと思います(ディレクトリ一覧、オートコンプリートなど)。他のポイントもチェックしてフィードバックします。再度、感謝します。
2019年

「primarycache = metadata設定(そして、おそらく、読み取り専用キャッシュ用のL2ARC)。」ZFSは両方を実行することはできません。私はその最も顕著な欠点
poige

@poigeはRAMの容量が少ないため、L2ARCでのメタデータキャッシングについて話していました(ARCですでにキャッシュされているものに加えて)。結局のところ、データキャッシングはrsnapshotバックアップサーバーにとって大きな違いを生むべきではありません。
shodanshok

1
L2ARCの唯一のものは、それが何であってもメタデータであることを明確にしました。:) RAMの量に関しては、16 GBはそのHDD全体のボリュームではRAMがまったくありません。妥当な最小値は約128 GBであるため、とにかくアップグレードする場合、16 GBに制限されることはありません
poige

@marcelmあなたは正しい:私-hは完全に異なるもの(...)-Hについて混乱しました rsync回答を更新しました。
shodanshok

6

このファイルシステムは、非常に多くのSEEK操作を伴う大量の小さなファイルを格納しますが、IOスループットは低くなります。

🎉

これは、今日多くの人々を捕まえるものです。悲しいかな、従来のFSはここではうまく拡張できません。すでにお持ちのセットアップに関しては、ほんの少しアドバイスをお伝えします:HDD上のRAID-6上のEXT4

  1. 下げvm.vfs_cache_pressureダウン、それはしたい1に言うバイアスをcacheing変更する多くのメタデータ(iノード、のdentryを)維持に向けてデータの代わりに、それ自体とそれが求めているの数を減らすことでプラスの効果を持っている必要があります
  2. RAMを追加します。ピギーアプリを実行していないサーバーでは奇妙に見えるかもしれませんが、覚えておいてください:シークを減らす唯一の方法は、より多くのメタデータをより高速なストレージに保存することです。 RAM容量を増やす
  3. 私が言ったように、EXT4はあなたが持っているユースケースには良い選択ではありませんが、それでも痛みを和らげるためにもたらす機能のいくつかを使用することができます:
    • 外部ジャーナルがサポートされているので、SSD(より良いミラーリング)を追加して、そこにジャーナルを配置できます。「ext4:外部ジャーナルの警告」を確認してください
    • ジャーナルモードを「すべてのデータがジャーナルされている」マウントに切り替えてみてください。data=journal
  4. 単一のFSスコープ外にファイルを移動してみてください。たとえば、ここにLVM-2がある場合、より小さなサイズのボリュームを作成して一時的に使用し、それがいっぱいになったら別のボリュームを作成することができます。
    • LVM-2がない場合は、/ dev / loopでそれを試すことができますが、それはそれほど便利ではなく、おそらくパフォーマンスが低くなります

UPD。:それはLinuxソフトウェアRAID(LSR)RAID-6であることが判明したので、ここに追加の項目があります:

  1. LSRには、多くの人が見落としているように見える独自のチューニングオプションがあります。

—これはおそらく、ゼロから再設計せずに改善できることのほとんどです。

ファイルシステム(60TBネット)の使用率が50%を超えたため、パフォーマンスが非常に低下しています。現在、使用率は75%です

ディスク領域の占有率が高いと断片化が悪化するだけなので、これは非常に深刻な問題です。そして、断片化が進むほど、シークも増えます。50%に達する前に、多かれ少なかれ許容できるパフォーマンスが得られた理由はもはや不思議ではありません。多くのマニュアルには、FSが75〜80%を超えて成長しないようにする明確な推奨事項があります。


raid-6でのext4は、あなたが望む方法ではないことをほのめかしています。推奨する設定の概要を教えていただけませんか?
marcelm

2
それは実際にはそれを概説することさえ複雑すぎるタスクです。ファイルがたくさんある場合でも従来のFSを選択しても問題ない場合もありますが、それ以外の場合(ケース)は最初は方法がありません。CEPHがPOSIX FSをまったく放棄してDBに切り替えた理由についての良い紹介をご覧ください。ところで、彼らがFSを使用したとき、彼らはXFSを好みました。多分同じだろう。RAID-6に関しては、これは主要なIOPS乗数です。書き込みごとに、他の2つのデバイスのパリティを更新する必要があります。したがって、おそらく何らかのRAID-x0アプローチです。オンザフライ圧縮をサポートしているため、RAID-10を使用することもできます。もちろん、そこにいるかの方法...
poige

1
…SSDキャッシュ(bcache、dm-cache、ZFSの社内ZIL + L2ARC)でさらに高速化しますが、実際には、いくつかの独自の制約が効果的に方法を無効にする場合があります。これが私が「複雑すぎる」と言った理由です。目標を達成するために利用できる要件とリソースを知る必要があります。
poige

1
完全な解決策を考え出すのは難しいと思いますが、上記のコメントに書き込んだブレインダンプでも、同様の問題に直面している人をさらに調査するための良い出発点になり得ます。おかげで:)
marcelm

0

この場合、RAID6はあまり役に立ちません。ZFSのようなものは、速度をほぼ同じに保ちながら、メタデータとディレクトリへのアクセスをはるかに高速にすることができます。


0

RAID-6はドライブをストライプ化するため、すべてのIOがすべてのドライブに送られます。これは、多くの小さなファイルではかなり非効率的です。しかし、これはおそらくあなたの主な問題ではありません...

Ext4は、何百万ものファイルがある大きなファイルシステムにはあまり適していません。XFSを使用します。XFSファイルシステムを1,2 PBまで実行していて、10億ものファイルを使用しているため、問題ありません。XFSを使用するだけです。


0

私の質問に答えてくれたすべての人に感謝します。

これは、私がそれをどのように解決したかです:

まず、ボードに最大量のRAMを追加しました。残念ながら、ボードは最大64GBのRAMしかサポートしていません。拡張後の挙動を観察したが、残念だった。使用可能なすべてのRAMがIOキャッシュに使用されましたが、RSNAPSHOT-Backupのパフォーマンスはそれほど向上しませんでした。

だから私は大きなメイスを引っ張らなければなりませんでした。2つの1TB NVMEディスクを追加し、それらをRAID 1に組み立てました。8x10TB HDDで構成されるRAID 6は、1つのRAID 1(2x 10TB HDD、ext4で構成)と1つのRAID 5(6x10TB HDDで構成)に分解されました。RAID 1には、オペレーティングシステムとサーバーの作業用コピー(このドライブに対して1日に4回rsyncされる)が含まれています。

RAID5は、BCACHEでサポートされたデバイスであり、NVME-RAID 1でサポートされ、ext4でフォーマットされています。このドライブには、RSNAPSHOTコピーが含まれています。毎晩、ファイルはRAID1からRAID5にrsyncされます。これにより、作業コピーとバックアップスナップショットを含む以前のRAID6と比較して、RAID5のIOスループットが半分になります。BCacheのおかげで、文字通りすべての単一ファイルがディスクに書き込まれるわけではありませんが、1つのブロック全体のすべての変更が一度に書き込まれます。これにより、HDDのIOpsがさらに減少しました。

最後に、RSnapshot構成を変更しました。以前は、31の日次スナップショットと18の月次スナップショットがあり、49世代のバックアップが生成されました。今、私は古典的な7d / 4w / 12m / 1y-Designを持っています。これはバックアップ世代の量を24に減らします。

これらの変更後(および上記の64GB RAMを使用)、1つのスナップショットの継続時間が約20時間から1.5時間に短縮されました。BCacheデバイスのキャッシュヒット率は82%です(通常の操作から6週間後)。

任務完了。皆様のご意見、ご感想をありがとうございました。

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