以前2.6.X
のカーネルでは、現在すべてのスレッドが1秒間使用されている場合は、より多くのpdflush
スレッドを作成しました(pdflush
pdflush
Linuxページのキャッシュとpdflush)。
2.6.32
カーネル以降にpdflush
サポートされている各デバイスの名前付きスレッドに置き換えられましたflush-MAJOR
(Linux 2 6 32 - Linux カーネルの新機能)。
flush-MAJOR
サポートされている単一のデバイスに対して複数のスレッドを作成する方法はありますか?
現在ディスクに多くのデータを書き込んでいますが、この作業中に[flush-8:32]
プロセスのCPU使用率はほぼ100%に達しますtop
。flush-MAJOR
I / O負荷の多い特定のデバイスに対してより多くのスレッドを作成する方法があるかどうか疑問に思います。パフォーマンスに役立つかどうかはわかりませんが、どのような効果があるのか見たいです。
各デバイスが複数のフラッシュスレッドをサポートする必要があるという証拠を見ました。洗い流しpdflush:
最初の試みを見直した後、ジェンスはアンドリュー・モートンの提案に従って、デバイスごとに複数のフラッシュスレッドを持つ機能を追加しました。
しかし、これを実装する方法や、自動的に発生して逃したのかわかりません。
私はカーネル2.6.32-358.el6.x86_64でRHEL 6.4を実行しています。
答え1
あなたはできません。 2009年iirc頃に削除されたbdi_add_flusher_task()がありました。そしてもともとはファイルシステムのためのものでしたが、ファイルシステムを作成しているようではありません。 :-)
しかし、なぜ100%CPUを使うのかわかりません。約100,000ドルのアレイに10 GB / s以上の書き込みを実行しない限り、言葉はありません。 RAMはディスクよりはるかに高速なので、iowaitは高くなければなりませんが、CPUは高くしてはいけません。
上から実行して、CPU が実際に使用されている場所をシステム、ユーザー、irq、およびスタンバイ % に分類して確認します。
また、ページスキャンなどの他の数字が高くなっているか、警告または危険状態に達していることを確認してください。
iowait%が高い場合、これは予想される現象であり、ディスクが最善を尽くしており、より速く実行できず、システムはディスクがブロックを読み書きするのを待っています。
編集する
Kevinが要求したように、このメモを追加することをほとんど忘れてしまいました。もう一度見てみると、bdi_add_flusher_task()が削除された理由に関するドキュメントが見つかりませんでした。
しかし、Linux 3.2.0-67のソースコードをスキャンするとき、このプログラムは存在しないので、明らかにどこかに落ちたに違いありませんが、簡単に間違えます。 :-)
答え2
Jensは元々、デバイスごとに複数のフラッシュスレッドをサポートするためにbdi_add_flusher_task()関数を追加しようとしましたが、メーリングリストでChristoph Hellwigと議論した後に中断されました。詳細については、次のリンクを参照してください。 https://lore.kernel.org/patchwork/patch/169137/ したがって、単一のデバイスの複数の更新スレッドがメインラインにマージされませんでした。