KVM에서 32비트 Linux 가상 머신을 실행하고 있습니다. 호스트는 LAN에 연결된 64비트 Linux 컴퓨터입니다. scp를 사용하여 KVM 시스템에서 LAN의 서버로 파일을 전송하려고 하면 기가비트 이더넷을 통해 약 500kB/s의 성능이 저하됩니다. 대략 1%정도 예상됩니다. 어떤 제안이 있으십니까?
답변1
사용을 고려해보세요가상 기기. (느린) 하드웨어를 에뮬레이션하지 않고도 가상 머신과 호스트를 직접 연결할 수 있습니다. 이를 사용하여 네트워크 성능이 크게 향상되는 것을 측정했습니다.
예를 들어, virtio 네트워크 장치는 kvm 명령줄 매개변수 "-net nic,model=virtio"를 통해 활성화할 수 있습니다.
Virtio 블록 장치를 사용하는 경우 새 장치 이름은 "vda1" 등이지만 현재 Linux 배포판은 UUID를 기반으로 파티션을 감지하므로 이는 문제가 되지 않습니다.
답변2
이는 클라이언트의 내부 디스크 I/O 성능 문제일 수 있습니다. 디스크 이미지를 사용하는 경우 성능 향상을 위해 다음 단계를 수행하십시오.
cache
먼저 게스트의 디스크 구성 옵션을 사용해 봐야 합니다 .
기본적으로 Write-Through 캐싱은 모든 블록 장치에 사용됩니다. 즉, 호스트 페이지 캐시는 데이터를 읽고 쓰는 데 사용되지만 쓰기 알림은 스토리지 하위 시스템에서 데이터가 기록되었음을 보고할 때만 클라이언트에 전송됩니다.
데이터가 호스트 페이지 캐시에 나타나면 후기입 캐시는 데이터 쓰기가 완료되었음을 보고합니다. 호스트를 신뢰하는 한 안전합니다. 호스트가 충돌하거나 전원이 꺼지면 게스트의 데이터가 손상될 수 있습니다. -snapshot 옵션을 사용하면 기본적으로 후기입 캐싱이 사용됩니다.
페이지 호스팅을 완전히 방지하려면 캐시=없음을 사용하세요. 이렇게 하면 게스트 메모리에 직접 디스크 IO가 시도됩니다. QEMU는 여전히 데이터의 내부 복사본을 수행할 수 있습니다.
일부 블록 드라이버는 캐시=연속 쓰기를 사용할 때 제대로 작동하지 않습니다. 특히 qcow2가 그렇습니다. 정확성보다 성능이 더 중요한 경우 qcow2와 함께 캐시=쓰기 저장을 사용해야 합니다. 기본적으로 qcow2 디스크 이미지에 대해 명시적 캐시가 지정되지 않은 경우 캐시=쓰기 저장이 사용됩니다. 다른 모든 디스크 유형의 경우 캐시=writethrough가 기본값입니다.
그런 다음 커널의 엘리베이터 옵션도 사용해야 합니다. elevator=noop
grub linux 명령줄에 다음과 같은 내용을 추가해야 합니다.
# Edit your /etc/default/grub.conf (on Debian-based distribution)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
이에 대한 더 나은 설명은 다음에서 찾을 수 있습니다.http://lonesysadmin.net/2008/02/21/elevatornoop/;그러나 간단히 말해서 호스트 Linux 커널과 게스트 Linux 커널 모두 I/O를 최적화하려고 시도하지만 게스트의 경우 이는 무엇보다 더 나쁜 경우가 많습니다(게스트는 이 작업을 호스트에 맡겨야 합니다).