web-dev-qa-db-ja.com

プロセスとCPUコアの親和性を管理する方法は?

分散ユーザースペースファイルシステム(GlusterFS)を使用していますが、GlusterFSプロセスが常に必要なコンピューティング能力を備えていることを確認したいと思います。

私のグリッドの各実行ノードには2つのCPUがあり、CPUごとに4つのコア、コアごとに2つのスレッドがあります(Linuxでは16の「プロセッサー」が見られます)。

私の目標は、GlusterFSプロセスが信頼性が高く、応答性が高く、高速であるために十分な処理能力を備えていることを保証することです。 (ここにはマーケティングはなく、システム管理者の夢だけです;-)

私は2つの主要なポイントを考慮します:

  • GlusterFSプロセス
  • データアクセス用のI/O(ローカルディスクまたはリモートディスク上)

特定の「プロセッサ」にGlusterFSインスタンスをバインドすることを考えました。

私はそれを確認したいと思います:

  • グリッドジョブはカーネルとGlusterFSインスタンスに影響を与えません
  • 研究者のジョブはシステムプロセスの影響を受けません(ジョブ実行用にコアのプールを予約し、システムプロセスがこれらのCPUを使用しないようにします)

しかし、I/Oはどうですか?大量のデータ(数テラバイト)を処理するため、多くの中断が発生します。

これらの操作をプロセッサに分散するにはどうすればよいですか? 「ベストプラクティス」とは何ですか?

コメントしてくれてありがとう!

4
Philippe

ユーザースペースを特定のプロセッサに固定すると、パフォーマンスの一貫性が向上する場合があります。しかし、カーネルではありません。 (チェック タスクセット

可能であれば、ユーザースペース/カーネルの切り替え(すでにOSパフォーマンスの測定可能な要素)をプロセッサ間通信/同期の問題に変えることになります。桁違いに悪化します。

edit:「カーネルのピン留め」のアイデアを削除したので、はるかに合理的です。はい、タスクセットを使用してすべてのグリッドプロセスを開始し、1つまたは2つのCPUをGlusterFS用に空けておくことができます。同様の例として、Xenシステムでは、すべてのI/Oを処理するDom0用に1つのCPUを予約する「ベストプラクティス」と見なされます。

1
Javier

そのため、本番環境でFuseファイルシステムを使用したくありません...代わりにPVFS2を使用しています。

1
wazoox