2012-08-15 5 views
8

私は4コアサーバーを持っていて、その上でredisを実行したいと思います。 4コアの機能を最大限に活用するために、Redisはシングルスレッドに設計されているため、4つのRedisインスタンスを起動することが期待されています。異なるコアで複数のredisインスタンスを実行する方法を教えてください。

しかし、4つのインスタンスが4つの異なるコアで確実に動作するようにするにはどうすればいいですか?起動時にインスタンスが実行中のコアをどのように決定するのですか?

答えて

14

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

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

現在、各インスタンスを特定のコアにバインドする場合、現代のOSは通常、特定のCPUコアでプロセスの実行を強制するツールを提供します。

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

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

実際にCPUバインディングでプレイしたいのであれば、N個のRedisインスタンスをN + 1個のCPUコアにバインドし、バックグラウンド操作で1つのコアを空けておく必要があります。多くとも1つのバックグラウンド操作は、これらのインスタンスに対して同時に実行できます。

+0

もう1つの答えはちょっと反対です:http://stackoverflow.com/a/36813957/1469954どのアドバイスを取るべきですか? :) – SexyBeast

+0

この他の答えは、CPUバインディングを参照していません。どのように彼らは反対の視点を表現することができますか? –

関連する問題