Bởi vì hầu hết đều tin rằng trao đổi = xấu và nếu bạn không giảm bớt sự thay đổi, hệ thống sẽ trao đổi khi thực sự không cần thiết. Cả hai điều đó đều không đúng. Mọi người liên kết trao đổi với thời gian mà hệ thống của họ bị sa lầy - tuy nhiên, chủ yếu là hoán đổi vì hệ thống bị sa lầy, không phải là cách khác. Khi hệ thống hoán đổi, nó sẽ cân nhắc chi phí hiệu năng trong quyết định hoán đổi của nó và quyết định rằng không làm như vậy sẽ có một hình phạt tổng thể lớn hơn về hiệu suất hoặc tính ổn định của hệ thống.
Nhìn chung, các thiết lập mặc định dẫn đến hiệu suất tổng thể tốt và ổn định. Tôi khuyên bạn nên để nó ở mặc định. Có nhiều cách để Linux cải thiện việc quản lý bộ nhớ của mình để giải quyết một số trường hợp khó khăn, nhưng nói chung, kiểm soát swappiness không phải là một cách giải quyết tốt - điều chỉnh theo một hướng và bạn có thể khắc phục một vấn đề và tạo ra các vấn đề khác. Nếu có thể, chỉ cần cài đặt thêm RAM vật lý (và để lại một mình swappiness) làm lu mờ tất cả các biện pháp khắc phục khác.
Linux sử dụng RAM như thế nào
Bất kỳ RAM nào không được sử dụng bởi các ứng dụng có thể được sử dụng làm "bộ đệm". Bộ nhớ cache rất quan trọng đối với một hệ thống chạy nhanh, mượt mà, tăng tốc cả đọc và ghi vào đĩa.
Nếu các ứng dụng của bạn tăng mức sử dụng bộ nhớ đến mức chúng đang sử dụng gần như toàn bộ RAM, bộ nhớ cache của bạn sẽ bị thu hẹp và kết quả là các hoạt động trên đĩa trung bình sẽ chậm lại. Ngày nay, không đủ để có hàng chục megabyte hoặc ít hơn cho bộ nhớ cache.
Nếu các ứng dụng tăng bộ nhớ sử dụng hơn nữa - giả sử bạn không có không gian hoán đổi - bạn sẽ không chỉ không có không gian cho bộ nhớ cache mà cuối cùng bạn sẽ hết bộ nhớ và hệ thống của bạn sẽ phải giết các tiến trình đang chạy. Giết quá trình tồi tệ hơn là chậm lại vì nó cung cấp cho bạn một hệ thống không ổn định, không thể đoán trước.
Cách Linux sử dụng trao đổi
Để chống lại cả hai vấn đề này, hệ thống của bạn có thể phân bổ lại một số bộ nhớ ứng dụng ít được sử dụng vào không gian trao đổi trên đĩa của bạn, giải phóng RAM. RAM bổ sung có thể ngăn chặn các quá trình chết do hết bộ nhớ và có thể lấy lại một ít bộ đệm để các hoạt động của đĩa có thể hoạt động trơn tru hơn.
Việc phân bổ lại này không được thực hiện theo một mức cắt nhất định. Bạn không đạt được một tỷ lệ phân bổ nhất định sau đó Linux bắt đầu hoán đổi. Nó có một thuật toán "mờ". Phải mất rất nhiều thứ, điều này có thể được mô tả tốt nhất bằng "có bao nhiêu áp lực để phân bổ bộ nhớ". Nếu có nhiều "áp lực" để phân bổ bộ nhớ mới, thì nó sẽ tăng khả năng một số người sẽ bị tráo đổi để tạo thêm phòng. Nếu có ít "áp lực" hơn thì sẽ giảm những cơ hội này.
Hệ thống của bạn có cài đặt "swappiness" giúp bạn điều chỉnh cách tính "áp lực" này. Nó thường được biểu thị sai là "phần trăm RAM" nhưng thực tế không phải vậy, nó chỉ là một giá trị được sử dụng như một phần của công thức. Các giá trị khoảng 40 đến 60 là các giá trị lành mạnh được đề xuất, 60 được mặc định ngày nay.
Để hệ thống của bạn hoán đổi khi nó phải là một điều rất tốt, ngay cả khi bạn có nhiều RAM. Để hệ thống của bạn hoán đổi nếu nó cần giúp bạn yên tâm rằng nếu bạn từng gặp tình huống bộ nhớ thấp dù chỉ là tạm thời (trong khi chạy một quy trình ngắn sử dụng nhiều bộ nhớ), hệ thống của bạn có cơ hội thứ hai để giữ mọi thứ hoạt động. Nếu bạn đi xa đến mức vô hiệu hóa hoàn toàn việc hoán đổi, thì bạn có nguy cơ bị giết do không thể phân bổ bộ nhớ.
Điều gì đang xảy ra khi hệ thống bị sa lầy và hoán đổi nặng nề?
Hoán đổi là một hoạt động chậm và tốn kém, vì vậy hệ thống sẽ tránh được nó trừ khi nó tính toán rằng sự đánh đổi trong hiệu năng bộ đệm sẽ bù cho tổng thể, hoặc nếu cần thiết để tránh các quá trình tiêu diệt.
Rất nhiều thời gian mọi người sẽ nhìn vào hệ thống của họ đang đập đĩa rất nhiều và sử dụng nhiều không gian hoán đổi và đổ lỗi cho việc hoán đổi cho nó. Đó là cách tiếp cận sai. Nếu việc hoán đổi đã đạt đến mức cực đoan này, điều đó có nghĩa là việc hoán đổi là nỗ lực của hệ thống của bạn để xử lý các vấn đề bộ nhớ thấp, không phải là nguyên nhân của vấn đề và nếu không trao đổi thì quá trình chạy của bạn sẽ chết một cách ngẫu nhiên.
Còn hệ thống máy tính để bàn thì sao? Họ không yêu cầu một cách tiếp cận khác?
Người dùng hệ thống máy tính để bàn thực sự mong muốn hệ thống "cảm thấy phản hồi" để đáp ứng với các hành động do người dùng khởi tạo, chẳng hạn như mở một ứng dụng, đây là loại hành động đôi khi có thể kích hoạt trao đổi do tăng bộ nhớ cần thiết.
Một cách mà một số người cố gắng điều chỉnh điều này là giảm tham số swappiness có thể tăng khả năng chịu đựng của hệ thống đối với các ứng dụng sử dụng hết bộ nhớ và hết dung lượng bộ nhớ cache.
Tuy nhiên, đây chỉ là thay đổi mục tiêu. Ứng dụng đầu tiên bây giờ có thể tải mà không cần thao tác trao đổi, nhưng nó sẽ để lại ít bị chậm hơn cho ứng dụng tiếp theo tải. Việc hoán đổi tương tự có thể chỉ xảy ra sau đó, khi bạn mở ứng dụng tiếp theo. Trong khi đó, hiệu năng hệ thống thấp hơn do kích thước bộ đệm giảm. Do đó, bất kỳ lợi ích nào từ cài đặt swappiness giảm có thể khó đo lường, giảm độ trễ tráo đổi tại một số thời điểm nhưng gây ra hiệu suất chậm khác vào các thời điểm khác. Giảm bớt sự thay đổi một chút có thể là hợp lý nếu bạn biết bạn đang làm gì, nhưng việc giảm nó xuống mức 10% có thể khiến hệ thống chịu đựng được kích thước bộ đệm rất thấp và khiến hệ thống dễ bị trao đổi trong thời gian ngắn.
Vô hiệu hóa hoàn toàn trao đổi nên tránh khi bạn mất bảo vệ bổ sung chống lại các điều kiện hết bộ nhớ có thể khiến các quá trình bị sập hoặc bị giết.
Biện pháp khắc phục hiệu quả nhất cho đến nay là cài đặt thêm RAM nếu bạn có đủ khả năng.
Trao đổi có thể bị vô hiệu hóa trên một hệ thống có nhiều RAM không?
Nếu bạn có nhiều RAM hơn khả năng bạn cần cho các ứng dụng, thì bạn sẽ hiếm khi cần trao đổi. Vô hiệu hóa trao đổi có lẽ sẽ không tạo ra sự khác biệt trong phần lớn thời gian. Nhưng nếu bạn có nhiều RAM, việc bật tính năng trao đổi cũng sẽ không bị phạt vì hệ thống không trao đổi khi không cần thiết.
Các tình huống duy nhất sẽ tạo ra sự khác biệt là trong tình huống khó xảy ra, hệ thống sẽ hết bộ nhớ và do đó hệ thống bộ đệm bị cản trở, và trong tình huống này bạn muốn trao đổi nhiều nhất. Vì vậy, bạn có thể an toàn để trao đổi trên các cài đặt bình thường của nó để yên tâm hơn mà không gây ảnh hưởng xấu khi bạn có nhiều bộ nhớ.
Nhưng làm thế nào có thể trao đổi tăng tốc hệ thống của tôi? Không trao đổi những thứ chậm lại?
Hành động chuyển dữ liệu từ RAM sang trao đổi là một hoạt động chậm, nhưng nó chỉ được thực hiện khi hạt nhân khá chắc chắn lợi ích tổng thể do việc giữ kích thước bộ đệm hợp lý sẽ vượt xa điều này.
Một khi dữ liệu được trao đổi, khi nào nó xuất hiện trở lại?
Bất kỳ phần nào của bộ nhớ sẽ quay trở lại khi trao đổi ngay khi được sử dụng - đọc từ hoặc viết vào. Tuy nhiên, thông thường bộ nhớ được hoán đổi là bộ nhớ không được truy cập trong một thời gian dài và dự kiến sẽ không cần sớm.
Chuyển dữ liệu ra khỏi trao đổi là tốn thời gian như đưa nó vào đó. Nhân của bạn sẽ không xóa dữ liệu khỏi nó nếu không cần thiết. Mặc dù dữ liệu được trao đổi và không được sử dụng, nó để lại nhiều bộ nhớ hơn cho những thứ khác đang được sử dụng và bộ đệm hệ thống nhiều hơn.
Có bất kỳ trường hợp mà giảm swappiness là thích hợp?
Đúng. Nếu bạn đang chạy một máy chủ dành riêng cho một ứng dụng máy chủ cụ thể không được hưởng lợi từ bộ đệm hệ thống. Một số máy chủ cơ sở dữ liệu như máy chủ Oracle, MySQL / MariaDB khuyến nghị trong một số trường hợp giảm độ swappness xuống còn 1 đến 10 vì các công cụ cơ sở dữ liệu này sử dụng bộ nhớ đệm riêng.
Lưu ý rằng điều này chỉ đúng nếu hệ thống của bạn dành riêng cho một tác vụ đó và trong trường hợp MySQL / MariaDB chỉ khi bạn đang sử dụng hoàn toàn InnoDB hoặc XtraDB chứ không phải MyISAM hoặc Aria, v.v.