2012-08-15 3 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 코어에 바인딩하고 배경 작업을 위해 하나의 코어를 비워 두어야합니다. 최대 하나의 백그라운드 작업이 이러한 인스턴스에 대해 동시에 실행될 수 있습니다.

+0

또 다른 대답은 다소 반대라고 말합니다 : http://stackoverflow.com/a/36813957/1469954. 어떤 조언을 받아야합니까? :) – SexyBeast

+0

이 다른 대답은 CPU 바인딩을 참조하지 않습니다. 상대방의 관점을 어떻게 표현할 수 있습니까? –

관련 문제