매우 낮은 KVM 디스크 성능 (qcow2 디스크 파일 + virtio)


27

KVM 게스트를 설정하는 동안 디스크 성능에 심각한 문제가 있습니다. 간단한 사용하여 dd테스트의 qcow2 이미지 (미러링 된 RAID 어레이)에 상주하는 호스트의 파티션에 걸쳐에서 기록 1백20메가바이트가 / S 내 손님에 이르기까지 쓰기 느끼는 동안, 0.5 3메가바이트에를 / S .

  • 게스트는 몇 개의 CPU와 4G의 RAM으로 구성되었으며 현재 다른 것을 실행하지 않습니다. 현재로서는 최소한의 설치입니다.
  • 를 사용하여 성능을 테스트 time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000합니다.
  • 게스트가 virtio를 사용하도록 구성되었지만 성능에 차이가있는 것으로 보이지는 않습니다.
  • 호스트 파티션은 4kb로 정렬됩니다 (어쨌든 호스트의 성능은 양호합니다).
  • 디스크에 쓰기 저장 캐싱을 사용하면보고 된 성능이 크게 향상되지만 사용하지 않는 것이 좋습니다. 그것 없이도 성능은 이것보다 훨씬 나을 것입니다.
  • 호스트와 게스트 모두 우분투 12.04 LTS를 실행하고 있으며 qemu-kvm 1.0 + noroms-0ubuntu13 및 libvirt 0.9.8-2ubuntu17.1과 함께 제공됩니다.
  • 호스트는 최종 기한 IO 스케줄러를 활성화하고 게스트는 noop을 갖습니다.

kvm 성능을 조정하는 가이드가 많이있는 것 같습니다. 결국 거기에 도달 할 것입니다. 그러나이 시점에서 이보다 훨씬 더 나은 성능을 얻는 것처럼 보이므로 뭔가 잘못되었습니다.

업데이트 1

갑자기 돌아가서 지금 테스트하면 26.6MB / s입니다. 이것은 내가 qcrow2를 기대했던 것과 더 비슷합니다. 누군가 문제가 무엇인지에 대한 아이디어가있는 경우 (그리고 신비하게 다시 돌아 오는 경우) 질문을 남길 것입니다.

업데이트 2

qcow2 성능에 대한 걱정을 멈추고 원시 이미지로 RAID1 위에 LVM으로 넘어갔습니다. 여전히 virtio를 사용하지만 디스크 드라이브에서 cache = 'none'및 io = 'native'를 설정했습니다. 쓰기 성능은 이제 appx입니다. 위와 동일한 기본 테스트를 사용하는 135MB / s 이므로 문제를 완전히 해결할 수있을 때 문제가 무엇인지 파악하는 데별로 중요하지 않습니다.


사용중인 배포판 및 소프트웨어 버전에 대해서는 언급하지 않았습니다.
dyasny

버전에 대한 정보를 추가했습니다.
El Yobo

아, 예상대로 우분투 ... 페도라에서 이것을 재현 할 수 있습니까?
dyasny

서버는 독일에 있으며 현재 멕시코에 있으므로 조금 까다로울 수 있습니다. 그리고 갑자기 작동한다면 ... 나는 여전히 Fedora 서버를 다루고 싶지 않을 것입니다;) Debian / Ubuntu 시스템이 Fedora / CentOS보다 KVM에 대해 더 많은 문제가 있음을 시사하는 몇 가지 의견을 보았습니다. 개발 작업이 그곳에서 이루어졌습니다.
El Yobo

내 요점은 정확히 어쨌든,
서버급

답변:


14

예, qcow2 파일은 놀랍도록 빠른 성능을 위해 설계되지 않았습니다. 원시 파티션 (또는 바람직하게는 LV)에서 훨씬 더 운이 좋을 것입니다.


3
분명히, 그러나 그들은 또한 내가 얻는 숫자만큼이나 허약하다는 의미는 아닙니다.
El Yobo

1
qcow2와 비슷한 성능을 보이는 대부분의 예는 이전 버전에 비해 크게 개선 된 것으로 보입니다. KVM 사이트 자체는 linux-kvm.org/page/Qcow2에 번호가 나와 있으며, 이는 다양한 경우에 대해 비슷한 시간을 보여줍니다.
El Yobo

1
18:35 (qcow2) vs 8:48 (raw)은 "비교할만한 시간"입니까?
울다

1
RAID1 위에 LVM 기반 원시 이미지로 전환하고 게스트에서 io 스케줄러를 noop로 설정하고 호스트의 최종 기한을 설정하면 이제 138MB / s로 기록됩니다. 나는 여전히 qcow2가 3MB / s의 속도를 갖는 원인을 알지 못하지만 원시를 사용하여 분명히 회피 할 수 있으므로 그 방향으로 나를 밀어 주셔서 감사합니다.
El Yobo

1
qemu의 최신 패치는 qcow2의 속도를 크게 높여줍니다! 우리는 거의 동위에 있습니다.
lzap

7

QCOW2로 최고의 성능 을 달성하는 방법 :

qemu-img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts=on imageXYZ

qcow2 개발자에 따르면 가장 중요한 것은 사전 할당이며 크게 향상됩니다. 이제 LVM과 거의 같은 수준입니다 ! 이것은 일반적으로 최신 (Fedora 25+) Linux 배포판에서 활성화됩니다.

또한 프로덕션 인스턴스아닌 경우 안전하지 않은 캐시를 제공 할 수 있습니다 (위험하고 권장되지 않으며 테스트에만 적합 함).

<driver name='qemu' cache='unsafe' />

일부 사용자는 일부 테스트에서이 구성이 LVM / 안전하지 않은 구성보다 뛰어나다 고보고합니다.

이러한 모든 매개 변수에는 최신 QEMU 1.5 이상 이 필요합니다! 다시 말하지만, 현대 배포판의 대부분에는 이것들이 있습니다.


2
그것은 것입니다 하지 사용 캐시 = 안전에 좋은 아이디어 : 예기치 않은 호스트 종료가에 위력을 과시 할 수 전체 게스트 파일 시스템. 그것은이다 매우 유사한 성능,하지만 훨씬 더 신뢰성 : 사용 캐시 = 되돌림에게 더 나은.
shodanshok

1
내가 말했듯이 : 이것이 프로덕션 인스턴스가 아닌 경우 (테스트에 적합)
lzap

충분합니다. 나는 그것을 놓쳤다;)
shodanshok

6

이 설정으로 qcow2 이미지에 대한 훌륭한 결과를 얻었습니다.

<driver name='qemu' type='raw' cache='none' io='native'/>

게스트 캐시를 비활성화하고 AIO (비동기 IO)를 활성화합니다. dd명령을 실행 하면 호스트에서 177MB / s, 게스트에서 155MB / s가 나옵니다. 이미지는 호스트 테스트가 수행 된 동일한 LVM 볼륨에 배치됩니다.

qemu-kvm버전은 재고 Ubuntu 12.04.2 LTS의 1.0+noroms-0ubuntu14.8커널 3.2.0-41-generic입니다.


5
qcow2 이미지 유형을 "raw"로 설정 했습니까?
Alex

이전 항목을 복사 한 것 같습니다. 속도 이점이 동일해야한다고 생각합니다. type='qcow2'편집하기 전에 확인할 수 있습니까? 더 이상 그러한 구성에 액세스 할 수 없습니다 mount bind. 게스트에서 실제 기본 속도를 달성하기 위해 디렉토리를 사용 하여 LXC로 마이그레이션했습니다 .
gertas

2

단일 명령으로 vms를 실행하는 경우 인수에 사용할 수 있습니다

kvm-드라이브 파일 = / path_to.qcow2, if = virtio, cache = off <...>

3MB / s에서 70MB / s로


2

이전 Qemu / KVM 버전에서 Qcow2 백엔드는 사전 할당되지 않은 경우 매우 느려서 쓰기 백 캐시가 활성화되지 않은 경우 더 많이 사용됩니다. 자세한 내용은 여기를 참조하십시오.

최신 Qemu 버전에서는 사전 할당 (또는 메타 데이터 전용 사전 할당)을 사용하지 않더라도 Qcow2 파일이 훨씬 빠릅니다. 여전히 LVM 볼륨은 더 빠릅니다.

캐시 모드에 대한 참고 사항 : 디스크 캐시 플러시 / 배리어에 대한 지원이 없거나 비활성화 된 게스트를 사용하지 않는 한 쓰기 저장 캐시가 선호되는 모드입니다. 실제로, Win2000 + 게스트와 모든 Linux EXT4, XFS 또는 EXT3 + 배리어 마운트 옵션이 적합합니다. 반면, 캐시 플러시는 호스트 시스템으로 전파되지 않기 때문에 cache = unsafe는 프로덕션 시스템에서 사용 해서는 안됩니다 . 예기치 않은 호스트 종료는 말 그대로 게스트의 파일 시스템을 파괴 할 수 있습니다.


2

나는 정확히 같은 문제를 경험했다. RHEL7 가상 머신에는 다른 머신이 연결되는 LIO iSCSI 대상 소프트웨어가 있습니다. 내 iSCSI LUN의 기본 저장소 (백 스토어)로서 처음에는 LVM을 사용했지만 파일 기반 이미지로 전환했습니다.

간단히 말해 : 백업 스토리지가 virtio_blk (vda, vdb 등) 스토리지 컨트롤러에 연결되어있는 경우 iSCSI 대상에 연결하는 iSCSI 클라이언트의 성능은 내 환경에서 ~ 20 IOPS, 처리량 (IO 크기에 따라) ~ 2- 3 MiB / s. 가상 머신 내의 가상 디스크 컨트롤러를 SCSI로 변경했으며 iSCSI 클라이언트에서 1000+ IOPS 및 처리량 100+ MiB / s를 얻을 수 있습니다.

<disk type='file' device='disk'>
   <driver name='qemu' type='qcow2' cache='none' io='native'/>
   <source file='/var/lib/libvirt/images/station1/station1-iscsi1-lun.img'/>
   <target dev='sda' bus='scsi'/>
   <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.