2012-02-09 2 views
1

을 차단 기본 및 값을 기다리고 클라이언트를 차단 및 재시작. 따라서 수시로 더 높은 대기 시간을 기꺼이 수용하려는 경우 VM을 차단하는 것이 좋습니다. 특히 교환이 거의 발생하지 않고 자주 액세스하는 대부분의 데이터 인 이 메모리에 저장되는 경우 특히 이 발생합니다.레디 스는 - 동기화, 쓰레드의 산란 손실 시간이 없기 때문에 블로킹 VM 성능이 전반적으로 더 나은입니다 VM

이것은 Redis의 기본 모드이며 OS가 페이징 (필요한 경우)을 처리하도록 남겨 두는 유일한 모드입니다. 부팅 할 때/시작될 때 "덥다"는 데는 시간이 걸릴 것이라는 점을 이해하고 있습니다. 16GB 데이터 노드가있는 1GB RAM 노드에서 작업 할 때 Redis는 부팅 할 때 가상 메모리에 모든 데이터를로드하려고 시도하므로 90 % 이상이 즉시 페이징되고 사용량이 많은 경우에만 위의 진술이 true로 유지됩니까?

답변

3

Redis VM은 Redis 2.4에서 더 이상 사용되지 않으며 Redis 2.6에서 제거되었습니다. 막 다른 길 : 사용하지 마십시오.

블로킹 VM을 OS 페이징과 혼동시키는 것 같습니다. 그들은 서로 다른 두 가지입니다.

Redis VM이 전혀 구성되지 않은 경우 (차단 모드와 관계없이) OS 페이징은 Redis의 기본 모드입니다. OS가 Redis 메모리를 실제 메모리에 맞지 않으면 교체합니다. 이벤트 루프는 언제든지 멈출 수 있습니다. 이 경우, Redis 내부 데이터 구조 중 어느 것도이 용도로 설계되지 않았기 때문에 성능이 최악입니다 (지역성이없고 페이징 시스템이 없음).

Redis VM은 비 차단 모드 (I/O 스레드 사용)로 구성 할 수 있습니다. I/O가 완료되면 이벤트 루프가 차단되지 않고 Redis가 여전히 응답합니다. 그러나 너무 많은 I/O가 겹쳐지면 I/O 스레드가 완전히 사용 중이며 응답 성있는 Redis로 끝나지 만 I/O가 필요한 쿼리는 처리 할 수 ​​없습니다.

Redis VM을 차단 모드로 구성 할 수도 있습니다. 이 모드에서 모든 I/O는 메인 이벤트 루프 스레드에서 동 기적으로 수행됩니다. 따라서 이벤트 루프는 I/O의 경우에 고정됩니다 (예를 들어 키 미스의 경우). 모든 클라이언트가 영향을받습니다. 그러나 일부 스레딩 예약/동기화가 저장되므로 일반 성능 (CPU 소비 및 대기 시간)이 비 차단 모드보다 낫습니다.

실제로 OS 호출과 Redis 차단 VM의 차이는 입도 수준입니다. Redis VM을 사용하면 세밀도가 핵심입니다. OS 페이징을 사용하면 페이지 (여러 관련되지 않은 키들로 확장 될 수있는 4KB 블록)가됩니다.

3 가지 경우 모두 덤프 파일의 초기로드가 매우 느려지고 시스템에서 임의 I/O의 피크가 생성됩니다. 당신이 지적했듯이, 대부분의 객체는로드되고 나서 스왑 아웃됩니다. 워밍업 시간이 중요 할 것입니다.

데이터에 극단적 인 지역이 있거나 대기 시간에 대해 전혀 신경 쓰지 않는 경우를 제외하고는 Redis VM의 16GB 데이터 세트에 1GB RAM을 사용하는 것이 과학 소설 IMO입니다.

Redis VM이 단계적으로 제거 된 이유가 있습니다. 의도적으로 디스크 기반 데이터 저장소 (파일 매핑 또는 직접 I/O를 활용하여 이중 버퍼링을 방지하고 B 트리와 같은 적합한 데이터 구조 사용)를 수행하지 않습니다.

메모리 내장 저장소로 Redis가 우수합니다. 그러나 RAM보다 큰 데이터를 저장해야하는 경우에는 사용하지 마십시오. 다른 (디스크 기반) 저장소는 모두 더 나은 성능을 발휘합니다.