Khi chúng tôi muốn thiết lập một hệ thống linux, có một gợi ý chung là đặt không gian hoán đổi lớn gấp đôi bộ nhớ vật lý của bạn. Tôi muốn biết tại sao chúng ta cần điều này, và làm thế nào để gợi ý này được thực hiện?
Khi chúng tôi muốn thiết lập một hệ thống linux, có một gợi ý chung là đặt không gian hoán đổi lớn gấp đôi bộ nhớ vật lý của bạn. Tôi muốn biết tại sao chúng ta cần điều này, và làm thế nào để gợi ý này được thực hiện?
Câu trả lời:
Câu trả lời ngắn gọn là "Bạn không cần phải".
Tùy thuộc vào loại nhân / hệ thống, có thể có ý nghĩa đối với kích thước không gian hoán đổi như thế, ví dụ như trong trang điều chỉnh của FreeBSD (7), chúng tôi tìm thấy lý do sau đằng sau kích thước hoán đổi ít nhất gấp 2 lần kích thước bộ nhớ vật lý:
Thông thường, bạn nên kích thước không gian hoán đổi của mình thành khoảng 2 lần bộ nhớ chính cho các hệ thống có ít hơn 2GB RAM hoặc khoảng 1x bộ nhớ chính nếu bạn có nhiều hơn. Tuy nhiên, nếu bạn không có nhiều RAM, bạn thường muốn trao đổi nhiều hơn. Bạn không nên cấu hình bất kỳ ít hơn 256M trao đổi trên một hệ thống và bạn nên ghi nhớ mở rộng bộ nhớ trong tương lai khi định cỡ phân vùng trao đổi. Các thuật toán phân trang VM của kernel được điều chỉnh để hoạt động tốt nhất khi có ít nhất 2 lần trao đổi so với bộ nhớ chính. Cấu hình trao đổi quá ít có thể dẫn đến sự thiếu hiệu quả trong mã quét trang VM cũng như tạo ra các vấn đề sau này nếu bạn thêm bộ nhớ vào máy. Cuối cùng, trên các hệ thống lớn hơn có nhiều đĩa SCSI (hoặc nhiều đĩa IDE hoạt động trên các bộ điều khiển khác nhau), chúng tôi thực sự khuyên bạn nên định cấu hình trao đổi trên mỗi ổ đĩa. Các phân vùng trao đổi trên các ổ đĩa phải có cùng kích thước. Hạt nhân có thể xử lý các kích thước tùy ý nhưng cấu trúc dữ liệu bên trong có quy mô gấp 4 lần phân vùng trao đổi lớn nhất. Giữ các phân vùng trao đổi gần cùng kích thước sẽ cho phép hạt nhân tối ưu hóa không gian trao đổi sọc trên các đĩa N. Đừng lo lắng về việc lạm dụng nó một chút, không gian hoán đổi là ân huệ tiết kiệm của UNIX và ngay cả khi bạn không thường xuyên sử dụng nhiều trao đổi, nó có thể cho bạn thêm thời gian để phục hồi từ chương trình chạy trốn trước khi buộc phải khởi động lại. Giữ các phân vùng trao đổi gần cùng kích thước sẽ cho phép hạt nhân tối ưu hóa không gian trao đổi sọc trên các đĩa N. Đừng lo lắng về việc lạm dụng nó một chút, không gian hoán đổi là ân huệ tiết kiệm của UNIX và ngay cả khi bạn không thường xuyên sử dụng nhiều trao đổi, nó có thể cho bạn thêm thời gian để phục hồi từ chương trình chạy trốn trước khi buộc phải khởi động lại. Giữ các phân vùng trao đổi gần cùng kích thước sẽ cho phép hạt nhân tối ưu hóa không gian trao đổi sọc trên các đĩa N. Đừng lo lắng về việc lạm dụng nó một chút, không gian hoán đổi là ân huệ tiết kiệm của UNIX và ngay cả khi bạn không thường xuyên sử dụng nhiều trao đổi, nó có thể cho bạn thêm thời gian để phục hồi từ chương trình chạy trốn trước khi buộc phải khởi động lại.
Các yếu tố khác có thể quan trọng khi bạn quyết định phân bổ không gian trao đổi bao nhiêu, phân bổ nó ở đâu, v.v. Ví dụ: nếu bạn đang cài đặt một máy chủ lớn với bộ nhớ vật lý 128 GB, có lẽ nên tránh phân bổ trước 256 GB dung lượng đĩa để trao đổi sẽ không bao giờ được sử dụng.
Mặt khác, việc có một số không gian hoán đổi thường giúp có thể lấy các kết xuất kernel (ví dụ như trong Open-, Net- và FreeBSD). Vì vậy, đó là một ý tưởng tốt để có ít nhất đủ không gian hoán đổi để lấy một bãi chứa hạt nhân đầy đủ trong hoảng loạn.
Không có quy tắc tuyệt đối phù hợp với tất cả các trường hợp. Bạn phải đọc về hành vi của hệ thống cụ thể của bạn, tìm hiểu cách thức hoạt động của hệ thống, suy nghĩ về mục đích sử dụng của hệ thống và quyết định kích thước không gian hoán đổi phù hợp nhất với nhu cầu của bạn .
Bạn không cần phải làm gì cả. Các phiên bản cũ của windows sẽ coi mỗi trang của bộ nhớ được phân bổ về cơ bản là một mmap trên tệp hoán đổi, do đó, bạn cần ít nhất tổng kích thước RAM vật lý của mình để trao đổi để nó hữu ích - ngày nay không còn như vậy nữa và không bao giờ là như vậy trường hợp trong Linux, nhưng tin đồn vẫn tồn tại.
Tuy nhiên, có một trường hợp có ít nhất trao đổi nhiều như RAM là mong muốn - ngủ đông. Vì Linux sử dụng tệp hoán đổi để ngủ đông (hay còn gọi là đình chỉ đĩa), bạn cần trao đổi đủ để giữ tất cả dữ liệu trong RAM, cộng với tất cả dữ liệu đã bị tráo đổi (trừ RAM bộ nhớ cache). Đây chỉ là trường hợp cho các máy cần ngủ đông, chẳng hạn như máy tính xách tay, tất nhiên.
Cuối cùng, có quá nhiều trao đổi có thể là một điều xấu , bất chấp những gì người khác có thể nói. Hãy suy nghĩ - nếu bạn có 4G RAM, và trên hết cần thêm 8G trao đổi, bạn có nghĩ rằng hệ thống của bạn sẽ vẫn có thể sử dụng được không, với tất cả việc hoán đổi sang / từ đĩa thì nó đang làm gì? Sẽ tốt hơn nếu quá trình ngốn bộ nhớ bị giết ngay lập tức khi bạn hết bộ nhớ, thay vì toàn bộ hệ thống chậm đến mức không thể sử dụng được khi nó bắt đầu dành toàn bộ thời gian để xử lý dữ liệu trong quá trình trao đổi.
Cách đây rất lâu, có một biến thể unix phổ biến (tôi nghĩ đó là BSD, nhưng tôi không thể tìm thấy tài liệu tham khảo ngay bây giờ) sẽ phân bổ mọi trang bộ nhớ ảo trong không gian trao đổi. Vì vậy, nếu bạn có nhiều trao đổi như RAM, kích thước của bộ nhớ ảo vẫn sẽ bằng với RAM của bạn. Đề xuất thông thường sau đó là có dung lượng trao đổi gấp đôi so với RAM, khiến bộ nhớ ảo lớn gấp đôi RAM.
Các đơn vị hiện đại không hành xử theo cách đó, vì vậy lý do cho quy tắc này đã lỗi thời (tôi nghĩ rằng nó đã lỗi thời vào năm 1992, vì vậy nó không bao giờ phù hợp với Linux). Nhưng kỳ lạ là đủ các quy tắc sống sót. Nếu bạn theo dõi ngay bây giờ, bạn sẽ có bộ nhớ ảo gấp ba lần dung lượng RAM, trong khi mục đích ban đầu là nhận được gấp đôi.
Chỉ vì lý do lịch sử đằng sau quy tắc là sai không có nghĩa là nó ngu ngốc. Dung lượng đĩa đã trở nên rẻ hơn, vì vậy có thể có ý nghĩa để phân bổ trao đổi nhiều hơn. Bạn nên có bao nhiêu trao đổi phụ thuộc rất nhiều vào số lượng RAM bạn có và cách bạn sử dụng nó. Bạn có thể chạy một hệ thống mà không cần trao đổi, nhưng sau đó bạn không có cơ hội chọn chương trình nào để giết nếu RAM của bạn bị đầy và hệ thống có thể chậm hơn (đôi khi sử dụng RAM để lưu trữ bộ nhớ cache và trao đổi bộ nhớ chương trình ngoài). Việc phân bổ quá nhiều trao đổi tốn một lượng RAM nhỏ (đối với cấu trúc dữ liệu kernel) và tất nhiên là không gian đĩa (nhưng ngày nay thường rất bẩn trừ SSD). Có đủ trao đổi để phù hợp với tất cả bộ nhớ ảo của bạn là cần thiết nếu bạn muốn ngủ đông.
Một khuyến nghị cổ xưa dựa trên các giả định về dung lượng bộ nhớ hệ thống điển hình, tốc độ bus bộ nhớ so với tốc độ ổ đĩa và tỷ lệ phần trăm của quá trình thời gian dành cho các trạng thái chờ khác nhau. Tôi nghi ngờ rằng những ngày này bạn muốn có nhiều hơn 1/2 bộ nhớ vật lý trong không gian hoán đổi - chỉ đủ để ngăn chặn việc giết chết OOM ngẫu nhiên khi bạn chạy gần sử dụng bộ nhớ đầy. Nhưng hoàn toàn phụ thuộc vào khối lượng công việc điển hình của bạn, YMMV, v.v.