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'.
+1, nhưng, "(cẩn thận, nhưng thận trọng)"? Ý anh là gì? thực tế là đồng nghĩa ... –
Đã chỉnh sửa để giải thích :) –
+ 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