Mục lục bài viết
Máy vẫn chạy êm khi RAM trống báo còn hơn một gigabyte, nhưng chỉ cần tụt xuống dưới một mức nào đó, toàn bộ thao tác đột nhiên khựng lại vài giây liền, kể cả việc nhẹ như gõ tin nhắn hay chuyển bàn phím. Nhiều người đã quen với việc RAM trống thấp là bình thường, không đáng lo, nhưng điều đó chỉ đúng tới một điểm nhất định. Có một ranh giới thực sự tồn tại, và ranh giới đó do cơ chế nào gây ra khác hẳn chuyện một ứng dụng nền đơn thuần bị đóng rồi phải tải lại.
Ba tầng phản ứng của hệ thống khi RAM cạn dần
Hệ điều hành không xử lý tình trạng thiếu RAM theo kiểu tất cả hoặc không có gì, mà theo nhiều tầng tăng dần mức can thiệp. Tầng đầu là thu hồi bộ nhớ đệm của ứng dụng đã đóng lâu, gần như không ai nhận ra vì không ứng dụng đang hoạt động nào bị ảnh hưởng. Tầng thứ hai là buộc dừng hẳn tiến trình nền ít ưu tiên, gây độ trễ ngắn khi mở lại đúng ứng dụng đó. Tầng thứ ba, ít được nhắc tới hơn, là khi RAM vật lý còn trống quá ít để duy trì cả tiến trình đang hiển thị, buộc hệ thống nén dữ liệu của chính tiến trình đang chạy để có chỗ trống tạm thời, và đây mới là tầng gây đứng hình thực sự trong lúc thao tác.
Cơ chế nén zRAM hoạt động ở tầng thứ ba như thế nào
Nhân Linux trong Android dùng một vùng đệm nén gọi là zRAM, hoạt động như ổ đĩa hoán đổi (swap) nằm ngay trong RAM thay vì trên bộ nhớ trong. Khi RAM vật lý gần cạn, thay vì tắt hẳn tiến trình đang chạy, hệ thống nén những trang bộ nhớ ít được truy cập gần nhất bằng thuật toán nén nhanh, giải phóng không gian vật lý mà vẫn giữ dữ liệu. Mỗi lần ứng dụng cần truy cập lại đúng phần dữ liệu đã nén, CPU phải giải nén ngay tại chỗ trước khi xử lý tiếp, và việc nén/giải nén liên tục này tiêu tốn chu kỳ CPU thực sự, khác hẳn đọc dữ liệu thẳng từ RAM chưa nén.
Vì sao đây mới là ngưỡng gây lag thật
RAM trống thấp ở tầng một và tầng hai gần như vô hại vì không tiến trình đang hoạt động nào bị đụng tới. Ngưỡng thực sự đáng chú ý là lúc hệ thống bắt đầu nén cả những trang bộ nhớ thuộc tiến trình đang hiển thị, vì độ trễ giải nén khi đó xảy ra ngay trong luồng xử lý giao diện chính, biểu hiện thành đứng khựng vài trăm mili giây tới vài giây, khác hẳn một lần tải lại ứng dụng khi mở lại sau đó.
iOS dùng cơ chế nén bộ nhớ riêng, cách nhận diện đúng tầng gây lag thật
iPhone không dùng thuật ngữ zRAM nhưng có cơ chế tương đương gọi là bộ nén bộ nhớ (memory compressor), hoạt động như tầng trung gian trước khi hệ thống buộc chấm dứt hẳn một ứng dụng (jetsam) vì thiếu bộ nhớ, cũng tốn chu kỳ CPU để giải nén khi dùng lại, cùng bản chất kỹ thuật với Android dù khác tên gọi. Dấu hiệu phân biệt tầng gây lag thật là độ khựng xảy ra ngay trong lúc thao tác trên ứng dụng hiện tại, như gõ chữ trễ nhịp hoặc cuộn trang giật đột ngột, chứ không phải chỉ khi mở lại ứng dụng đã rời khỏi trước đó; trường hợp sau vẫn là tầng hai, không đáng lo.
Hiểu nhầm thường gặp
“RAM trống xuống thấp là dấu hiệu chắc chắn máy sắp lag, cần dọn RAM ngay.” Phần lớn thời gian RAM trống thấp chỉ phản ánh việc hệ thống đang tận dụng bộ nhớ đệm hiệu quả, không gây lag thật. Chỉ khi khựng xảy ra ngay lúc thao tác trên ứng dụng đang mở, thay vì lúc mở lại ứng dụng cũ, mới là dấu hiệu đáng tin cho thấy RAM đã chạm ngưỡng nén thực sự.
Xem thêm
Nội dung này thuộc cụm bài Chậm, lag, đứng máy: tổng hợp bài viết. Xem thêm bài Ứng dụng chạy ngầm làm chậm máy để biết cách kiểm tra tiến trình nào đang chiếm nhiều RAM nhất trên máy.
