2009-03-05 37 views
12

Khi bạn biết rằng phần mềm của bạn (không phải là trình điều khiển, không phải là một phần của os, chỉ là một ứng dụng) sẽ chạy chủ yếu trong môi trường ảo hóa. Hoặc bất kỳ hướng dẫn cho những gì bạn nên và không nên làm gì?Phần mềm tối ưu hóa cho các máy ảo

Đây không phải là khoảng 0.0x% hiệu suất nhưng có lẽ, chỉ có thể có những điều đơn giản sẽ cải thiện hiệu suất đáng kể hoặc những thứ có vẻ đơn giản nhưng được biết là tai hại trong môi trường ảo hóa. Ví dụ, cho phép CONFIG_PARAVIRT trong một bản xây dựng hạt nhân được thực hiện dễ dàng và có thể tăng hiệu suất rất nhiều. Bây giờ tôi đang tìm những thứ tương tự cho các ứng dụng, nếu có.

Trong trường hợp của tôi, nó sẽ là Mã C++ và có thể là VMWare nhưng tôi muốn giữ câu hỏi là ngôn ngữ/sản phẩm bất khả tri nhất có thể. Tôi tự hỏi nếu có những chiến lược như vậy hoặc nếu điều này sẽ là một sự lãng phí thời gian hoàn toàn - sau khi tất cả các khái niệm về ảo hóa là bạn không phải quan tâm quá nhiều về nó.

Trả lời

3

Lời khuyên duy nhất mà tôi có thể cung cấp cho bạn là sử dụng cẩn thận mlock()/mlockall() .. trong khi tìm kiếm trình điều khiển quả bóng lỗi. Ví dụ, nếu một khách Xen được khởi động với 1GB, sau đó bóng xuống đến 512 MB, nó rất điển hình là miền đặc quyền không nhìn vào bao nhiêu bộ nhớ hạt nhân paravirtualized thực sự hứa hẹn để xử lý (tức là Committed_AS). Trên thực tế, với Xen, trừ khi giá trị này được đặt trên Xenbus, máy chủ đặc quyền không có ý tưởng gì như một quả bóng sẽ làm. Tôi tin rằng điều này cũng trùng với KVM, tùy thuộc vào cách hạt nhân được cấu hình .. nhưng câu hỏi của bạn giả định rằng chúng ta không biết gì về những điều như vậy :)

Vì vậy, bảo vệ các công cụ (hãy cẩn thận, nhưng thận trọng) mà chỉ đơn giản là không thể paged out, luôn luôn chiếm kịch bản 'bầu trời đang rơi'.

Tương tự như vậy, sử dụng posix_fadvise()/posix_madvise() để báo cho hạt nhân PV biết số lượng bạn làm hoặc không cần đệm luôn luôn là một ý tưởng hay.

Ngoài ra, có rất ít điều bạn có thể làm .. vì bạn chỉ đang nói chuyện với hạt nhân paravirtualized, được thiết kế để làm cho các quy trình không biết ảo hóa ngay từ đầu.

Tôi không sử dụng KVM nhiều (chưa), mặc dù tôi dự định sẽ khám phá thêm trong tương lai. Tuy nhiên, 90% nội dung mà tôi đã viết gần đây được thiết kế đặc biệt để chạy trên các khách Xen được paravirtualized. Xin lỗi vì đã được một chút Xen/C trung tâm, nhưng đó là nơi kinh nghiệm của tôi là gì và pv_ops là trong tuyến chính (sớm cũng Xen-0 ops) :)

Tốt câu hỏi, btw :)

Edit:

Khi tôi nói 'cẩn thận nhưng thận trọng', tôi có nghĩa là một bước trên bảo thủ. Nếu chương trình của bạn phân bổ một số cấu trúc công việc mà hầu hết các chức năng cần, hãy khóa nó lại. Nếu bạn phân bổ bộ đệm để đọc các tệp lớn, không khóa chúng .. và hãy nhớ gọi posix_fadvise() để cho hạt nhân biết bạn chỉ định truy cập nó một lần (nếu đó là trường hợp). Ngoài ra, hãy chắc chắn để tư vấn cho hạt nhân về việc bạn sử dụng các tập tin ánh xạ bộ nhớ, đặc biệt là nếu chúng phục vụ để tổ chức đồng thời.

Nói tóm lại, giúp kernel máy chủ của bạn quản lý bộ nhớ, đừng để khối phân bổ quan trọng được ném vào phân trang bẩn, đừng cho rằng chương trình của bạn là quan trọng hơn bất cứ điều gì khác bằng cách khóa tất cả mọi thứ nó phân bổ :)

Xin lỗi vì sự mơ hồ. Cụm từ tốt nhất tôi có thể nghĩ ra là 'cẩn thận, nhưng thận trọng'.

+0

+1, nhưng, "(cẩn thận, nhưng thận trọng)"? Ý anh là gì? thực tế là đồng nghĩa ... –

+0

Đã chỉnh sửa để giải thích :) –

+0

+ 1.addition: "Vì bài viết này (2.6.21) Linux không nhớ POSIX_FADV_DONTNEED lời khuyên cho một tập tin mở. Nó hoạt động khi lời khuyên được đưa ra, và khi nó không thể thực hiện nó quên lời khuyên. Vì vậy, nó là vào bạn để đảm bảo Linux có thể tuân thủ. " – VolkerK

1

Lời khuyên duy nhất của tôi là giữ cho bộ nhớ của bạn và IO sử dụng thấp nếu có thể.

IO trong máy ảo khá chậm so với phần cứng vật lý. Nếu bạn có thể tránh làm nó thì tránh nó.

1

Những thứ chậm trên phần cứng thực thậm chí còn chậm hơn khi hệ thống được ảo hóa. Nó phụ thuộc vào công nghệ ảo hóa đang được sử dụng chậm hơn bao nhiêu.

Đặc biệt tránh mọi thứ yêu cầu I/O với thế giới bên ngoài môi trường ảo. Suy giảm về cách mọi thứ được thiết lập, điều này bao gồm vẽ trên màn hình, trao đổi, và đĩa và mạng I/O. Đó là khoảng một thứ tự giảm tầm quan trọng.

Nếu có thể, giả sử bạn đang viết cho một máy tính mười tuổi. Nếu ứng dụng của bạn sẽ hoạt động trên máy tính để bàn 1999 hoặc máy tính xách tay, nó sẽ hoạt động tốt.

4

Tôi đã tìm thấy tất cả thông tin về I/O.

Máy ảo thường hút cực kỳ kém tại IO. Điều này làm cho những điều khác nhau tồi tệ hơn nhiều so với họ sẽ được trên tin thực sự.

Trao đổi đặc biệt là một kẻ giết người xấu - nó hoàn toàn phá hỏng hiệu suất VM, thậm chí một chút, vì IO quá chậm.

Hầu hết các lần triển khai có một lượng lớn sự tranh chấp IO giữa các máy ảo, tôi đã không nhìn thấy điều này tránh được điều này hoặc xử lý nó một cách hợp lý.

Vì vậy, hãy sử dụng ramdisc cho các tệp tạm thời nếu bạn có thể, nhưng không làm cho nó hoán đổi, bởi vì điều đó thậm chí còn tồi tệ hơn.

+0

IO khi một chương trình được mã hóa theo cách hợp tác với hạt nhân và 2 chạy trên hạt nhân với trình điều khiển PV thích hợp là một vấn đề không phải. Câu hỏi này thực sự mang lại ánh sáng như thế nào một trong những hiểu hạt nhân máy chủ, ảo hóa hay không. Vui lòng thảo luận chi tiết cụ thể về I/O, ngoài 'không làm'. –