Một nhóm kỹ sư Meta đang phát triển CRAM, viết tắt của Compressed RAM, với mục tiêu giúp Linux tận dụng bộ nhớ nén mà không phải chịu nhiều chi phí từ cơ chế swap truyền thống. Trong bài kiểm tra chỉ đọc, công nghệ này đạt khoảng 489 triệu thao tác mỗi giây, cao hơn ZRAM khoảng 445-452 lần.






Con số trên không có nghĩa máy tính Linux sẽ nhanh hơn hàng trăm lần ngay sau khi bật CRAM. Đây là kết quả trong một kịch bản thử nghiệm cụ thể, chủ yếu đo tốc độ truy cập dữ liệu nén khi hệ thống gần như không phải ghi thay đổi. Dù vậy, hướng tiếp cận của CRAM vẫn đáng chú ý vì có thể thay đổi cách Linux quản lý bộ nhớ nén trong tương lai.
Vì sao Linux cần bộ nhớ nén?
Khi hệ thống thiếu RAM, hệ điều hành thường phải đưa một phần dữ liệu ít được sử dụng sang thiết bị lưu trữ. Cách làm này giúp giải phóng không gian cho tác vụ đang chạy, nhưng tốc độ của SSD hoặc ổ cứng vẫn thấp hơn đáng kể so với RAM.
Linux đã có những giải pháp như ZRAM và zswap để giảm phụ thuộc vào bộ nhớ lưu trữ. Thay vì chuyển dữ liệu chưa nén xuống ổ đĩa, các công nghệ này nén những vùng nhớ ít được dùng, qua đó tạo thêm dung lượng RAM logic.
Phương pháp này đặc biệt hữu ích trên máy tính có RAM hạn chế, thiết bị nhúng và máy chơi game cầm tay. Chẳng hạn, Steam Deck có thể sử dụng ZRAM để giảm áp lực lên dung lượng bộ nhớ vật lý. Tuy nhiên, việc nén dữ liệu chỉ giải quyết một phần bài toán hiệu năng.
Điểm nghẽn nằm ở cách hệ điều hành truy cập dữ liệu
Theo nhóm phát triển, thời gian giải nén không phải nguyên nhân chính khiến bộ nhớ nén hoạt động chậm. Chi phí lớn hơn đến từ cơ chế swap và các lỗi trang phát sinh khi Linux cần lấy dữ liệu trở lại.
Với ZRAM, dữ liệu sau khi nén được đặt trong một thiết bị khối hoạt động trên RAM. Hệ điều hành nhìn vùng này tương tự một thiết bị swap, vì vậy mỗi lần truy cập có thể kéo theo quá trình xử lý lỗi trang, đọc dữ liệu và giải nén bằng phần mềm.
Cách tổ chức này tạo thêm một lớp trung gian. Dù dữ liệu thực tế vẫn nằm trong bộ nhớ vật lý, Linux không thể xử lý nó hoàn toàn như một vùng RAM thông thường. Đây là điểm mà CRAM tìm cách loại bỏ.
CRAM thay đổi mô hình quản lý bộ nhớ
Thay vì trình bày vùng dữ liệu nén như một ổ đĩa ảo, CRAM sử dụng một NUMA node riêng để đại diện cho bộ nhớ nén. NUMA, hay Non-Uniform Memory Access, là kiến trúc cho phép hệ thống quản lý các vùng nhớ có khoảng cách truy cập khác nhau trong những máy tính nhiều bộ xử lý.
Nhờ cách thiết kế này, Linux vẫn có thể áp dụng các cơ chế quản lý bộ nhớ vốn có, gồm di chuyển trang, phân tầng bộ nhớ, thu hồi tài nguyên và điều chỉnh kích thước vùng nhớ. Dữ liệu nén không bị tách khỏi hệ thống quản lý bộ nhớ để hoạt động như một thiết bị lưu trữ độc lập.
Theo phần trình bày của Gregory Price tại Linux Plumbers Conference 2026, dữ liệu trong CRAM có thể được ánh xạ vào bảng trang và bộ nhớ đệm. Hệ thống có khả năng đọc theo từng byte hoặc cache line mà không cần thực hiện bước giải nén bằng phần mềm giống ZRAM.
Quá trình nén và giải nén được giao cho phần cứng. Nhờ đó, độ trễ truy cập có thể tiến gần hơn tới RAM DRAM thông thường. Đây là khác biệt quan trọng giữa CRAM và mô hình bộ nhớ nén dựa trên thiết bị swap.
Kết quả thử nghiệm cho thấy khoảng cách rất lớn
Trong bài kiểm tra chỉ đọc, CRAM đạt khoảng 489 triệu thao tác mỗi giây. ZRAM chỉ đạt khoảng 1,1 triệu thao tác mỗi giây. Tùy phép đo, mức chênh lệch dao động khoảng 445-452 lần.
Đây là kết quả nổi bật, nhưng cần được hiểu đúng. Bài kiểm tra chủ yếu phản ánh khả năng đọc dữ liệu trong điều kiện thuận lợi cho CRAM. Khi hệ thống không phải thường xuyên thay đổi nội dung bộ nhớ, lợi thế từ việc truy cập trực tiếp và giải nén bằng phần cứng được thể hiện rõ nhất.
Khi bài kiểm tra có 20% thao tác ghi, mức cải thiện giảm xuống còn khoảng 5,4 lần so với ZRAM. Mức tăng này vẫn đáng kể, nhưng cho thấy CRAM không thể duy trì lợi thế hàng trăm lần trong những tác vụ có dữ liệu liên tục bị cập nhật.
| Kịch bản thử nghiệm | CRAM so với ZRAM |
|---|---|
| Chỉ đọc | Cao hơn khoảng 445-452 lần |
| Có 20% thao tác ghi | Cao hơn khoảng 5,4 lần |
Vì vậy, không nên dùng con số 452 lần để dự đoán mức tăng tốc cho mọi ứng dụng. Hiệu quả thực tế còn phụ thuộc vào loại dữ liệu, tỷ lệ đọc-ghi, dung lượng RAM và cách chương trình sử dụng bộ nhớ.
Thao tác ghi vẫn là thách thức lớn
CRAM không thể ghi trực tiếp lên dữ liệu đang ở trạng thái nén. Khi một trang bộ nhớ cần được thay đổi, hệ thống phải đưa trang đó trở lại vùng NUMA ban đầu, giải nén rồi mới cho phép chỉnh sửa.
Quá trình này làm phát sinh lỗi trang và hoạt động di chuyển dữ liệu. Khi tỷ lệ ghi tăng, lợi thế về độ trễ của CRAM vì thế giảm xuống. Đây là lý do kết quả ở bài kiểm tra có 20% thao tác ghi thấp hơn rất nhiều so với bài kiểm tra chỉ đọc.
Hạn chế này đặc biệt quan trọng với các tác vụ có dữ liệu biến động liên tục. Những ứng dụng thường xuyên cập nhật bộ nhớ sẽ không thể khai thác toàn bộ lợi thế của CRAM như các workload thiên về đọc dữ liệu.
Dung lượng RAM logic khó dự đoán
Bên cạnh hiệu suất, bộ nhớ nén còn có một vấn đề khác: dung lượng sử dụng thực tế không cố định. Mức độ nén thay đổi tùy loại dữ liệu được lưu trữ.
Một trang chứa nhiều số 0 có thể được thu gọn xuống kích thước rất nhỏ. Ngược lại, dữ liệu đã được nén từ trước gần như không thể nén thêm. Vì vậy, cùng một lượng RAM vật lý có thể tạo ra dung lượng RAM logic rất khác nhau tùy thời điểm.
Linux không dễ biết chính xác vùng CRAM còn chứa được bao nhiêu dữ liệu hoặc dữ liệu tiếp theo sẽ nén hiệu quả đến mức nào. Nếu hệ điều hành cấp phát quá nhanh, vùng nhớ nén có thể gặp tình trạng thiếu không gian trong khi hệ thống vẫn đang xử lý việc phân bổ.
Để hạn chế rủi ro này, nhóm phát triển đưa vào một cơ chế được gọi vui là “Chicken Bit”. Cơ chế này cho phép Linux tạm dừng việc đưa thêm dữ liệu vào CRAM khi hệ thống đang bận quản lý cấp phát bộ nhớ. Giải pháp giúp tránh lỗi dây chuyền, nhưng chưa giải quyết hoàn toàn bài toán xác định dung lượng.
CRAM trước mắt hướng tới máy chủ Linux
CRAM được phát triển bởi các kỹ sư Meta, nên máy chủ Linux quy mô lớn nhiều khả năng sẽ là nhóm hưởng lợi đầu tiên nếu công nghệ được hoàn thiện. Nguyên mẫu đã đạt hiệu suất gần RAM gốc trong một số bài kiểm tra TAOBench và FIO, đồng thời được thử nghiệm với nhiều hệ thống tệp tích hợp trong nhân Linux.
Đối với máy chủ AI, bộ nhớ là một trong những tài nguyên quan trọng và chi phí mở rộng RAM có thể rất cao. Một lớp bộ nhớ nén nhanh hơn sẽ giúp hệ thống xử lý được nhiều dữ liệu hơn trong cùng điều kiện phần cứng, đặc biệt với workload có tỷ lệ đọc lớn.
Tuy nhiên, CRAM chưa phải giải pháp có thể triển khai rộng rãi ngay lập tức. Dự án vẫn đang ở giai đoạn thử nghiệm, còn phải giải quyết bài toán cấp phát, xử lý thao tác ghi và khả năng tích hợp ổn định vào nhân Linux.
Tiềm năng trên PC, thiết bị nhúng và máy chơi game
Nếu được tích hợp vào Linux, CRAM không chỉ có giá trị với trung tâm dữ liệu. Máy tính cá nhân cấu hình thấp, thiết bị nhúng và máy chơi game cầm tay cũng có thể hưởng lợi từ một cơ chế bộ nhớ nén ít gây độ trễ hơn.
Trên những thiết bị có dung lượng RAM giới hạn, bộ nhớ nén có thể giúp giảm tần suất phải sử dụng SSD hoặc bộ nhớ lưu trữ làm swap. Điều này vừa hỗ trợ khả năng đa nhiệm, vừa hạn chế các lần truy cập lưu trữ không cần thiết.
Dẫu vậy, người dùng không nên kỳ vọng CRAM sẽ biến một máy có ít RAM thành thiết bị cao cấp. Hiệu quả phụ thuộc vào loại dữ liệu và mức độ nén, trong khi kết quả 452 lần mới chỉ phản ánh một kịch bản đọc dữ liệu đặc thù.
CRAM cho thấy bộ nhớ nén có thể tiến gần hiệu năng RAM thông thường nếu loại bỏ được lớp trung gian của cơ chế swap. Nhưng để trở thành tính năng phổ biến, công nghệ này vẫn cần trải qua thêm nhiều thử nghiệm thực tế.
Với hướng tiếp cận dựa trên NUMA node và hỗ trợ từ phần cứng, CRAM đang mở ra một hướng phát triển khác cho bộ nhớ nén trên Linux. Thành công của dự án sẽ phụ thuộc vào khả năng cân bằng giữa tốc độ đọc, chi phí xử lý khi ghi và việc dự đoán dung lượng RAM logic trong các workload khác nhau.
Trong thời gian chờ CRAM trưởng thành, ZRAM và zswap vẫn là những lựa chọn quen thuộc trên Linux. Người dùng nên xem CRAM như một công nghệ thử nghiệm có tiềm năng, thay vì một nâng cấp hiệu năng đã sẵn sàng cho mọi máy tính.
