Lõi CPU ảo so với luồng


8

Chúng tôi đã có một hệ thống máy chủ KVM trên Ubuntu 9.10 với CPU Xeon lõi tứ mới hơn với khả năng siêu phân luồng. Như chi tiết trên trang sản phẩm của Intel , bộ xử lý có 4 lõi nhưng 8 luồng. / Proc / cpuinfo và htop đều liệt kê 8 bộ xử lý, mặc dù mỗi bộ xử lý 4 lõi trong cpuinfo. KVM / QEMU cũng báo cáo 8 VCPU có sẵn để gán cho khách.

Câu hỏi của tôi là khi tôi phân bổ VCPU cho khách VM, tôi nên phân bổ mỗi lõi hoặc mỗi luồng? Vì KVM / QEMU báo cáo máy chủ có 8 VCPU để phân bổ, tôi có nên tiếp tục và đặt một khách để sử dụng 4 CPU mà trước đây tôi đã đặt nó để sử dụng 2 (giả sử có 4 VCPU khả dụng)? Tôi muốn tận dụng tối đa phần cứng máy chủ mà không cần phân bổ quá mức.

Cập nhật: Câu trả lời của Chopper3 chắc chắn là cách tiếp cận đúng. Tuy nhiên, tôi vẫn muốn nghe từ bất kỳ chuyên gia phần cứng nào ngoài kia, những người có thể làm sáng tỏ các khía cạnh hiệu suất của các luồng so với lõi ... bất cứ ai?

Câu trả lời:


8

Đặt số lượng vCPU thấp nhất mà máy chủ của bạn cần để thực hiện chức năng của chúng, không phân bổ quá mức cho chúng hoặc bạn có thể dễ dàng làm chậm máy ảo của mình.


1
Đây dường như là một cách tiếp cận khôn ngoan. Tuy nhiên, tôi tò mò về cách phân bổ VCPU cho mỗi luồng thay vì mỗi lõi ảnh hưởng đến hiệu suất. Nhưng tôi đã thấy một số điều rất tồi tệ có thể xảy ra do phân bổ quá mức và sử dụng cùng số lượng VCPU như trong một máy chủ không siêu phân luồng dường như xử lý tải đầy đủ cho khách, vì vậy tôi sẽ để yên một mình và có kế hoạch thử nghiệm trên một hộp không sản xuất đôi khi.
nedm

1
+1, Câu trả lời cũng phụ thuộc vào khối lượng công việc của bạn. Đối với các máy ảo bị ràng buộc nhiều bởi CPU, hãy tính chúng là lấy toàn bộ lõi, đối với các máy ảo không hoạt động hoặc bị ràng buộc IO sẽ tính chúng là lấy một luồng. Nhưng nói chung, luôn luôn phân bổ ít nhất có thể và bạn sẽ tránh được những cơn đau đầu lớn.
Chris S

1
Mặc dù tôi đồng ý với cách tiếp cận tối giản, KVM không phải là VMWare theo nghĩa này. Không có lịch trình băng đảng có nghĩa là nhiều vCPUs hơn cho mỗi VM có thể được sử dụng một cách vô hại
dyasny

5

Thông thường, HT hoạt động tốt với khối lượng công việc nặng hơn trên IO - CPU có thể lên lịch trong nhiều tác vụ xử lý hơn từ hàng đợi của CPU ảo khác trong khi CPU ảo đầu tiên chờ trên IO. Thực sự tất cả các hệ thống con HT giúp bạn chuyển đổi ngữ cảnh được tăng tốc phần cứng - đó là mẫu khối lượng công việc cũng được sử dụng khi chuyển đổi giữa các máy ảo. Vì vậy, HT sẽ (thường) giảm độ chậm một chút khi bạn có nhiều VM hơn lõi, với điều kiện mỗi VM có một lõi ảo.

Việc gán nhiều vCPU cho VM có thể cải thiện hiệu suất nếu các ứng dụng trong VM được viết để phân luồng, nhưng điều đó cũng khiến cuộc sống của trình ảo hóa trở nên khó khăn hơn; nó phải phân bổ thời gian trên 2 hoặc 4 CPU cùng một lúc - vì vậy nếu bạn có CPU lõi tứ và VM bốn vCPU, chỉ một VM có thể được lên lịch trong khoảng thời gian đó (trong khi nó có thể chạy 4 VM vCPU khác nhau một lần).


@Chris, @ techieb0y: Cảm ơn, đây chính xác là loại hiểu biết mà tôi đang tìm kiếm.
nedm

Điều này là không đúng sự thật. Khi một VM có quad vCPUs cần lên lịch cho một lõi v, đây là thứ được lên lịch trên máy chủ, không phải cả 4 lõi. Ít nhất đây là trường hợp của KVM (Tôi biết cách tiếp cận của vmware kém hiệu quả hơn, vì họ thực hiện gangschedending)
dyasny

5

Điều này là khá khó khăn. Tùy thuộc vào tải, HT có thể tăng hiệu suất ~ 30% hoặc giảm nó. Thông thường tôi khuyên không nên phân bổ nhiều vCPU hơn số lõi của bạn, cho một VM, nhưng nếu VM khá nhàn rỗi (và tất nhiên, một VM như vậy sẽ không thực sự cần quá nhiều CPU), nó có thể được cung cấp cho nhiều vCPUs khi bạn có chủ đề. Bạn không thực sự muốn cung cấp cho một VM nhiều vCPU hơn số lõi có thể lập lịch biểu là những gì tôi đang làm. Và trong mọi trường hợp, lời khuyên của @ Chopper3 là đúng - đừng cung cấp cho VM nhiều CPU v hơn so với yêu cầu hoàn toàn.

Vì vậy, tùy thuộc vào mức độ tải và mức độ quan trọng của máy ảo của bạn, bạn hoàn toàn không phân bổ, bám vào số lượng lõi vật lý hoặc tăng cao như số lượng luồng trên mỗi VM.

Bây giờ, đi vào câu hỏi của HT, nói chung là một điều tốt, đặc biệt là khi bạn cam kết nhiều vCPU cho máy ảo của mình hơn là có lõi vật lý hoặc thậm chí là các luồng, bởi vì nó giúp trình lập lịch trình Linux dễ dàng lên lịch cho các vCPU đó.

Một điều cuối cùng, với kvm, một vCPU được gán cho VM chỉ là một quá trình trên máy chủ, được lên lịch bởi bộ lập lịch Linux, vì vậy tất cả các tối ưu hóa thông thường bạn có thể thực hiện ở đây dễ dàng áp dụng. Hơn nữa, cài đặt lõi / ổ cắm chỉ là cách quá trình này sẽ được hiển thị cho HĐH khách của VM, trên máy chủ vẫn chỉ là một quá trình, bất kể VM nhìn thấy nó như thế nào.


2

Tôi nghĩ để giải thích câu trả lời của Chopper3: nếu các hệ thống chủ yếu là cpu-idle, đừng gán một bó vcpu, nếu chúng có cường độ cpu, hãy hết sức cẩn thận để không tổng thể. Bạn sẽ có thể phân bổ tổng cộng 8 vCPU mà không cần tranh chấp. Bạn có thể phân bổ tổng thể, nhưng nếu có, hãy đảm bảo không có một khách nào, đặc biệt là một khách sử dụng nhiều CPU, có 8 vcpu, hoặc bạn sẽ có sự tranh chấp. Tôi không biết cơ chế lập lịch KVM cụ thể hơn thế.

Trên đây là dựa trên sự hiểu biết sau đây về vCPU so với CPU được ghim, nhưng cũng có giả định rằng KVM sẽ cho phép một khách (hoặc nhiều khách) hog tất cả CPU thực tế từ những người khác nếu bạn phân bổ đủ (/)) đủ luồng. vCPU ~ luồng máy chủ, CPU khách CPU = lõi máy chủ, CPU khách (Không được chơi với vCPU hỗn hợp và CPU được ghim trên cùng một khách, vì tôi không có Hyperthreading.)


1
vCPU được ghim chỉ là một quá trình CPU ảo được chỉ định để chỉ chạy trên một lõi cụ thể (hoặc một tập hợp các lõi). Nếu bạn không tổng hợp và muốn đảm bảo các máy ảo không tranh giành thời gian CPU của cùng một lõi, bạn có thể ghim chúng vào các lõi khác nhau. Đây cũng là một cách để thực hiện ghim NUMA, mặc dù hiện tại bạn có thể làm điều đó trực tiếp
dyasny
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.