Thứ Hai, 7 tháng 5, 2012

Tinh chỉnh Linux VM (memory) subsystem


Vấn đề

Tôi có hệ thống đĩa nhanh thiết lập RAID-10 với nhiều đĩa cứng SCSI. Ứng dụng chạy dưới Linux kernel mới không thể ghi trực tiếp xuống đĩa cứng. Chúng có thể ghi tới cache của file system mà được quản lý bởi trình quản lý bộ nhớ ảo của Linux kernel.  Từ đó tôi có bộ điều khiển RAID hiệu năng cao, tôi cần giảm bớt lượng flush. Làm thế nào để điều chỉnh hệ thống bộ nhớ ảo trong hệ điều hành Linux để có hiệu năng tốt hơn?

Giải pháp

Linux cho phép bạn tinh chỉnh VM subsystem. Tuy nhiên, tinh chỉnh memory subsystem là một việc đầy thách thức. Việc thiết lập sai có thể ảnh hưởng đến hiệu năng của toàn bộ hệ thống. Tôi đề nghị bạn sửa một thiết lập tại một thời điểm và giám sát hệ thống của bạn vài lần. Nếu hiệu năng tăng thêm thì giữ thiết lập đó, ngược lại thì quay về giá trị cũ.

Thông tin trong /proc/sys/vm

Các file trong thư mục này có thể được dùng để điều chỉnh hoạt động của hệ thống bộ nhớ ảo (VM) của Linux kernel:
cd /proc/sys/vm
ls -l
Sample outputs:
total 0
-rw-r--r-- 1 root root 0 Oct 16 04:21 block_dump
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_background_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_expire_centisecs
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 dirty_writeback_centisecs
-rw-r--r-- 1 root root 0 Oct 16 04:21 drop_caches
-rw-r--r-- 1 root root 0 Oct 16 04:21 flush_mmap_pages
-rw-r--r-- 1 root root 0 Oct 16 04:21 hugetlb_shm_group
-rw-r--r-- 1 root root 0 Oct 16 04:21 laptop_mode
-rw-r--r-- 1 root root 0 Oct 16 04:21 legacy_va_layout
-rw-r--r-- 1 root root 0 Oct 16 04:21 lowmem_reserve_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 max_map_count
-rw-r--r-- 1 root root 0 Oct 16 04:21 max_writeback_pages
-rw-r--r-- 1 root root 0 Oct 16 04:21 min_free_kbytes
-rw-r--r-- 1 root root 0 Oct 16 04:21 min_slab_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 min_unmapped_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 mmap_min_addr
-rw-r--r-- 1 root root 0 Oct 16 04:21 nr_hugepages
-r--r--r-- 1 root root 0 Oct 16 04:21 nr_pdflush_threads
-rw-r--r-- 1 root root 0 Oct 16 04:21 overcommit_memory
-rw-r--r-- 1 root root 0 Oct 16 04:21 overcommit_ratio
-rw-r--r-- 1 root root 0 Oct 16 04:21 pagecache
-rw-r--r-- 1 root root 0 Oct 16 04:21 page-cluster
-rw-r--r-- 1 root root 0 Oct 16 04:21 panic_on_oom
-rw-r--r-- 1 root root 0 Oct 16 04:21 percpu_pagelist_fraction
-rw-r--r-- 1 root root 0 Oct 16 04:21 swappiness
-rw-r--r-- 1 root root 0 Oct 16 04:21 swap_token_timeout
-rw-r--r-- 1 root root 0 Oct 16 04:21 vfs_cache_pressure
-rw-r--r-- 1 root root 0 Oct 16 04:21 zone_reclaim_mode

pdflush

Dùng lệnh sau để xem thời gian wake up hiện tại của pdflush:
# /sbin/sysctl vm.dirty_background_ratio
Sample outputs:
sysctl vm.dirty_background_ratio = 10
vm.dirty_background_ratio là 10, đây là tỷ lệ phần trăm trên tổng bộ nhớ hệ thống, số lượng trang mà tại đó dịch vụ nền pdflush sẽ bắt đầu ghi dữ ra dữ liệu xấu. Tuy nhiên, để RAID nhanh dựa trên hệ thống đĩa này có thể là nguyên nhân gây ra “tràn”(flush) của các trang dữ liệu xấu. Nếu bạn tăng giá trị này từ 10 thành 20 (một giá trị lớn) thì kết quả là sẽ ít bị tràn hơn.
# sysctl -w vm.dirty_background_ratio=20

swappiness

Dùng lệnh sau để xem giá trị mặc định hiện tại:
# /sbin/sysctl vm.swappiness
Sample outputs:
vm.swappiness = 60
Giá trị 60 cho biết các trang bộ nhớ được swap (tráo đổi) tới đĩa mạnh mẽ thế nào. Nếu bạn không muốn swap, hãy đặt giá trị này thấp hơn. Tuy nhiên, nếu tiến trình hệ thống ở trạng thái ngủ (sleep) trong thời gian dài thì có thể trạng thái swap mạnh mẽ lại có lợi hơn (bằng cách tăng giá trị này). Ví dụ, bạn có thể thay đổi trạng thái swappiness bằng cách tăng hoặc giảm giá trị:
# /sbin/sysctl -w vm.swappiness=100

dirty_ratio

Dùng lệnh sau:
# /sbin/sysctl vm.dirty_ratio
Sample outputs:
vm.dirty_ratio = 40
Giá trị 40 là tỷ lệ phần trăm trên tổng bộ nhớ hệ thống, số trang mà tại đó một process phát sinh việc ghi vào đĩa sẽ tự khởi động việc ghi ra dữ liệu xấu. Điều này không vấn đề gì, nhưng tỷ lệ  các trang xấu được tạo bởi ứng dụng ghi đĩa sẽ bị tràn (flush). Giá trị 40 nghĩa là dữ liệu sẽ được ghi vào bộ nhớ cho tới khi cache của hệ thống file có kích thước bằng 40% lượng RAM của server. Bởi vậy, nếu bạn có 12 GB RAM, dữ liệu sẽ được ghi vào bộ nhớ cho tới khi cache hệ thống file có kích thước là 4.8 GB. Bạn có thể thay đổi tỷ lệ này như sau:
# sysctl -w vm.dirty_ratio=25

Thay đổi VM vĩnh cửu

Bạn cần thêm các thiết lập vào /etc/sysctl.conf. Xem FAQ making changes to /proc filesystem.

Không có nhận xét nào:

Đăng nhận xét