8

私は 4 コア サーバーを使用しており、そのサーバーで redis を実行したいと考えています。redis はシングルスレッドとして設計されているため、4 つのコアの機能を十分に活用するには、4 つの redis インスタンスを起動する必要があります。

ただし、4 つのインスタンスが 4 つの異なるコアで正確に実行されていることを確認する方法に興味がありますか? インスタンスは、起動時に実行されているコアをどのように決定できますか?

4

1 に答える 1

14

Redis 自体はそのような保証を提供しません。

4 つのインスタンスを起動すると、オペレーティング システムが 4 つのコアでスケジュールする必要がある 4 つの異なるプロセスが存在します。この負荷分散を実行してシステムのパフォーマンスを最適化するのは、OS 次第です。

さて、本当に各インスタンスを特定のコアにバインドしたい場合、最新の OS は通常、特定の CPU コアでプロセスの実行を強制するツールを提供します。

たとえば、Linux では、tasksetnumactlコマンドを見ることができます。

実際には、特定のコアで Redis を起動すると (CPU マスクを設定すると)、すべてのスレッドと子プロセスがこの CPU マスクから継承されるため、これには注意が必要です。そのため、Redis がバックグラウンド保存操作またはバックグラウンド AOF 書き換えをトリガーしようとすると、Redis インスタンスのパフォーマンスに深刻な影響を与えます。これは、メインの Redis スレッドがバックグラウンド操作 (通常は CPU を消費する) と CPU コアを共有するためです。

本当に CPU バインドを試してみたい場合 (しかし、それは本当に良い考えですか?)、N 個の Redis インスタンスを N+1 個の CPU コアにバインドし、バックグラウンド操作用に 1 つのコアを解放し、多くても 1 つのバックグラウンドであることを確認する必要があります。操作は、これらのインスタンスに対して同時に実行できます。

于 2012-08-15T11:02:37.720 に答える