Bài viết này sẽ giúp các bạn tăng tốc độ máy chủ Linux với ZSWAP.
ZSWAP là gì?
ZSWAP là một cách thú vị để mở rộng không gian Swap của máy chủ với memory write-back cache. Dưới đây là lời giải thích đơn giản của mình:
- Khi tính năng này được kích hoạt, một lượng RAM của máy chủ sẽ bị gạt sang một bên và khi hệ thống cần thêm RAM để sử dụng thì ZSWAP sẽ được sử dụng tương tự như tính năng Swap.
- Trước tiên hệ thống sẽ bắt đầu ghi dữ liệu vào vùng ZSWAP này như là ghi lên RAM và khi nó đầy thì nó sẽ tiếp tục sử dụng SWAP (lưu trên đĩa cứng). Cơ chế sử dụng bộ nhớ sẽ ưu tiên như sau: RAM > ZSWAP > SWAP.
- Dữ liệu sẽ được nén nhanh chóng bởi Kernel và được lưu trong bộ nhớ cấp phát cho ZSWAP. Đương nhiên nếu so sánh với tính năng Swap thì điểm mạnh của ZSWAP là dữ liệu được nén nhiều lần và có tốc độ truy xuất cao hơn nhiều do nó được lưu trên RAM. Ngoài ra, nếu nhóm bộ nhớ ZSWAP bị đầy hoặc ở mức tối đa cho phép và không thể mở rộng thêm, nó sẽ di chuyển dữ liệu ít được sử dụng nhất sang bộ nhớ Swap bằng cách sử dụng thuật toán (LRU).
- Bạn có thể tăng dung lượng RAM có thể sử dụng một cách hiệu quả bằng cách sử dụng tính năng này vì nó giống như bạn có khả năng nén một phần RAM của mình và các thuật toán hiện tại cho thấy tỷ lệ nén gấp 2 lần đến 3 lần. Vì vậy, nếu tách 20% RAM 2GB của máy chủ ảo của bạn cho thiết bị ZSWAP, bạn sẽ có 1,6GB RAM + 400MB ZSWAP với tỷ lệ nén trung bình là 2x, thì bạn có thể có 2,4GB RAM trước khi máy chủ cần đến sử dụng đến SWAP.
Có nhiều trường hợp mà tính năng này tỏ ra rất hữu ích, chẳng hạn như:
- Ảo hóa – máy chủ ảo – tối ưu mức sử dụng RAM của hệ thống.
- Giảm IO xuống các đĩa chậm như ổ cứng HDD.
- Giảm IO xuống bộ nhớ nếu hệ thống của bạn chạy trên flash (thẻ nhớ, USB), điều này có thể làm tăng tuổi thọ của chúng.
- Đối với máy chủ chạy cơ sở dữ liệu hoặc máy chủ DNS có thể mang lại lợi ích lớn vì tỷ lệ nén có thể vào khoảng 3x (tức là 3GB ZSWAP sẽ tương đương 1GB RAM).
Bật ZSWAP trên máy chủ Linux
Bước 1 – Kiểm tra phiên bản Kernel đang sử dụng
Đầu tiên chúng ta sẽ cần kiểm tra phiên bản Kernel Linux của chúng ta trước. Cách kiểm tra rất đơn giản, chúng ta chỉ cần sử dụng lệnh sau:
hostnamectl
Sau khi đã biết được phiên bản Kernel của chúng ta đang sử dụng là phiên bản bao nhiêu thì chúng ta tiếp tục đi theo bước 2 để kiểm tra trạng thái của ZSWAP.
Bước 2 – Kiểm tra trạng thái kích hoạt ZSWAP
Chúng ta nên kiểm tra xem hệ thống đã được kích hoạt sẵn ZSWAP chưa, cách kiểm tra cực kì đơn giản như sau:
cat /sys/module/zswap/parameters/enabled
Nếu kết quả trả về là N như hình sau thì tính năng này chưa được kích hoạt.
Bước 3 – Bật ZSWAP trên máy chủ Linux tùy vào phiên bản Kernel
Trường hợp 1 – Đối với phiên bản Kernel 3.11 đến 3.19:
Khởi động Kernel của bạn với tham số Kernel như sau (yêu cầu khởi động lại máy chủ, đối với Kernel cũ từ 3.11 đến 3.19 thì đây là tùy chọn duy nhất):
zswap.enabled=1
Trường hợp 2 – Đối với phiên bản Kernel 4.x trở lên:
Với trường hợp này chúng ta chỉ cần kích hoạt nó từ hệ thống tệp /proc (cách này không yêu cầu khởi động lại máy chủ, cách này không thể thực hiện được trong các phiên bản Kernel cũ từ 3.11 đến 3.19):
echo 1 > /sys/module/zswap/parameters/enabled
Sau khi chạy lệnh này thì các bạn có thể kiểm tra lại trạng thái của tính năng này như ở bước 2:
cat /sys/module/zswap/parameters/enabled
Các tùy chọn sử dụng mà bạn nên biết khi sử dụng ZSWAP
Kích thước nhóm bộ nhớ
Theo mặc định, nó sẽ sử dụng 20% bộ nhớ RAM. Bạn có thể tăng hoặc giảm nó bằng cách sau (thay đổi giá trị 15 theo % sử dụng RAM mà bạn muốn):
Trường hợp 1 – Đối với phiên bản Kernel 3.11 đến 3.19:
Khởi động Kernel của bạn với tham số Kernel như sau (yêu cầu khởi động lại máy chủ, đối với Kernel cũ từ 3.11 đến 3.19 thì đây là tùy chọn duy nhất):
zswap.max_pool_percent=15
Trường hợp 2 – Đối với phiên bản Kernel 4.x trở lên:
Với trường hợp này chúng ta chỉ cần kích hoạt nó từ hệ thống tệp /sys (cách này không yêu cầu khởi động lại máy chủ, cách này không thể thực hiện được trong các phiên bản Kernel cũ từ 3.11 đến 3.19):
echo 15 > /sys/module/zswap/parameters/max_pool_percent
Loại bộ nhớ nén
Hiện tại có hai loại bộ nhớ nén là zbud và z3fold.
Loại 1 – zbud
Với loại này thì 2 Page sẽ được nén và lưu trữ thành 1 Page. Tất nhiên, điều này giới hạn tỷ lệ nén tối đa 2 lần. Đây là mức mặc định và được hỗ trợ từ tính năng này.
Thông số khởi động đối với Kernel cũ:
zswap.zpool=zbud
echo zbud > /sys/module/zswap/parameters/zpool
Một lần nữa, đây là loại bộ nhớ nén mặc định, vì vậy bạn không cần phải làm bất cứ điều gì ở trên nếu bạn chưa bao giờ thay đổi nó và bạn vẫn muốn sử dụng nó.
Tham số này có thể được thay đổi ở giai đoạn sau khi hệ thống đang chạy (nhưng không thực hiện được trong các phiên bản Kernel cũ từ 3.11 đến 3.19).
Loại 2 – z3fold
Với loại này thì 3 Page sẽ được nén và lưu trữ thành 1 Page. Tất nhiên, điều này giới hạn tỷ lệ nén tối đa là 3 lần.
Thông số khởi động đối với Kernel cũ:
zswap.zpool=z3fold
echo z3fold > /sys/module/zswap/parameters/zpool
Trong một số hệ thống, z3fold có thể phải tải thủ công trước khi sử dụng nó trong lệnh echo đối với hệ thống tệp /sys:
modprobe z3fold
echo z3fold > /sys/module/zswap/parameters/zpool
Các thuật toán nén
Thuật toán mặc định là lzo và nó có thể được thay đổi tại thời điểm khởi động hoặc thời gian thực.
Tốt hơn lzo, nhưng thuật toán này có phần chậm hơn là lz4. Có thêm hai thuật toán khác đó là lz4hc và deflate. Tham số này có thể được thay đổi ở giai đoạn hệ thống hoạt động (nhưng không hoạt động trong Kernel cũ).
Thông số khởi động đối với Kernel cũ:
zswap.compressor=lz4
Hoặc chỉ cần kích hoạt nó từ hệ thống tệp /proc (tham số này có thể được thay đổi ở giai đoạn sau khi hệ thống đang chạy, không thể thực hiện được trong Kernel cũ):
echo lz4 > /sys/module/zswap/parameters/compressor
Tổng kết
Hy vọng qua bài viết này các bạn đã hiểu thêm về một tính năng tuy không mới nhưng rất hữu hiệu để cải thiện hiệu xuất cho hệ thống Linux.
Hầu hết chúng ta chỉ cần thực hiện theo bước 3 của bài hướng dẫn này là được rồi, còn những cài đặt chuyên sâu hơn thì các bạn phải hiểu rõ về hệ thống thì mới nên thực hiện.