KVM / Qemu, Ubuntu : 더 많은 게스트 CPU가 디스크 I / O를 빠르게 향상시키는 이유는 무엇입니까?


9

두 개의 노드로 구성된 하트 비트 / DRBD / 페이스 메이커 / KVM / Qemu / libvirt 클러스터가 있습니다. 각 노드는 다음 패키지 / 버전으로 Ubuntu 12.04 64 비트를 실행합니다.

  • 커널 3.2.0-32 일반 # 51- 우분투 SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0+ 노롬 -0 우분투 14.3
  • libvirt 0.9.13
  • 맥박 조정기 1.1.7
  • 하트 비트 3.0.5

가상 게스트는 Ubuntu 10.04 64 비트 및 Ubuntu 12.04 64 비트를 실행합니다. 우리는 libvirt 기능을 사용하여 최상의 CPU 성능을 달성하기 위해 호스트 CPU의 기능을 가상 게스트로 전달합니다.

다음은이 클러스터에 대한 일반적인 설정입니다.

  • VM "모니터링"에는 4 개의 vCPU가 있습니다.
  • VM "모니터링"은 디스크 인터페이스로 ide를 사용합니다 (현재 명백한 이유로 VirtIO로 전환하고 있습니다)

최근 몇 가지 간단한 테스트를 수행했습니다. 나는 그들이 전문적이지 않고 높은 표준에 도달하지 못한다는 것을 알고 있지만 이미 강한 추세를 보이고 있습니다.

노드 A가 VM "bla"을 실행 중 노드 B가 VM "모니터링"을 실행 중

VM "bla"에서 VM "monitoring"으로 파일을 재 동기화하면 12MB / s 만 달성됩니다. VM "모니터링"내부에서 간단한 dd if = / dev / null of = / tmp / blubb를 수행하면 약 30MB / s를 달성합니다.

그런 다음 VM "모니터링"에 vCPU 4 개를 추가하고 다시 시작했습니다. VM "모니터링"에는 이제 8 개의 vCPU가 있습니다. 다음 결과로 테스트를 다시 실행합니다. 파일을 VM "bla"에서 VM "monitoring"으로 재 동기화하면 36MB / s를 달성합니다. VM "모니터링"내부에서 간단한 dd if = / dev / null of = / tmp / blubb를 수행하면 이제 약 61MB / s를 달성합니다.

저에게이 효과는 정말 놀랍습니다. 이 가상 게스트에 더 많은 가상 CPU를 추가하는 것이 VM 내부에서 더 많은 디스크 성능을 자동으로 의미하는 이유는 무엇입니까?

이에 대한 설명이 없으며 귀하의 의견에 진심으로 감사드립니다. 이 동작을 100 % 재현 할 수 있기 때문에이 성능 향상의 원인을 이해하고 싶습니다.


2
iozone 또는 bonnie ++ 와 같은 특수 목적의 벤치마킹 도구를 사용하여 다른 변수를 제거하십시오.
ewwhite

실제 CPU로드가 어떻게 보이는지 흥미로울 것입니다 ... 숨겨진 장소에서 CPU 바인딩이 도입 된 것입니다 (rsync plus 아마도 ssh는 어느 정도까지 가능합니다.) 네트워크 드라이버도 그렇게 소개되었습니다 .dd는 예기치 않은 CPU 바인딩 일을 할 수도 있습니다 ...) 아니면 실제로 사용 가능한 실행 스레드가 적기 때문에 차선 으로 서로를 기다리는 것 입니까?
rackandboneman

3
CPU 번호를 변경할 때 변경 kvm_trace횟수를 확인 하려면 실행 하십시오 IO_Exits. 게스트 CPU로 예약 된 IDE를 사용하고 있기 때문일 것입니다. virtio를 사용하면 성능이 일관되어야하고 데이터 플레인이 qemu 인 경우 성능이 크게 향상됩니다. 버그가있는 가상화 스택으로 알려진 배포판을 사용하고 있다는 사실도 추측 할 수 있습니다.
dyasny

@ ewwhite : 그렇습니다. 전문 테스트를 실행하는 것이 좋습니다. 그러나이 I / O 동작이 발생하는 이유를 먼저 이해하고 싶습니다. @ rachandboneman : 마지막으로 보았을 때, 4 개의 CPU는 매우 높은 대기 값을 가졌습니다 (약 70-80 %). @ dyasny : 감사합니다, 나는 그것을 시도합니다. 데이터 플레인이 활성화 / 현재 사용되고 있는지 어떻게 확인할 수 있습니까?
Valentin

데이터 플레인은 현재 실험 중이며,이를 채택한 첫 번째 배포판은 Fedora 일 것입니다. pl.digipedia.org/usenet/thread/11769/28329
dyasny

답변:


9

나는 매우 거친 생각 / 설명을 줄 것이다.

OP 상황에서는 VM 내에서 측정하는 것 외에도 호스트도 살펴 봐야합니다.

이 경우 다음이 올바른 것으로 가정 할 수 있습니다

  1. 모든 테스트에서 호스트 I / O (디스크) 대역폭이 최대가 아닙니다. "monitoring"더 많은 CPU가 할당되면 VM ( ) I / O가 증가합니다. 호스트 I / O가 이미 최대치 인 경우 I / O 성능 향상이 없어야합니다.
  2. "bla""monitoring"I / O 성능이 다음과 같이 변경되지 않고 개선됨에 따라 제한 요소가 아님"bla"
  3. CPU는 성능 향상을위한 주요 공장입니다 (OP의 경우) I / O가 병목이 아니기 때문에 OP는 메모리 크기 변경을 언급하지 않습니다. 그런데 왜? 아니면 어떻게?

추가 요인

  1. 쓰기는 읽기보다 시간이 더 걸립니다 . VM 및 호스트에서 동일합니다. VM은 호스트가 읽기 및 쓰기를 마칠 때까지 기다립니다.

더 많은 CPU가 할당되면 "monitoring"어떻게됩니까?

"monitoring"더 많은 CPU가 할당 되면 더 많은 처리 능력을 얻을 수 있지만 I / O 처리 시간 도 더 길어 집니다.

rsync단일 스레드 프로그램이므로 아무 관련이 없습니다 .

증가 된 CPU 전력 또는보다 정확하게는 처리 시간 증가를 활용하는 것이 I / O 계층입니다.

"monitoring"테스트 중에 CPU 모니터링 프로그램 (예 : 상단)을 사용 하면 하나가 아니라 모든 CPU 사용량과 % wa가 표시됩니다. % wa는 I / O 대기 시간입니다.

이 성능 향상은 호스트 I / O가 최대가 아닌 경우에만 발생합니다. 밖.

KVM 사이트에서 CPU 스케줄링을 찾을 수 없지만 KVM이 CFS 및 cgroups를 사용하고 있다고 언급 한이 블로그 가 있습니다.

KVM 내에서 각 vcpu는 Linux 프로세스에 매핑되며, 하드웨어 프로세스를 활용하여 가상화에 필요한 '연기 및 미러'를 만듭니다. 따라서 vcpu는 CFS와 cgroup에 대한 또 다른 프로세스 일뿐입니다. cgroup은 리소스 관리자로서 Linux가 리소스 할당을 관리 할 수 ​​있도록합니다 (일반적으로 제한 할당을 설정하기 위해 비례 적으로). cgroup은 메모리, 네트워크 및 I / O에도 적용됩니다. 프로세스 그룹은 스케줄링 그룹의 일부로 만들어 자원 할당 요구 사항을 계층 적 프로세스 그룹에 적용 할 수 있습니다.

간단히 말해서, 주어진 시간 동안 더 많은 CPU = 더 많은 CPU 시간 = 더 많은 I / O 시간 슬롯.


이 답변을 작성해 주셔서 감사합니다. "더 많은 vCPU는 I / O에 더 많은 처리 시간을 의미합니다"는 내가 찾던 설명입니다. 현상금 가치가 있습니다!
Valentin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.