KVM / Qemu, Ubuntu: Tại sao nhiều CPU khách tăng cường đĩa I / O nhanh chóng?


9

Chúng tôi có một cụm Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt bao gồm hai nút. Mỗi nút chạy Ubuntu 12.04 64 Bit với các gói / phiên bản sau:

  • Hạt nhân 3.2.0-32-chung # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubfox14.3
  • sinh viên 0.9.13
  • máy tạo nhịp tim 1.1.7
  • nhịp tim 3.0.5

Các khách ảo đang chạy Ubuntu 10.04 64 Bit và Ubuntu 12.04 64 Bit. Chúng tôi sử dụng tính năng libvirt để chuyển các khả năng của CPU chủ cho khách ảo để đạt được hiệu suất CPU tốt nhất.

Bây giờ đây là một thiết lập phổ biến trên cụm này:

  • VM "giám sát" có 4 vCPUs
  • VM "giám sát" sử dụng ide làm giao diện đĩa (chúng tôi hiện đang chuyển sang VirtIO vì lý do rõ ràng)

Gần đây chúng tôi đã chạy một số thử nghiệm đơn giản. Tôi biết họ không chuyên nghiệp và không đạt tiêu chuẩn cao, nhưng họ đã thể hiện một xu hướng mạnh mẽ:

Nút A đang chạy VM "bla" Nút Node đang chạy VM "giám sát"

Khi chúng tôi đồng bộ hóa một tệp từ VM "bla" sang VM "giám sát", chúng tôi chỉ đạt được 12 MB / s. Khi chúng tôi thực hiện một dd đơn giản if = / dev / null of = / tmp / blubb bên trong "giám sát" VM, chúng tôi đạt được khoảng 30 MB / s.

Sau đó, chúng tôi đã thêm 4 vCPU nữa vào "giám sát" VM và khởi động lại nó. VM "giám sát" hiện có 8 vCPUs. Chúng tôi đã chạy lại các thử nghiệm với các kết quả sau: Khi chúng tôi đồng bộ hóa một tệp từ VM "bla" sang VM "giám sát", chúng tôi hiện đạt được 36 MB / s. Khi chúng tôi thực hiện một dd đơn giản if = / dev / null of = / tmp / blubb bên trong "giám sát" VM, giờ đây chúng tôi đạt được khoảng 61 MB / s.

Đối với tôi, hiệu ứng này là khá đáng ngạc nhiên. Làm thế nào mà việc thêm nhiều CPU ảo cho khách ảo này tự động có nghĩa là hiệu năng đĩa bên trong VM nhiều hơn?

Tôi không có một lời giải thích cho điều này và sẽ thực sự đánh giá cao đầu vào của bạn. Tôi muốn hiểu nguyên nhân khiến hiệu suất này tăng lên vì tôi có thể tái tạo hành vi này 100%.


2
Sử dụng một công cụ đo điểm chuẩn được xây dựng có mục đích như iozone hoặc bonnie ++ để giúp loại bỏ các biến khác.
ewwhite

Thật thú vị khi tải CPU thực tế trông như thế nào ... là thứ mà cpu bị ràng buộc được giới thiệu ở một nơi khuất (rsync cộng có lẽ là ssh chắc chắn là ở một mức độ nào đó, vì vậy các trình điều khiển mạng được giới thiệu theo cách đó, cũng có thể làm những điều bị ràng buộc bởi cpu bất ngờ ...), hay thực sự mọi thứ đang chờ đợi nhau do các luồng thực thi có sẵn ít hơn?
rackandboneman

3
chạy kvm_traceđể xem số lượng IO_Exitsthay đổi khi bạn thay đổi số CPU. Tôi đoán đó là vì bạn đang sử dụng IDE, được lên lịch với các CPU khách. Với virtio, hiệu suất phải nhất quán và khi mặt phẳng dữ liệu ở trạng thái qemu, nó sẽ có được sự tăng cường mạnh mẽ. Một dự đoán khác có thể là ở chỗ bạn đang sử dụng một bản phân phối được biết đến với ngăn xếp ảo hóa lỗi.
dyasny

@ ewwhite: Có, chạy thử nghiệm chuyên nghiệp sẽ là một lựa chọn tốt. Tuy nhiên, tôi muốn hiểu đầu tiên tại sao hành vi I / O này xảy ra. @ rachandboneman: Khi tôi nhìn lần cuối, 4 CPU có giá trị chờ rất cao (khoảng 70-80%). @dyasny: Cảm ơn, tôi sẽ thử nó. Làm cách nào để kiểm tra mặt phẳng dữ liệu được kích hoạt / hiện đang được sử dụng?
Valentin

Máy bay dữ liệu hiện đang thử nghiệm và tôi khá chắc chắn rằng bản phân phối đầu tiên để nhận nó sẽ là Fedora. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Câu trả lời:


9

Tôi sẽ đưa ra ý tưởng / giải thích rất thô.

Trong tình huống OP, ngoài việc đo trong VM, máy chủ cũng nên được xem xét.

Trong trường hợp này, chúng ta có thể giả sử như sau là đúng

  1. Trong tất cả các thử nghiệm, băng thông I / O (đĩa) máy chủ không được tối đa. Khi "monitoring"I / O VM ( ) tăng với nhiều CPU được phân bổ cho nó. Nếu I / O của máy chủ đã hết mức tối đa, sẽ không có hiệu suất I / O tăng.
  2. "bla"không phải là yếu tố giới hạn"monitoring"hiệu suất I / O được cải thiện mà không thay đổi"bla"
  3. CPU là nhà máy chính để tăng hiệu năng (trong trường hợp OP) Vì I / O không phải là cổ chai và OP không đề cập đến bất kỳ thay đổi kích thước bộ nhớ. Nhưng tại sao? Hoặc thế nào?

Yếu tố bổ sung

  1. Viết mất nhiều thời gian hơn Đọc Điều này giống với VM và cho máy chủ. Đặt nó trong các điều khoản cực kỳ đơn giản: VM chờ cho máy chủ hoàn thành đọc và viết.

Điều gì xảy ra khi nhiều cpu được gán cho "monitoring"?

Khi "monitoring"được phân bổ nhiều CPU hơn, nó sẽ tăng thêm sức mạnh xử lý, nhưng nó cũng có thêm thời gian xử lý cho I / O.

Điều này không có gì để làm rsyncvì nó là một chương trình chủ đề duy nhất.

Đó là lớp I / O sử dụng sức mạnh CPU tăng lên, hay chính xác hơn là thời gian xử lý tăng lên.

Nếu chương trình giám sát cpu (ví dụ: top) được sử dụng "monitoring"trong quá trình thử nghiệm, nó sẽ hiển thị không phải một, mà tất cả việc sử dụng cpu đều tăng lên và cả% wa. % wa là thời gian chờ đợi dành cho I / O.

Việc tăng hiệu suất này sẽ chỉ xảy ra khi I / O máy chủ của bạn không tối đa. ngoài.

Tôi không thể tìm thấy lịch trình cpu trong trang web KVM, nhưng có blog này đề cập đến KVM đang sử dụng CFS và các nhóm, sau đây là trích dẫn

Trong KVM, mỗi vcpu được ánh xạ tới một quy trình Linux, lần lượt sử dụng hỗ trợ phần cứng để tạo ra 'khói và gương' cần thiết cho ảo hóa. Như vậy, vcpu chỉ là một quy trình khác của CFS và cũng quan trọng đối với các nhóm, với tư cách là người quản lý tài nguyên, cho phép Linux quản lý phân bổ tài nguyên - thường theo tỷ lệ để đặt phân bổ ràng buộc. cgroups cũng áp dụng cho Bộ nhớ, mạng và I / O. Các nhóm quy trình có thể được tạo thành một phần của nhóm lập lịch để áp dụng các yêu cầu phân bổ tài nguyên cho các nhóm quy trình phân cấp.

Tóm lại, nhiều cpu hơn = nhiều thời gian cpu hơn = nhiều khe thời gian I / O hơn trong một khoảng thời gian nhất định.


Cảm ơn bạn đã viết câu trả lời này. "Nhiều vCPUs hơn có nghĩa là có nhiều thời gian xử lý I / O hơn" là lời giải thích mà tôi đang tìm kiếm. Đáng tiền thưởng!
Valentin
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.