RAM đầy rồi thì dữ liệu đi đâu?
Chương trình cần nhiều hơn lượng RAM đang có thì lấy chỗ ở đâu?
Bài trước dừng ở một chiếc Mac 16 GB, nơi CPU, GPU và mọi ứng dụng đều lấy chỗ từ cùng một vũng nhớ.
Mở dần lên thì nhu cầu cộng lại vượt qua con số đó:
macOS 3 GB
Chrome 5 GB
Xcode 4 GB
Photoshop 5 GB
model AI 6 GB
───────────────────
tổng 23 GB máy có 16 GB
Máy không vì thế mà đóng bớt ứng dụng. Nó chậm đi, và vẫn chạy.
Vậy phần dữ liệu không còn chỗ nằm ở đâu?
Áp lực bộ nhớthấp
Phản hồimượt
RAM trống8 GB
Swap0 GB
RAM · 16 GB
SSD · phần bị đẩy xuống
Máy còn 8 GB trống. Mở dần từng ứng dụng và xem hệ điều hành lấy chỗ ở đâu.
Bộ nhớ không hết trong một nhịp: hệ điều hành lấy lại chỗ ngay trong RAM trước, mượn tới SSD sau.
Trước tiên, hệ điều hành lấy lại chỗ trong chính RAM
Không phải thứ gì đang nằm trong bộ nhớ cũng quan trọng như nhau. Một phần chỉ là bản sao để cho nhanh: file vừa mở, thư viện mà ứng dụng đã nạp, trang web vừa xem.
Những thứ đó gọi chung là cache, và chúng đều còn bản gốc trên ổ đĩa.
Cần chỗ thì hệ điều hành bỏ bớt cache đi:
trước
ứng dụng ██████████
cache ████
trống ██
sau
ứng dụng ██████████
cache █
trống █████
Không có gì quan trọng mất đi. Lần sau cần thì đọc lại từ ổ đĩa, chỉ chậm hơn một chút.
Nên bộ nhớ nhìn gần đầy chưa chắc là dấu hiệu xấu. Một vùng nhớ để trống mà không dùng cũng chẳng làm máy nhanh hơn.
Những vùng không bỏ được thì nén lại
Có những vùng không vứt đi được, vì chỉ bộ nhớ mới đang giữ chúng, nhưng đã lâu không chương trình nào đụng tới. Một tab mở từ sáng, một ứng dụng nằm im dưới Dock.
Hệ điều hành nén những vùng đó ngay tại chỗ:
trước: [ ████████████ ]
sau: [ █████ ]
Dữ liệu vẫn nằm trong bộ nhớ, chỉ chiếm ít chỗ hơn. Chương trình cần lại thì CPU giải nén, mất thêm một chút công tính.
Chút công đó vẫn rẻ hơn nhiều so với phải đi lấy dữ liệu từ bên ngoài bộ nhớ. Nhưng nén cũng chỉ co được tới một mức.
Vẫn thiếu thì SSD được mượn làm chỗ chứa tạm
Hệ điều hành chọn những vùng lâu nhất không ai đụng tới và ghi chúng xuống SSD:
RAM
[ A ][ B ][ C ][ D ]
│ ít dùng
▼
SSD
[ C ]
Việc này gọi là swap. Chỗ của C được giao lại cho chương trình đang cần ngay.
Nhờ vậy một máy 16 GB vẫn chạy được đống chương trình đòi hơn 16 GB, thay vì báo lỗi rồi đóng bớt.
Chừng nào chưa ai hỏi tới C, mọi thứ vẫn êm.
Máy khựng ở lúc kéo dữ liệu trở lại
Rồi người dùng quay lại đúng chương trình đang giữ C. CPU không đọc thẳng C từ SSD được, nên nó phải lên lại bộ nhớ trước:
CPU cần C
↓
C không còn trong RAM
↓
đọc C từ SSD lên
↓
CPU mới chạy tiếp
Bài về RAM và SSD đã cho thấy một lần đọc SSD chậm hơn một lần đọc RAM hàng nghìn lần. Con trỏ chuột vẫn chạy, nhưng cửa sổ vừa bấm phải một lúc mới hiện ra.
Thỉnh thoảng một lần thì gần như không ai để ý. Cái đáng sợ là khi bộ nhớ thiếu tới mức dữ liệu cứ đi đi về về:
RAM → SSD → RAM → SSD → RAM
Lúc đó máy dành phần lớn thời gian để chuyển dữ liệu chứ không phải để chạy chương trình.
Vì vậy đừng chỉ nhìn “RAM còn trống”
Con số GB còn trống không nói được máy có đang chật vật hay không, vì phần lớn chỗ mang tiếng “đã dùng” có thể là cache, nhường lại bất cứ lúc nào.
Activity Monitor trên Mac vì thế có thêm biểu đồ Memory Pressure:
xanh bộ nhớ vẫn đáp ứng thoải mái
vàng bắt đầu phải xoay xở nhiều
đỏ thiếu bộ nhớ đang ảnh hưởng rõ
Swap Used cũng vậy. Vài GB bị đẩy xuống SSD từ sáng mà cả buổi không ai cần lại thì chẳng bắt ai phải chờ.
Thứ làm máy chậm là swap bị gọi lại liên tục, chứ không phải con số swap đã từng ghi xuống.
AI làm giới hạn này lộ ra rất nhanh
Một tab trình duyệt nằm im có thể ở dưới SSD cả buổi mà không ai thấy gì. Trọng số của một model AI thì không được yên như vậy.
Model đang sinh chữ thì mỗi chữ mới đều đòi đọc qua một phần rất lớn trọng số. Phần nào đang nằm dưới SSD sẽ bị kéo lên lại ngay ở chữ tiếp theo:
SSD → RAM → tính một chữ
SSD → RAM → tính chữ tiếp theo
SSD → RAM → ...
Đúng cái vòng đi đi về về ở trên, lặp lại nhiều lần trong mỗi giây. Tốc độ vì thế rơi xuống thấy rõ.
Bỏ cache, nén và swap đều chỉ là cách xoay xở với lượng bộ nhớ đang có. Muốn giữ nhiều dữ liệu hơn mà vẫn nhanh thì cuối cùng vẫn phải có thêm bộ nhớ vật lý.
Mà laptop đang cần thêm, còn trung tâm dữ liệu chạy AI cần nhiều hơn nữa.
Sao nguồn cung RAM không tăng ngay khi nhu cầu tăng?
Nguồn bài viết (2)
- View memory usage in Activity Monitor on Mac (Compressed, Swap Used) · Apple Support
- Introduction to the page file · Microsoft Learn