KVM khách io chậm hơn nhiều so với máy chủ io: điều đó có bình thường không?


13

Tôi có thiết lập hệ thống máy chủ Qemu-KVM trên CentOS 6.3. Bốn ổ cứng SATA 1TB hoạt động trong Phần mềm RAID10. Guest CentOS 6.3 được cài đặt trên LVM riêng. Mọi người nói rằng họ thấy hiệu suất của khách gần như bằng hiệu suất của máy chủ, nhưng tôi không thấy điều đó. Các thử nghiệm i / o của tôi đang cho thấy hiệu suất của khách chậm hơn 30-70% so với trên hệ thống máy chủ. Tôi đã cố gắng thay đổi lịch trình (đặt elevator=deadlinetrên máy chủ và elevator=nooptrên máy khách), đặt blkio.weightthành 1000 trong nhóm, thay đổi io thành virtio ... Nhưng không có thay đổi nào trong số này cho tôi bất kỳ kết quả quan trọng nào. Đây là phần cấu hình .xml dành cho khách:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/dev/vgkvmnode/lv2'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>

Có những bài kiểm tra của tôi:

Hệ thống máy chủ:

kiểm tra iozone

# iozone -a -i0 -i1 -i2 -s8G -r64k
                                                            random  random 
              KB  reclen   write rewrite    read    reread    read   write 
         8388608      64  189930  197436   266786   267254   28644   66642 

kiểm tra đọc dd: một quá trình và sau đó bốn quá trình đồng thời

# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct
1073741824 bytes (1.1 GB) copied, 4.23044 s, 254 MB/s

# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=4096
1073741824 bytes (1.1 GB) copied, 14.4528 s, 74.3 MB/s
1073741824 bytes (1.1 GB) copied, 14.562 s, 73.7 MB/s
1073741824 bytes (1.1 GB) copied, 14.6341 s, 73.4 MB/s
1073741824 bytes (1.1 GB) copied, 14.7006 s, 73.0 MB/s

kiểm tra ghi dd: một quá trình và sau đó bốn quá trình đồng thời

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 6.2039 s, 173 MB/s

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 32.7173 s, 32.8 MB/s
1073741824 bytes (1.1 GB) copied, 32.8868 s, 32.6 MB/s
1073741824 bytes (1.1 GB) copied, 32.9097 s, 32.6 MB/s
1073741824 bytes (1.1 GB) copied, 32.9688 s, 32.6 MB/s

Hệ thống khách:

kiểm tra iozone

# iozone -a -i0 -i1 -i2 -s512M -r64k
                                                            random  random
              KB  reclen   write rewrite    read    reread    read   write
          524288      64   93374  154596   141193   149865   21394   46264 

kiểm tra đọc dd: một quá trình và sau đó bốn quá trình đồng thời

# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024
1073741824 bytes (1.1 GB) copied, 5.04356 s, 213 MB/s

# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=4096
1073741824 bytes (1.1 GB) copied, 24.7348 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.7378 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.7408 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.744 s, 43.4 MB/s

kiểm tra ghi dd: một quá trình và sau đó bốn quá trình đồng thời

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 10.415 s, 103 MB/s

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 49.8874 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.8608 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.8693 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.9427 s, 21.5 MB/s

Tôi tự hỏi là tình huống bình thường hoặc tôi đã bỏ lỡ một cái gì đó?


Bạn nói rằng bạn đã thay đổi khách của mình để sử dụng một loại xe buýt đạo đức mang lại hiệu suất tốt hơn, nhưng nó phải được cài đặt trình điều khiển virtio để gặt hái những lợi ích này. Bạn không nói nếu bạn đang sử dụng chúng hay không. Tôi không biết CentOS đủ kỹ lưỡng để nhận xét về việc những tài xế này sẽ có mặt trong khách của bạn theo mặc định hay không.
jwbensley

1
@javano CentOS luôn bao gồm virtio và bạn sẽ phải loại bỏ nó một cách rõ ràng bằng cách xây dựng lại các gói kernel.
Michael Hampton

Luôn tiện dụng để biết, chúc mừng :)
jwbensley

Câu trả lời:


21

Bạn chưa hoàn thành việc điều chỉnh hiệu suất.

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

Đầu tiên là cơ chế I / O để sử dụng.

QEMU có hai cơ chế I / O không đồng bộ: mô phỏng POSIX AIO bằng cách sử dụng một nhóm các luồng công nhân và AIO Linux nguyên gốc.

Đặt một trong io='native'hoặc io='threads'trong XML của bạn để điểm chuẩn từng trong số này.

Thứ hai là sử dụng cơ chế lưu trữ. Bạn có thể thiết lập cache='writeback', cache='writethrough'hoặc bạn có thể tắt nó đi với cache='none', mà bạn thực sự có thể tìm thấy công trình tốt nhất.

Nếu bạn đang sử dụng khối lượng hoặc phân vùng thô, tốt nhất nên tránh hoàn toàn bộ đệm, điều này làm giảm các bản sao dữ liệu và lưu lượng xe buýt.

Không sử dụng writebacktrừ khi mảng RAID của bạn được hỗ trợ bằng pin hoặc bạn có nguy cơ mất dữ liệu. (Tất nhiên, nếu mất dữ liệu là OK, thì cứ thoải mái.)

Thứ ba, một số điều khác có thể giúp bao gồm tắt các rào cản và sử dụng lịch trình thời hạn trong khách.

Cuối cùng, làm một số nghiên cứu. IBM đã có một bài thuyết trình rất thú vị về hiệu năng KVM I / O tại Hội nghị Thợ ống nước Linux 2010. Ngoài ra, họ có một loạt các thực tiễn tốt nhất về việc sử dụng KVM , điều chắc chắn sẽ được quan tâm.

PS đọc và ghi tuần tự dài hiếm khi đại diện cho khối lượng công việc trong thế giới thực. Hãy thử làm điểm chuẩn với các loại khối lượng công việc khác, lý tưởng nhất là (các) ứng dụng thực tế bạn định chạy trong sản xuất.


+1 cho "thử nghiệm với mẫu IO của bạn"
Javier

Ồ, rất thích các tài liệu của IBM, +1 :)
jwbensley

1
Rất hữu ích, cảm ơn! Bây giờ tôi đã cải thiện kết quả khách của mình lên đến 90% từ hiệu suất máy chủ. Lỗi của tôi khá ngu ngốc: virsh reset <domain>đã không áp dụng các virsh edit <domain>thay đổi của tôi và tôi tin rằng khách đã sử dụng virtio, nhưng thực tế thì không. Chỉ virsh destroy <domain>theo sau được virsh start <domain>giúp đỡ. Quy tắc Virtio! ;)
Evolver

1
bộ đệm Chỉ cache = không an toàn. WritBack không ngụ ý các yêu cầu phần cứng bổ sung ("mảng RAID được hỗ trợ bằng pin" không giúp ích được gì). Nó có mức toàn vẹn giống như một bộ ghi cache của ổ cứng: cả hai đều được hệ điều hành xóa sạch khi cần thiết.
korkman

io='native'đã cho gần 20-30% hiệu suất VIẾT trong trường hợp của tôi
rahul286
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.