Hiệu suất đĩa KVM cực kỳ thấp (tệp đĩa qcow2 + virtio)


27

Tôi đang gặp một số vấn đề nghiêm trọng về hiệu suất đĩa trong khi thiết lập máy khách KVM. Sử dụng một ddthử nghiệm đơn giản , phân vùng trên máy chủ lưu trữ hình ảnh qcow2 nằm trên (một mảng RAID được nhân đôi) ghi với tốc độ trên 120MB / s , trong khi khách của tôi nhận được ghi từ 0,5 đến 3 MB / s .

  • Khách được cấu hình với một vài CPU và 4G RAM và hiện không chạy bất cứ thứ gì khác; đó là một cài đặt hoàn toàn tối thiểu tại thời điểm này.
  • Hiệu suất được kiểm tra bằng cách sử dụng time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000.
  • Khách được cấu hình để sử dụng virtio, nhưng điều này dường như không tạo ra sự khác biệt cho hiệu suất.
  • Các phân vùng máy chủ được căn chỉnh 4kb (dù sao hiệu suất cũng tốt trên máy chủ).
  • Sử dụng bộ đệm ghi lại trên đĩa để tăng hiệu suất được báo cáo một cách ồ ạt, nhưng tôi không muốn sử dụng nó; thậm chí không có nó hiệu suất nên tốt hơn nhiều so với điều này.
  • Cả máy chủ và khách đều đang chạy Ubuntu 12.04 LTS, đi kèm với qemu-kvm 1.0 + noroms-0ubfox13 và libvirt 0.9.8-2ubfox17.1.
  • Máy chủ có lịch trình IO thời hạn được kích hoạt và khách không có.

Dường như có rất nhiều hướng dẫn ngoài việc điều chỉnh hiệu suất kvm, và cuối cùng tôi sẽ đến đó, nhưng có vẻ như tôi sẽ đạt được hiệu suất tốt hơn rất nhiều so với điều này vào thời điểm này nên có vẻ như đã có điều gì đó rất sai.

Cập nhật 1

Và đột nhiên khi tôi quay lại và kiểm tra ngay bây giờ, nó là 26,6 MB / s; nó giống như những gì tôi mong đợi w / qcrow2. Tôi sẽ để lại câu hỏi trong trường hợp bất cứ ai có bất kỳ ý tưởng nào về những gì có thể là vấn đề (và trong trường hợp nó trở lại một cách bí ẩn).

Cập nhật 2

Tôi đã ngừng lo lắng về hiệu suất của qcow2 và chỉ cắt ngang LVM trên đầu RAID1 với hình ảnh thô, vẫn sử dụng virtio nhưng đặt cache = 'none' và io = 'bản địa' trên ổ đĩa. Viết hiệu suất bây giờ là appx. 135MB / s sử dụng cùng một bài kiểm tra cơ bản như trên, do đó dường như không có nhiều điểm để tìm ra vấn đề là gì khi nó có thể dễ dàng xử lý hoàn toàn.


Bạn đã không đề cập đến các phiên bản phân phối và phần mềm được sử dụng.
dyasny

Đã thêm một số thông tin về các phiên bản.
El Yobo

ah, như mong đợi, ubfox ... bất kỳ cơ hội nào bạn có thể tái tạo điều này trên fedora?
dyasny

Máy chủ đang ở Đức và tôi hiện đang ở Mexico, vì vậy điều đó có thể hơi rắc rối. Và nếu nó đột nhiên hoạt động ... Tôi vẫn không muốn phải đối phó với máy chủ Fedora;) Tôi đã thấy một vài ý kiến ​​cho rằng các hệ thống Debian / Ubuntu có nhiều vấn đề hơn Fedora / CentOS cho KVM công việc phát triển đã được thực hiện ở đó.
El Yobo

quan điểm của tôi chính xác. và trong mọi trường hợp, nếu bạn theo hệ điều hành cấp máy chủ, bạn cần RHEL, không phải Ubuntu
dyasny

Câu trả lời:


14

Vâng, vâng, các tập tin qcow2 không được thiết kế để có hiệu suất nhanh chóng. Bạn sẽ nhận được nhiều may mắn hơn từ các phân vùng thô (hay tốt nhất là LV).


3
Rõ ràng, nhưng chúng cũng không có nghĩa là hoàn toàn tào lao như những con số tôi nhận được.
El Yobo

1
Hầu hết các ví dụ trên mạng cho thấy hiệu năng tương tự với qcow2, dường như là một cải tiến đáng kể so với phiên bản cũ hơn. Trang web KVM đã xuất hiện số tại linux-kvm.org/page/Qcow2 , hiển thị thời gian tương đương cho một loạt các trường hợp.
El Yobo

1
18:35 (qcow2) so với 8:48 (thô) là "thời gian tương đương"?
womble

1
Tôi đã chuyển chúng sang hình ảnh thô được hỗ trợ LVM trên đầu RAID1, đặt bộ lập lịch io thành noop cho khách và thời hạn trên máy chủ và hiện tại nó ghi ở mức 138 MB / s. Tôi vẫn không biết điều gì đã khiến qcow2 có tốc độ 3MB / s, nhưng rõ ràng nó có thể bị bỏ qua bằng cách sử dụng raw, vì vậy cảm ơn vì đã đẩy tôi theo hướng đó.
El Yobo

1
Điều đó không hoàn toàn đúng - các bản vá mới nhất trong qemu tốc độ qcow2 rất nhiều! Chúng tôi gần như ngang bằng.
lzap

7

Cách đạt được hiệu suất cao nhất với QCOW2 :

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

Điều quan trọng nhất là preallocation giúp tăng tốc tốt, theo các nhà phát triển của qcow2. Nó gần như ngang bằng với LVM bây giờ! Lưu ý rằng điều này thường được kích hoạt trong các bản phân phối Linux hiện đại (Fedora 25+).

Ngoài ra, bạn có thể cung cấp bộ đệm không an toàn nếu đây không phảitrường hợp sản xuất (điều này nguy hiểm và không được khuyến nghị, chỉ tốt cho thử nghiệm):

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

Một số người dùng báo cáo rằng cấu hình này vượt qua cấu hình LVM / không an toàn trong một số thử nghiệm.

Đối với tất cả các tham số này, QEMU 1.5+ mới nhất là bắt buộc! Một lần nữa, hầu hết các distro hiện đại có những điều này.


2
Việc sử dụng cache = không an toàn không phải là một ý tưởng hay: việc tắt máy chủ không mong muốn có thể tàn phá toàn bộ hệ thống tệp khách. Sẽ tốt hơn nhiều khi sử dụng cache = writBack: hiệu suất tương tự, nhưng độ tin cậy tốt hơn nhiều.
shodanshok

1
Như tôi đã nói: nếu đây không phải là phiên bản sản xuất (tốt cho thử nghiệm)
lzap

Đủ công bằng. Tôi đã bỏ lỡ nó;)
shodanshok

6

Tôi đã đạt được kết quả tuyệt vời cho hình ảnh qcow2 với cài đặt này:

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

trong đó vô hiệu hóa bộ đệm của khách và kích hoạt AIO (IO không đồng bộ). Chạy ddlệnh của bạn đã cho tôi 177MB / s trên máy chủ và 155 MB / s trên máy khách. Hình ảnh được đặt trên cùng một khối lượng LVM nơi thử nghiệm của máy chủ được thực hiện.

qemu-kvmPhiên bản của tôi là 1.0+noroms-0ubuntu14.8và kernel 3.2.0-41-generictừ stock Ubuntu 12.04.2 LTS.


5
Bạn đặt loại hình ảnh qcow2 thành "thô"?
Alex

Tôi đoán tôi đã sao chép mục cũ hơn, tôi cho rằng lợi ích tốc độ phải giống nhau type='qcow2', bạn có thể kiểm tra trước khi chỉnh sửa không? Tôi không có quyền truy cập vào cấu hình như vậy nữa - Tôi đã di chuyển đến LXC với các mount bindthư mục để đạt được tốc độ thực sự trong khách.
gertas

2

Nếu bạn đang chạy vms của mình bằng một lệnh duy nhất, đối với các đối số bạn có thể sử dụng

tập tin kvm -drive = / path_to.qcow2, if = virtio, cache = off <...>

Nó đã cho tôi từ 3MB / s đến 70MB / s


2

Trên các phiên bản Qemu / KVM cũ, phụ trợ Qcow2 rất chậm khi không được kích hoạt, hơn nữa nếu được sử dụng mà không kích hoạt bộ đệm cache. Xem ở đây để biết thêm thông tin.

Trên các phiên bản Qemu gần đây hơn, các tệp Qcow2 nhanh hơn nhiều, ngay cả khi không sử dụng tính năng preallocation (hoặc chỉ có siêu dữ liệu). Tuy nhiên, khối lượng LVM vẫn nhanh hơn.

Một lưu ý về các chế độ bộ đệm: bộ đệm ghi lại là chế độ ưa thích, trừ khi sử dụng một khách không có hoặc không hỗ trợ vô hiệu hóa cho việc xóa / rào cản bộ đệm của bộ đệm. Trong thực tế, khách Win2000 + và bất kỳ tùy chọn gắn kết rào cản Linux EXT4, XFS hoặc EXT3 + nào đều bị phạt. Mặt khác, không bao giờ nên sử dụng bộ đệm = không an toàn cho các máy sản xuất, vì các bộ đệm bộ đệm không được truyền đến hệ thống máy chủ. Việc tắt máy chủ đột xuất có thể phá hủy hệ thống tập tin của khách.


2

Tôi đã trải nghiệm chính xác cùng một vấn đề. Trong máy ảo RHEL7, tôi có phần mềm đích LIO iSCSI mà các máy khác kết nối. Là lưu trữ cơ bản (kho lưu trữ) cho iSCSI LUN của tôi, ban đầu tôi đã sử dụng LVM, nhưng sau đó chuyển sang hình ảnh dựa trên tệp.

Câu chuyện dài: khi lưu trữ sao lưu được gắn vào bộ điều khiển lưu trữ virtio_blk (vda, vdb, v.v.) - hiệu suất từ ​​máy khách iSCSI kết nối với mục tiêu iSCSI trong môi trường của tôi ~ 20 IOPS, với thông lượng (tùy thuộc vào kích thước IO) ~ 2- 3 MiB / s. Tôi đã thay đổi bộ điều khiển đĩa ảo trong máy ảo thành SCSI và tôi có thể nhận được hơn 1000 IOPS và thông lượng hơn 100 MiB / s từ các máy khách iSCSI của mình.

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.