Đúng.
Bạn chắc chắn phải luôn luôn kích hoạt trao đổi, ngoại trừ nếu có một lý do rất hấp dẫn, cấm (như, không có đĩa nào cả, hoặc chỉ có đĩa mạng). Bạn có nên trao đổi theo thứ tự các kích thước lố bịch thường được đề xuất (chẳng hạn như, gấp đôi dung lượng RAM) không? À, không .
Lý do là hoán đổi không chỉ hữu ích khi các ứng dụng của bạn tiêu thụ nhiều bộ nhớ hơn so với RAM vật lý (thực tế, trong trường hợp đó, hoán đổi hoàn toàn không hữu ích vì nó ảnh hưởng nghiêm trọng đến hiệu suất). Ưu đãi chính cho việc hoán đổi hiện nay không phải là biến 16GiB RAM thành 32 GiB một cách kỳ diệu, mà là sử dụng hiệu quả hơn RAM đã cài đặt, có sẵn.
Trên một máy tính hiện đại, RAM không được sử dụng. RAM không sử dụng là thứ mà bạn có thể không mua và tiết kiệm tiền thay vào đó. Do đó, bất cứ thứ gì bạn tải hoặc bất cứ thứ gì được ánh xạ bộ nhớ, bất cứ thứ gì có thể được sử dụng lại bởi bất cứ ai sau đó (bị giới hạn bởi các ràng buộc bảo mật) đều được lưu vào bộ nhớ cache. Rất nhanh sau khi máy khởi động, tất cả RAM vật lý sẽ được sử dụng cho mục đích gì đó .
Bất cứ khi nào bạn yêu cầu một trang bộ nhớ mới từ hệ điều hành, trình quản lý bộ nhớ phải đưa ra quyết định có học thức:
- Lọc một trang khỏi bộ đệm bộ đệm
- Lọc một trang khỏi ánh xạ (hiệu quả giống như # 1, trên hầu hết các hệ thống)
- Di chuyển một trang không được truy cập trong một thời gian dài - tốt nhất là không bao giờ - để trao đổi (thực tế điều này thậm chí có thể xảy ra một cách chủ động, không nhất thiết là vào thời điểm cuối cùng)
- Giết quá trình của bạn hoặc giết một quá trình ngẫu nhiên (OOM)
- Hạt nhân hoảng loạn
Tùy chọn # 4 và # 5 rất không mong muốn và sẽ chỉ xảy ra nếu hệ điều hành hoàn toàn không có lựa chọn nào khác. Tùy chọn # 1 và # 2 có nghĩa là bạn vứt bỏ thứ gì đó mà bạn có thể sẽ cần lại sớm. Điều này tác động tiêu cực đến hiệu suất.
Tùy chọn # 3 có nghĩa là bạn di chuyển thứ gì đó mà bạn (có thể) không cần bất kỳ lúc nào vào bộ nhớ chậm. Điều đó tốt bởi vì bây giờ thứ gì đó bạn cần có thể sử dụng RAM nhanh.
Bằng cách loại bỏ tùy chọn # 3, bạn đã giới hạn hiệu quả hệ điều hành để thực hiện # 1 hoặc # 2. Tải lại một trang từ đĩa cũng giống như tải lại nó từ trao đổi, ngoại trừ việc phải tải lại từ trao đổi thường ít có khả năng (do đưa ra quyết định phân trang phù hợp).
Nói cách khác, bằng cách vô hiệu hóa trao đổi, bạn không thu được gì, nhưng bạn giới hạn số lượng tùy chọn hữu ích của hệ điều hành trong việc xử lý yêu cầu bộ nhớ. Điều này có thể không , nhưng rất có thể là một bất lợi (và sẽ không bao giờ là một lợi thế).
[BIÊN TẬP]
Người đọc cẩn thận của mmap
trang web , cụ thể là mô tả về MAP_NORESERVE
, sẽ nhận thấy một lý do chính đáng khác tại sao trao đổi là một phần cần thiết ngay cả trên một hệ thống có bộ nhớ vật lý "đủ":
"Khi không gian trao đổi không được bảo lưu, người ta có thể nhận SIGSEGV khi ghi nếu không có bộ nhớ vật lý."
- Đợi một lát, điều đó có nghĩa là gì?
Nếu bạn ánh xạ một tệp, bạn có thể truy cập trực tiếp vào nội dung của tệp như thể tệp đó bằng cách nào đó, bằng phép thuật, trong không gian địa chỉ chương trình của bạn. Để truy cập chỉ đọc, về nguyên tắc , hệ điều hành cần nhiều hơn một trang bộ nhớ vật lý mà nó có thể sao lưu với các dữ liệu khác nhau mỗi khi bạn truy cập một trang ảo khác (vì lý do hiệu quả, tất nhiên đó không phải là việc đã làm, nhưng về nguyên tắc, bạn có thể truy cập dữ liệu trị giá terabyte với một trang bộ nhớ vật lý). Bây giờ nếu bạn cũng vậyghi vào một ánh xạ tập tin? Trong trường hợp này, hệ điều hành phải có một trang vật lý - hoặc không gian hoán đổi - sẵn sàng cho mọi trang được viết. Không có cách nào khác để giữ dữ liệu xung quanh cho đến khi quá trình viết lại các trang bẩn đã hoàn thành công việc của nó (có thể là vài giây). Vì lý do này, hệ điều hành dự trữ (nhưng không nhất thiết phải cam kết) trao đổi không gian, vì vậy trong trường hợp bạn đang viết vào bản đồ trong khi không có trang vật lý nào không được sử dụng (đó là điều hoàn toàn có thể và điều kiện bình thường), bạn ' Tái đảm bảo rằng nó sẽ vẫn hoạt động.
Bây giờ nếu không có trao đổi thì sao? Điều đó có nghĩa là không thể trao đổi (duh!) Và điều này có nghĩa là ngay khi không còn trang vật lý miễn phí nào và bạn đang viết lên một trang, bạn sẽ nhận được một bất ngờ thú vị ở dạng nhận được quá trình của bạn một lỗi phân khúc, và có thể bị giết.
[/BIÊN TẬP]
Tuy nhiên, khuyến nghị truyền thống về việc thực hiện trao đổi gấp đôi kích thước của RAM là vô lý. Mặc dù dung lượng đĩa là rẻ, nhưng sẽ không có ý nghĩa gì khi gán nhiều trao đổi đó. Lãng phí thứ gì đó rẻ tiền vẫn còn lãng phí và bạn hoàn toàn không muốn liên tục hoán đổi trong và ngoài bộ làm việc với kích thước vài trăm megabyte (hoặc lớn hơn).
Không có kích thước hoán đổi "chính xác" duy nhất (có nhiều kích thước "chính xác" như có người dùng và ý kiến). Tôi thường chỉ định 512MiB cố định, bất kể kích thước RAM, hoạt động rất tốt đối với tôi. Lý do đằng sau đó là 512MiB là thứ mà ngày nay bạn luôn có thể mua được, ngay cả trên một đĩa nhỏ. Mặt khác, thêm một vài gigabyte trao đổi là không tốt hơn. Bạn sẽ không sử dụng chúng, trừ khi có gì đó không ổn.
Thậm chí trên một SSD, hoán đổi là đơn đặt hàng của cường độ chậm hơn so với RAM (do băng thông xe buýt và độ trễ), và trong khi nó là rất có thể chấp nhận để di chuyển một cái gì đó để trao đổi mà có lẽ sẽ không cần thiết nữa (tức là nhiều khả năng bạn sẽ không được hoán đổi nó một lần nữa, để nhóm trang có sẵn của bạn được mở rộng miễn phí một cách hiệu quả), nếu bạn thực sự cần một lượng trao đổi đáng kể (nghĩa là bạn có một ứng dụng sử dụng ví dụ như tập dữ liệu 50GiB), bạn sẽ bị mất khá nhiều.
Khi máy tính của bạn bắt đầu hoán đổi các trang có giá trị hàng gigabyte, mọi thứ sẽ chuyển sang thu thập dữ liệu. Vì vậy, đối với hầu hết mọi người (bao gồm cả tôi), đây không phải là một lựa chọn và việc trao đổi nhiều như vậy là vô nghĩa.