Tối ưu hệ thống NFS

NFS – Network File System là giải pháp cung cấp việc truy cập file từ xa giống như truy cập trên các đĩa cứng local. Trong phần trước đã hướng dẫn cách thức thiết lập một hệ thống NFS trên HĐH Ubuntu 14.04, link tham khảo tại đây: Hướng dẫn cài đặt NFS trên HĐH Ubuntu 14.04, phần này sẽ phân tích và hướng dẫn cách tối ưu một hệ thống NFS để đạt được hiệu suất cao nhất, phù hợp với mục đích sử dụng của các Sys Admin.

NFS có nhiều tham số liên quan cũng như hoạt động phụ thuộc vào phần cứng của máy chủ, môi trường mạng (chủ yếu là mạng nội bộ – LAN), nên việc tối ưu NFS có thể thực hiện song song theo các cách sau đây:
 
1. Tối ưu block size trong lưu trữ File System
 
Trong hình ảnh bên dưới mô tả chi tiết các tham số của hệ thống NFS:
 
Tham so NFS

Một số option trong NFS
wr – Filesystem được mount cho phép read và write
nfs4 – Phiên bản của NFS
rsize và wsize – xác định size của data mỗi RPC packet sử dụng khi đọc và ghi. Con số này nếu tuning tốt có thể tăng performance, ngược lại sẽ giảm performance. Phần này sẽ được kiểm tra để tìm ra con số tối ưu cho hệ thống NFS – được giải thích ngay sau đây.
 
Để thay đổi rsize và wsize của hệ thống NFS khi mount, sử dụng lệnh sau trên máy NFS-Client

rsize và wsize được hiểu như sau: Giả sử chúng ta muốn chuyển tải 1 lượng data khoảng 1Mb, nếu chia nhỏ ra các kích thước 32Kb thì số lượng các gói tin sẽ nhiều hơn so với kích thước 64Kb. Điều này sẽ ảnh hưởng đến số lượng các gói tin trên mạng nội bộ (giữa NFS server và NFS client) và ảnh hưởng đến hiệu năng của hệ thống.
 
Vì vậy muốn tối ưu thì có thể dựa vào các thông số băng thông trong mạng nội bộ để điều chỉnh cho phù hợp, nếu mạng nội bộ có tốc độ 1Gb (trên cả switch và server) thì có thể đẩy thông số này lên cao, lúc đó hiệu năng sẽ tốt hơn.

Tuy nhiên cao bao nhiêu là đủ và thông số nào là phù hợp ? Điều này cần phải thực hiện testing để tìm ra con số phù hợp nhất đối với mạng hiện tại.

Công cụ thực hiện đo kiểm để tìm ra con số wr tối ưu: dd

Lệnh dd trong Linux sẽ tạo ra một file theo yêu cầu cho việc testing.

Trên máy NFS client, vào thư mục đã mount (/mntdir)

dd 01
Như vậy, tốc độ đọc ghi vào khoảng 53.5 MB/s

Tuy nhiên với câu lệnh trên, tốc độ thể hiện chính là tốc độ data được cached vào RAM, không phải disk, vì vậy để đo cho chính xác cần sử dụng lệnh sau để đo khi data đã được lưu hẳn vào disk:

dd 02

Như vậy, tốc độ đọc ghi vào khoảng 45 MB/s.

Thử thay đổi block size để tìm kiếm giá trị tối ưu:

dd 03

Như vậy, sau khi đổi giá trị Block Size từ 1MB còn 64k thì tốc độ đọc ghi đạt 112 MB/s.

Thử tiếp tục thay đổi:

dd 04

Như vậy, sau khi đổi giá trị Block Size từ 64k còn 32k thì tốc độ đọc ghi đạt 114-118 MB/s. Như vậy có thể “tạm” lấy tham số Block size là 32k hoặc 64k làm tham số tối ưu cho hệ thống NFS.

Một số tool khác cho việc test tốc độ đọc ghi: HDPARM, IOZONE, bonnie, FIO

 

2. Tối ưu NFS dựa trên MTU

 

MTU mặc định trong mạng Ethernet thường là 1500 bytes, con số này có thể tối ưu cho phù hợp để nâng cao performance của hệ thống NFS.
Giả sử block size của hệ thống NFS là 8Kb, điều đó đồng nghĩa với việc khi phân mảnh dữ liệu trong môi trường Ethernet sẽ chỉ gởi tối đa là 1500 bytes, vì vậy sẽ tăng số lượng frame gởi trong môi trường ethernet giữa NFS server và NFS client.
Vì vậy, nếu tăng MTU trên cả 2 phía server và client lên 9000 bytes thì có thể gởi nguyên block size data 8Kb mà không cần trải qua quá trình phân mảnh dữ liệu.

MTU

Câu lệnh thay đổi MTU:

Hoặc thêm dòng MTU=9000 vào file cấu hình card mạng của HĐH.

 

3. Tối ưu NFS dựa theo tham số timeo và retrans trong NFS

 

Hai tham số này thể hiện thời gian và số lần thử lại giữa client và server trong trường hợp thời gian phản hồi chậm hoặc dịch vụ bị sự cố, gián đoạn

Tham số timeo để chỉ thời gian client chờ trước khi gởi lại gói tin NFS. Giá trị default là 0.7 second, và tham số timeo có giá trị từ 1-10, nếu timeo bằng 5 đồng nghĩa với việc client chờ 5/10 = ½ giây trước khi gởi lại gói tin.

Tham số retrans chỉ số lần client gởi lại cho server, nếu quá số lần định nghĩa, xem như server không khả dụng (not available).

Ví dụ:

Trong các trường hợp mạng nội bộ bị chậm hay quá tải và thường xuyên bị retrans thì phải tăng tham số timeo lên cho phù hợp.

 

4. Tối ưu NFS dựa trên số lượng NFS threads

 

Mặc định số threads của NFS server là 8, cần nâng thông số này lên đối với các hệ thống NFS có nhiều người truy cập.

(nếu trong HĐH CentOS là tại file /etc/sysconfig/nfs)

Thông số ban đầu:

Nâng số threads lên 32:

 

5. Tối ưu NFS bằng cách chọn phương pháp Đồng bộ và bất đồng bộ trong việc mount NFS

 

Có 2 phương pháp đó là mount bất đồng bộ và đồng bộ
Bất đồng bộ: nhanh, khi NFS server nhận được 1 hành động ghi, nó sẽ convert thành hành động VFS (virtual file system) để ghi dữ liệu vào đĩa, và tiếp tục tiếp nhận xử lý các yêu cầu ghi khác, ngay cả khi việc ghi trước chưa được hoàn thành. Phương pháp này nhanh tuy nhiên dễ xảy ra mất/corrupt dữ liệu.

Đồng bộ thì ngược lại: nó phải chờ cho đến khi ghi xong mới tiếp nhận xử lý các hành độn ghi khác. Phương pháp này dành cho các hệ thống dữ liệu quan trọng, tuy nhiên tốc độ sẽ bị chậm đáng kể.

Muốn thiết lập mount bất đồng bộ sử dụng lệnh mount sau:

Có thể thiết lập trong fstab để cố định việc thiết lập mount này bằng cách thêm dòng sau vào file /etc/fstab:

 
6. Tuning bằng cách nâng memory cho hệ thống
 
Có 2 giá trị cho việc tuning liên quan đến memory đó là socket input queue và socket output queue. Hai tham số này được hiệu chỉnh tại file sysctl.conf, hoặc có thể thay đổi trong /proc. Mỗi lần thay đổi phải khởi động lại dịch vụ NFS.
Ví dụ:

Hiệu chỉnh lại tham số output queue bằng cách thay đổi giá trị wmem_default và wmem_max:

Tuy nhiên việc thay đổi các tham số này trong /proc chỉ có ý nghĩa tạm thời, bởi vì các giá trị trên được lưu trong RAM, muốn áp hẳn các giá trị này thì cần thay đổi trong file sysctl.conf.

 

7. Tuning dựa vào RAID của đĩa cứng

 

Phần này liên quan đến việc chia RAID của đĩa cứng, có thể sử dụng các loại RAID 10 hoặc RAID 5, 6 cho việc thiết lập hệ thống NFS, sẽ tăng được performance của đọc/ghi đĩa cứng.

Have fun reading!

Ref: http://www.slashroot.in/how-do-linux-nfs-performance-tuning-and-optimization

Bình luận