Wie stellen Sie sicher, dass mehrere Redis-Instanzen auf verschiedenen Kernen ausgeführt werden?

8

Ich habe einen 4-Core-Server und möchte redis darauf ausführen. Um die Fähigkeiten der 4 Kerne voll auszunutzen, wird erwartet, dass 4 redis-Instanzen gestartet werden, da redis als single-threaded entwickelt wurde.

Wie auch immer, ich bin neugierig, wie man dafür sorgt, dass die 4 Instanzen genau auf 4 verschiedenen Kernen laufen. Wie kann eine Instanz den Kern bestimmen, auf dem sie beim Start ausgeführt wird?

    
ciphor 15.08.2012, 09:19
quelle

1 Antwort

14

Redis selbst bietet keine solche Garantie.

Wenn Sie 4 Instanzen starten, gibt es 4 verschiedene Prozesse, die das Betriebssystem auf den 4 Kernen einplanen muss. Es ist Aufgabe des Betriebssystems, diesen Lastausgleich durchzuführen, um die Leistung des Systems zu optimieren.

Wenn Sie nun wirklich jede Instanz an einen bestimmten Kern binden möchten, stellt das moderne Betriebssystem normalerweise Tools bereit, um die Ausführung eines Prozesses auf einem bestimmten CPU-Kern zu erzwingen.

Unter Linux beispielsweise können Sie sich das Taskset und das numactl Befehle.

In der Praxis müssen Sie damit vorsichtig sein, denn sobald Sie Redis für einen bestimmten Kern (CPU-Maske) starten, übernehmen alle Threads und untergeordneten Prozesse diese CPU-Maske. Wenn Redis versucht, einen Hintergrundspeichervorgang oder einen Hintergrund-AOF-Neuschreibvorgang auszulösen, wird dies die Leistung der Redis-Instanz erheblich beeinträchtigen. Dies liegt daran, dass der Redis-Hauptthread den CPU-Kern mit der Hintergrundoperation teilen wird (die normalerweise CPU-Ressourcen verbraucht).

Wenn Sie wirklich mit der CPU-Bindung spielen möchten (aber ist das wirklich eine gute Idee?), müssen Sie N Redis-Instanzen an N + 1-CPU-Kerne binden und einen Kern für die Hintergrundoperationen freihalten Die meisten Hintergrundoperationen können gleichzeitig für diese Instanzen ausgeführt werden.

    
Didier Spezia 15.08.2012, 11:02
quelle

Tags und Links