Liên kết gốc:https://www.coolapk.com/…
— Trong các bài đăng khác nhau, chúng ta thường thấy những bình luận như, "Việc sử dụng nhiều bộ nhớ hơn là điều bình thường; bộ nhớ là để sử dụng. Tại sao bạn còn lại quá nhiều bộ nhớ trong việc sắp xếp hợp lý?" Đây là nhận xét của anh ấy. Những tuyên bố này ít nhiều thiếu sự chặt chẽ. Dưới đây, tôi sẽ cố gắng sử dụng một mô tả đơn giản hơn để cho bạn cảm nhận về bản thânĐiện thoại di động的Quản lý bộ nhớ(Chủ yếu là bộ nhớ ảo) Tôi có hiểu biết cơ bản, và đây là lần đầu tiên tôi viết cho một người mớiKhoa học phổ biếnNếu có bất kỳ sai sót nào, vui lòng chỉ ra chúng trong phần bình luận
————— đường phân chia—————
Lưu ý: Tất cả "bộ nhớ" được đề cập trong bài viết này đề cập đến những gì mọi người thường gọi là "bộ nhớ đang chạy", tức là "RAM", không phải dung lượng lưu trữ!
————— đường phân chia—————
Đầu tiên, chúng ta hãy tìm hiểu một số khái niệm và thuật ngữ kỹ thuật
1. Bộ nhớ ảo:
Bộ nhớ ảo là một loại quản lý bộ nhớ thường được sử dụng trong các hệ điều hành hiện đạiCông nghệHiện nay, phương pháp thường được sử dụng là quản lý bộ nhớ ảo dựa trên trang, dựa trên các trang (thường là4KB) Quản lý việc phân bổ, tái chế và hoán đổi bộ nhớ ở độ chi tiết tối thiểu.
2.SWAP:
SWAP là một phần của công nghệ bộ nhớ ảo, phân chia không gian trên ổ cứng để hoán đổi các trang bộ nhớ — nói một cách đơn giản, di chuyển dữ liệu từ bộ nhớ sang ổ cứng để giải phóng bộ nhớ vật lý. Windows cũng có một tính năng tương tự được gọi là "Tệp phân trang". Nhưng không giống như Linux, Windows phụ thuộc nhiều vào các tệp được phân trang và việc tắt nó sẽ gây ra điều đóVấn đề lớn, Để biết chi tiết, hãy xem chương bổ sung ở cuối bài viết này.
3.ZRAM:
ZRAM là một triển khai khác của SWAP. Thay vì sử dụng dung lượng đĩa cứng, nó trực tiếp phân vùng không gian bộ nhớ để hoán đổi các trang bộ nhớ, sử dụng các thuật toán nén như LZ4 / ZSTD để nén dữ liệu bộ nhớ nhằm giải phóng bộ nhớ vật lý.
4.ZRAM Writeback
ZRAM Writeback là một phần mở rộng của ZRAM. Giống như SWAP, nó tạo các tệp hoán đổi trên không gian ổ cứng để hoán đổi các trang bộ nhớ. Sự khác biệt là ZRAM Writeback trao đổi dữ liệu bộ nhớ nén. Logic điều khiển ghi chạy ở lớp người dùng chứ không phải hạt nhân và chiến lược cụ thể được xác định bởi nhà cung cấp hệ thống, vì vậy bài viết này sẽ không thảo luận về nó.
5. Tái chế trực tiếp và tái chế không đồng bộ
Có hai loại thu hồi bộ nhớ: thu thập không đồng bộ chạy trên luồng nền và không ảnh hưởng đến quá trình hiện tại, ít ảnh hưởng đến hiệu suất và độ mượt mà, nhưng tốc độ thu thập chậm; Cải tạo trực tiếp diễn ra nhanh chóng nhưng chặn quá trình hiện tại, dẫn đến giao diện phần mềm bị đóng băng trong một thời gian ngắn (thường rất ngắn), ảnh hưởng đáng kể đến hiệu suất và độ mượt mà.
————— đường phân chia—————
Đầu tiên, hãy trả lời câu hỏi trong tiêu đề: "Bạn sử dụng càng nhiều bộ nhớ thì càng tốt?" Tuyên bố này có đúng không? Có, nhưng không hoàn toàn.
Bộ nhớ thực sự được sử dụng, nhưng điều quan trọng cần biết là bộ nhớ không chỉ được sử dụng bởi hệ điều hành và phần mềm người dùng; một yếu tố chính khác là bộ nhớ đệm tệp. Hầu hết tất cả các hệ điều hành đều có cơ chế bộ nhớ đệm tệp. Các tệp được đọc từ ổ cứng hoặc bộ nhớ flash được lưu trong bộ nhớ, vì vậy lần tới khi bạn gọi bộ nhớ đệm tệp trực tiếp mà không cần đọc từ ổ cứng/flash để tăng tốc quá trình. Khi bộ nhớ không đủ, bộ nhớ đệm tệp có thể nhanh chóng được giải phóng để phân bổ, vì vậy cả bộ nhớ được khôi phục nhanh và bộ nhớ trống đều được hạt nhân coi là "bộ nhớ khả dụng". Nhưng những gì bạn thấy trong giao diện phụ trợ hệ thống và các phần mềm khác nhau (chẳng hạn như DEV Check) không phải là "bộ nhớ trống", mà là "bộ nhớ khả dụng" được tính toán bởi hạt nhân hoặc các thuật toán riêng của phần mềm.
Như trong hình, hạt nhân nằm trong memiTrong NFO, "bộ nhớ khả dụng" ≠ "bộ nhớ trống": "bộ nhớ trống" đề cập đến bộ nhớ chưa được phân bổ không thực sự bị chiếm bởi bất kỳ quy trình hoặc tệp nào, trong khi "bộ nhớ khả dụng" đề cập đến bộ nhớ có thể được phân bổ (kích thước của nó là ước tính, chủ yếu được xác định bởi phần bộ nhớ đệm tệp và bộ nhớ trống phía trên hình mờ thấp và các mục bộ nhớ khác có thể được khôi phục nhanh chóng)

Nguồn dữ liệu: /proc/meminfo
Vì vậy, ngay cả khi bạn thấy nhiều bộ nhớ còn lại trong nền hệ thống hoặc trong các ứng dụng khác nhau, điều đó không có nghĩa là bộ nhớ đang được sử dụng đầy đủ. Thay vào đó, họ đã hợp lý hóa nóTối ưu hóaĐối với những người đó, như tôi, tôi đang theo đuổi việc giảm mức sử dụng bộ nhớ của chính hệ thống, để có thể giải phóng nhiều bộ nhớ hơn cho người dùngỨng dụngĐiều này không mâu thuẫn với quan điểm cho rằng "sử dụng nhiều bộ nhớ hơn là bình thường; bộ nhớ là để sử dụng".
————— đường phân chia—————
Nâng caoHướng dẫn- Kiểm soát tái chế bộ nhớ và các sáng kiến ZRAM:
Sở hữuROOTBạn có thể sửa đổi các thông số hạt nhân bên dưới để kiểm soát hoạt động thu hồi bộ nhớ và ZRAM.
1. vm.watermark_scale_factor:
Kiểm soát khoảng cách giữa các dòng mực nước bộ nhớ, với phạm vi điều chỉnh từ 1 ~ 1000 (tương ứng với 0,01% đến 10% tổng kích thước bộ nhớ). Nếu giá trị quá thấp, nó sẽ thường xuyên kích hoạt tái chế trực tiếpĐộ trễNếu giá trị quá lớn, nó sẽ lãng phí bộ nhớ. Bạn nên đặt nó thành 100 (1% tổng bộ nhớ).
Hạt nhân xác định ba dòng hình mờ: tối thiểu/thấp/cao. Khi bộ nhớ trống (lưu ý: "bộ nhớ trống" thay vì "bộ nhớ khả dụng") giảm xuống dưới hình mờ thấp, hạt nhân sẽ đánh thức kswapd để thu hồi bộ nhớ không đồng bộ (hoán đổi dữ liệu sang ZRAM/SWAP và thu hồi bộ nhớ đệm tệp) cho đến khi bộ nhớ trống vượt quá hình mờ cao; Khi bộ nhớ nhàn rỗi giảm xuống dưới mực nước tối thiểu, khôi phục trực tiếp sẽ được kích hoạt. Giá trị của dòng mực nước tối thiểu được nhân tính toán dựa trên tổng kích thước bộ nhớ và tính toán vm.min_free_kbytes. Không nên sửa đổi thông số này và giữ nguyên giá trị mặc định.
2. vm.extra_free_kbytes:
Bộ nhớ dự trữ bổ sung sẽ có giá trị đặt giữa hình mờ tối thiểu và thấp. Nếu giá trị quá thấp, nó sẽ thường kích hoạt thu hồi trực tiếp và gây ra độ trễ; nếu quá lớn, nó sẽ lãng phí bộ nhớ. Bạn nên đặt nó thành 1~2% tổng kích thước bộ nhớ, được đo bằng KB.
3. vm.swappiness:
Khi bộ nhớ hạt nhân không đủ (dưới ngưỡng thấp), độ lệch giữa trang hoán đổi và ZRAM / SWAP và bộ nhớ đệm tệp được khôi phục nằm trong khoảng từ 0 ~ 200 và từ 0 ~ 100 đối với các hạt nhân cũ hơn. Giá trị càng nhỏ, càng có nhiều khả năng thu thập bộ nhớ đệm tệp; giá trị càng lớn, càng có nhiều khả năng sử dụng ZRAM/SWAP.
Các thông số hạt nhân trên có sẵnSceneBạn cũng có thể sử dụng đặc quyền root để thực hiện các lệnh sau để sửa đổi nó:
echo 100 >/proc/sys/vm/watermark_scale_factor
echo 131072 >/proc/sys/vm/extra_free_kbytes
echo 100 >/proc/sys/vm/swappiness

– Nếu bạn muốn giữ nhiều backend hơn, bạn có thể giảm giá trị của extra_free_kbytes và watermark_scale_factor và tăng giá trị swappiness một cách vừa phải.
– Nếu bạn muốn độ mượt mà cao hơn, bạn có thể tăng giá trị extra_free_kbytes và watermark_scale_factor, đồng thời điều chỉnh độ hoán đổi thành giá trị cân bằng hơn.
- Nếu bạn muốn cả hai, thì hãy mua một chiếc điện thoại có bộ nhớ lớn hơn
————— đường phân chia—————
LMK và giết người ở hậu trường:
Bắt đầu từ Android 9, Google bắt đầu từ bỏ nhân LMK tích hợp để chuyển sang LMKD, chạy như một daemon cho hệ thống. Do đó, việc giết ứng dụng nền và bản thân hạt nhân không liên quan nhiều đến cách tiếp cận của mỗi nhà sản xuấtCấu hìnhLMKD/Giới thiệu các cơ chế xóa nền khác. Về điều nàyMIUINgoài việc định cấu hình LMKD, còn có mã giết nền trong cả "Pin và Hiệu suất" và "Khung hệ thống khung". Nếu bạn không muốn sử dụng cơ chế ngắt nền bổ sung do nhà sản xuất giới thiệu và muốn tự định cấu hình LMKD, thì đây là một lựa chọn tốtLSPosedMô-đun "AppRetention" chặn cơ chế loại bỏ kết thúc nền của nhà cung cấp.

Sau đó, định cấu hình LMKD theo tài liệu của Google:Xem liên kết

————— đường phân chia—————
Phần bổ sung - Kiến thức bổ sung về Pagefile.sys tệp phân trang Windows và phân bổ địa chỉ bộ nhớ ảo:
Windows sử dụng phân bổ bộ nhớ hai giai đoạn (dự trữ + cam kết) và trong giai đoạn cam kết, điều cần thiết là đảm bảo ánh xạ các địa chỉ vật lý (bộ nhớ vật lý hoặc tệp phân trang). Các tệp phân trang là một phần của giới hạn gửi của hệ thống và trực tiếp xác định tổng dung lượng bộ nhớ ảo mà hệ thống có thể hỗ trợ (trên trang thẻ nhớ Windows Task Manager, có một mục dữ liệu được gọi là "Cam kết"; phía bên trái của dấu gạch chéo là tổng của tất cả các kích thước bộ nhớ được yêu cầu của chương trình và phía bên phải là tổng kích thước bộ nhớ ảo, với các giá trị = kích thước bộ nhớ vật lý + kích thước tệp phân trang, trong đó tệp phân trang được phân vùng động bởi hệ thống).

Thông tin bộ nhớ cho Trình quản lý tác vụ Windows
Bạn có thể nghĩ đơn giản rằng khi một chương trình cho phép một lượng bộ nhớ nhất định trên Windows, hệ thống sẽ phân bổ kích thước địa chỉ vật lý tương ứng cho chương trình. Sau khi phân bổ, các chương trình khác không thể sử dụng dung lượng bộ nhớ này và bộ nhớ do chương trình phân bổ thường cao hơn những gì nó thực sự cần. Do đó, khi đóng các tệp phân trang, có thể có trường hợp còn lại nhiều bộ nhớ vật lý, nhưng mở một chương trình mới vẫn nhắc rằng bộ nhớ không đủ. Tuy nhiên, Linux không gặp vấn đề này. Linux sử dụng chiến lược phân bổ trễ, chỉ phân bổ địa chỉ bộ nhớ vật lý khi các quá trình thực sự truy cập bộ nhớ. Đối với bộ nhớ được yêu cầu bởi chương trình, Linux đã phân bổ các địa chỉ ảo "thực" và giới hạn của địa chỉ bộ nhớ ảo được xác định bởi các tham số hạt nhân "vm.overcommit_memory". Trên điện thoại Android mà chúng tôi sử dụng, giới hạn phân bổ bộ nhớ ảo là "overcommit_memory" Giá trị mặc định là 1, bỏ qua giới hạn bộ nhớ ảo và cho phép phân bổ tất cả bộ nhớ vật lý.
Trên trang quản lý SWAP của Scene, bạn có thể thấy rằng tất cả các quy trình trên điện thoại của tôi đã yêu cầu bộ nhớ lên đến 208GB! Nhưng bộ nhớ vật lý không được sử dụng hết, vì vậy tôi vẫn có thể mở phần mềm mới.

Về lý do tại sao Windows không thay đổi cơ chế tương tự như Linux, tôi không biết, tôi chỉ có thể nghĩ rằng đó là vì Windows mang quá nhiều gánh nặng lịch sử (tương ứng với khả năng tương thích huyền thoại của WIN).
![[Đọc mã nguồn mở] Tháng Một 2024 ≈ 400 biên soạn và cập nhật nguồn sách được chỉnh sửa cẩn thận - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/img/af867764c3780f0b7da88376fca7bf92.png)
![[Đọc mã nguồn mở] Tháng Mười Một 950+ hiệu đính cẩn thận biên soạn và cập nhật nguồn sách - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/2023/02/Screenshot_20230222-1001582.png)


![[Đọc mã nguồn mở] Cập nhật nguồn sách tháng 10 năm 1300 - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/img/1eeb6ae31cde88ab39faa2f19651638d.jpeg)
![[Phiên bản thành viên VMOS PRO 2.9.6] - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/img/c303a7a50d3ebfa235cc380190db2980.png)
![[Đọc mã nguồn mở] Tháng Mười Một 950+ hiệu đính cẩn thận biên soạn và cập nhật nguồn sách - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/2023/02/Screenshot_20230222-1001582-1024x593.png)
Chưa có bình luận nào