Ảo hóa x86 / x64 có bao nhiêu chi phí?


24

Ảo hóa x86 / x64 có bao nhiêu chi phí (có lẽ tôi sẽ sử dụng VirtualBox, sở hữu VMWare, chắc chắn không paravirtualization) cho mỗi hoạt động sau đây của máy chủ Win64 và máy khách Linux64 sử dụng ảo hóa phần cứng Intel?

  • Hoàn toàn bị ràng buộc bởi CPU, mã 64 bit ở chế độ người dùng

  • Hoàn toàn bị ràng buộc bởi CPU, chế độ người dùng mã 32 bit

  • Gửi I / O vào ổ cứng (tôi quan tâm chủ yếu về thông lượng, không phải độ trễ)

  • Mạng I / O

  • Nguyên thủy đồng bộ hóa chủ đề (mutexes, semaphores, biến điều kiện)

  • Chủ đề bối cảnh chuyển đổi

  • Các hoạt động nguyên tử (sử dụng locktiền tố, những thứ như so sánh và trao đổi)

Tôi chủ yếu quan tâm đến trường hợp x64 được hỗ trợ phần cứng (cả Intel và AMD), nhưng tôi sẽ không nghe về bản dịch nhị phân chưa được phân loại và các trường hợp x86 (ví dụ máy chủ và máy khách 32 bit). Tôi không quan tâm đến paravirtualization.


(1) "x86" có nghĩa là 32 bit. Bạn sẽ không thể chạy mã 64 bit. Ảo hóa AMD64 (còn được gọi là x64) có những hạn chế khác nhau vì nó yêu cầu các phần mở rộng phần cứng. (2) Ý bạn là ảo hóa x86 bằng cách dịch nhị phân (chỉ x86) hay ảo hóa có hỗ trợ phần cứng (VT)?
Skyhawk

@Miles: Tôi đã làm rõ câu hỏi.
dsimcha

Câu trả lời:


26

Tôi thấy rằng không có câu trả lời đơn giản và tuyệt đối cho các câu hỏi như của bạn. Mỗi giải pháp ảo hóa hoạt động khác nhau trong các bài kiểm tra hiệu suất cụ thể. Ngoài ra, các thử nghiệm như thông lượng I / O của đĩa có thể được chia thành nhiều thử nghiệm khác nhau (đọc, viết, viết lại, ...) và kết quả sẽ thay đổi tùy theo từng giải pháp và theo kịch bản. Đây là lý do tại sao việc chỉ ra một giải pháp là nhanh nhất cho I / O đĩa và đây là lý do tại sao không có câu trả lời tuyệt đối cho các nhãn như chi phí cho I / O của đĩa.

Nó trở nên phức tạp hơn khi cố gắng tìm mối quan hệ giữa các bài kiểm tra điểm chuẩn khác nhau. Không có giải pháp nào tôi đã thử nghiệm có hiệu suất tốt trong các thử nghiệm hoạt động vi mô. Ví dụ: Bên trong VM, một cuộc gọi duy nhất đến "gettimeofday ()" đã thực hiện, trung bình, gấp 11,5 lần chu kỳ xung nhịp để hoàn thành so với trên phần cứng. Các siêu giám sát được tối ưu hóa cho các ứng dụng trong thế giới thực và không hoạt động tốt trên các hoạt động vi mô. Đây có thể không phải là vấn đề cho ứng dụng của bạn có thể phù hợp hơn với ứng dụng trong thế giới thực. Ý tôi là bằng cách vận hành vi mô bất kỳ ứng dụng nào sử dụng ít hơn 1.000 chu kỳ xung nhịp để hoàn thành (Đối với CPU 2,6 GHz, 1.000 chu kỳ xung nhịp được sử dụng trong 385 nano giây hoặc 3,85e-7 giây).

Tôi đã thực hiện thử nghiệm điểm chuẩn rộng rãi trên bốn giải pháp chính để hợp nhất trung tâm dữ liệu cho kiến ​​trúc x86. Tôi đã thực hiện gần 3000 bài kiểm tra so sánh hiệu năng bên trong máy ảo với hiệu năng phần cứng. Tôi đã gọi 'chi phí' là sự khác biệt của hiệu suất tối đa được đo bên trong VM (s) với hiệu suất tối đa được đo trên phần cứng.

Bản đồ đường viền:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Ảo hóa doanh nghiệp Red Hat 2.2

Hệ điều hành khách:

  • Microsoft Windows 2008 R2 64 bit
  • Red Hat Enterprise Linux 6.1 64 bit

Thông tin kiểm tra:

  • Máy chủ: 2X Sun Fire X4150 mỗi máy có RAM 8GB, CPU Intel Xeon E5440 2X và bốn cổng Ethernet gigabit
  • Đĩa: 6X 136GB đĩa SAS qua iSCSI qua gignet ethernet

Phần mềm điểm chuẩn:

  • CPU và bộ nhớ: Linpack điểm chuẩn cho cả 32 và 64 bit. Đây là CPU và bộ nhớ chuyên sâu.

  • Đĩa I / O và độ trễ: Bonnie ++

  • Mạng I / O: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR và UDP_STREAM

  • Các hoạt động vi mô: rdtscbench : Các cuộc gọi hệ thống, liên lạc qua đường ống

Các trung bình được tính toán với các tham số:

  • CPU và bộ nhớ: AVERAGE (HPL32, HPL64)

  • Đĩa I / O: AVERAGE (put_block, viết lại, get_block)

  • Mạng I / O: AVERAGE (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Các hoạt động vi mô AVERAGE (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], Simplemath [])

Đối với kịch bản thử nghiệm của tôi, sử dụng số liệu của tôi, trung bình kết quả của bốn giải pháp ảo hóa là:

Chi phí lớp VM, khách Linux:

  • CPU và bộ nhớ: 14,36%

  • Mạng I / O: 24,46%

  • Đĩa I / O: 8,84%

  • Độ trễ đĩa để đọc: chậm hơn 2,41 lần

  • Thời gian thực hiện thao tác vi mô: chậm hơn 10,84 lần

Chi phí lớp VM, Windows khách:

  • CPU và bộ nhớ trung bình cho cả 32 và 64 bit: 13,06%

  • Mạng I / O: 35,27%

  • Đĩa I / O: 15,20%

Xin lưu ý rằng các giá trị đó là chung chung và không phản ánh kịch bản trường hợp cụ thể.

Vui lòng xem toàn bộ bài viết: http://peterenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions


2
Bài viết này đã hết hạn
dyasny

1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds, không nên là một phân chia đơn giản 1.000 cho 2.600.000 để có được số giây mà 1.000 chu kỳ đồng hồ mất? (không phải là 23 mili giây)
dvdvorle

2
@Ông. Hạnh phúc, bạn đúng. Tôi đã nhận được 385 nano giây bằng cách: 1000/2600000000 = 0,00000000385 = 385 nano giây. Bạn có đồng ý với điều này? Cảm ơn đã chỉ ra điều này.
Peter Senna

@dyasny, tôi đang tìm phần cứng để lặp lại các bài kiểm tra với các phiên bản cập nhật. Bất cứ ý tưởng tôi có thể tìm thấy nó ở đâu?
Peter Senna

phần cứng có thể dễ dàng tìm thấy trong một cửa hàng
dyasny

4

Có quá nhiều biến số trong câu hỏi của bạn, tuy nhiên tôi có thể cố gắng thu hẹp nó lại. Giả sử rằng bạn đi với VMware ESX, bạn làm mọi thứ đúng - CPU mới nhất có hỗ trợ ảo hóa, các công cụ VMware với trình điều khiển lưu trữ và mạng bị ảo hóa, nhiều bộ nhớ. Bây giờ hãy giả sử rằng bạn chạy một máy ảo duy nhất trên thiết lập này. Theo kinh nghiệm của tôi, bạn nên có ~ 90% tốc độ CPU cho khối lượng công việc bị ràng buộc bởi CPU. Tôi không thể cho bạn biết nhiều về tốc độ mạng, vì chúng tôi đang sử dụng các liên kết 1Gbps và tôi có thể bão hòa nó mà không gặp vấn đề gì, nó có thể khác với liên kết 10Gbps tuy nhiên chúng tôi không có bất kỳ liên kết nào. Thông lượng lưu trữ phụ thuộc vào loại lưu trữ, với tôi có thể nhận được khoảng ~ 80% lưu lượng lưu trữ với lưu trữ cục bộ, nhưng đối với NFS 1Gbps thì gần 100% vì mạng bị nghẽn ở đây. Không thể nói về các số liệu khác,

Những con số này rất gần đúng và nó phụ thuộc nhiều vào loại tải, phần cứng, mạng của bạn. Nó thậm chí còn khó khăn hơn khi bạn chạy nhiều khối lượng công việc trên máy chủ. Nhưng điều tôi muốn nói ở đây là trong điều kiện lý tưởng, bạn sẽ có thể đạt gần 90% hiệu suất bản địa.

Cũng từ kinh nghiệm của tôi, vấn đề lớn hơn nhiều đối với các ứng dụng hiệu suất cao là độ trễ và nó đặc biệt đúng với các ứng dụng máy chủ của khách hàng. Chúng tôi có một công cụ tính toán nhận yêu cầu từ hơn 30 khách hàng, thực hiện các tính toán ngắn và trả về kết quả. Trên kim loại trần, nó thường đẩy CPU lên 100% nhưng cùng một máy chủ trên VMware chỉ có thể tải CPU tới 60-80% và điều này chủ yếu là do độ trễ trong việc xử lý các yêu cầu / trả lời.


Tôi có thể nói từ kinh nghiệm rằng việc bão hòa một liên kết 10GbE với một VM là rất khó. Chúng tôi đã sử dụng VMWare FT, có thể dễ dàng bão hòa một liên kết 1Gbps trên 10Gbe và nó đã không tiến gần đến việc bão hòa nó.
Mark Henderson

0

Tôi đã không đi sâu vào hiệu suất của các nguyên thủy cơ bản như chuyển đổi ngữ cảnh và hoạt động nguyên tử, nhưng đây là kết quả của tôi về một thử nghiệm vũ lực mà tôi đã thực hiện gần đây với các nhà ảo thuật khác nhau. Nó sẽ là dấu hiệu cho thấy những gì bạn có thể mong đợi nếu bạn bị giới hạn băng thông CPU và RAM.

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/


2
Thật tuyệt khi bạn đã có một số thông tin cho Xen và KVM ... Nhưng còn hai Hypervisor phổ biến nhất thì sao?! Họ hoàn toàn mất tích. Và bạn đã bao gồm một số Hypervisor Loại 2, SysAdmin sẽ không sử dụng nó để sản xuất.
Chris S

Xuống bình chọn. Liên kết đã chết.
Tim Duncklee
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.