Kadangkala, kita memerlukan akses file yang menggunakan spasi bersama secara andal. Di dunia *nix, telah dikenal metode NFS (Network File System), yaitu menggunakan salah satu storage pada server yang diperbolehkan untuk dimount oleh komputer-komputer yang lain seolah-olah storage tersebut berada pada disk lokal di masing-masing komputer yang me-mount-nya.

Pada sistem skala besar, dibutuhkan sistem file jaringan yang tidak hanya andal namun juga cepat. Sebagai contoh, server pada ISP (Internet Service Provider) yang menyediakan shared storage (pemakaian penyimpanan bersama) yang diakses oleh server-server lainnya, misalnya server SMTP (Simple Mail Transfer Protocol) alias mail, server POP3 (Post Office Protocol 3), server Webmail, dan server IMAP.
Apabila aktivitas semakin tinggi, dibutuhkan akses baca tulis yang cepat namun aman, agar tidak terjadi kehilangan data dan/atau keterlambat penulisan data ke shared storage (NFS).

Untuk itulah, diperlukan tune-up atas server NFS maupun komputer-komputer yang melakukan mount atau pemetaan atas shared storage yang ada. Tentu saja apa yang ada di artikel ini bukanlah rumus mati untuk mencapai kinerja yang optimal, karena setiap komputer yang melakukan mount (untuk selanjutnya kita sebut dengan komputer klien atau klien) pasti mempunyai karakteristik yang berbeda-beda, namun setidaknya bisa dijadikan acuan umum untuk melakukan tune-up.

1. Mempersiapkan infrastruktur jaringan dengan tepat

Tak kenal maka tak sayang. Peribahasa tersebut sedikit banyak juga berpengaruh dalam urusan genjot menggenjot kinerja ini. Meskipun komputer yang dipakai sudah paling canggih, tetapi bila infrastruktur jaringan yang dipakai sudah kadaluwarsa, jadinya tidak maksimal.

Persiapan infratruktur jaringan yang tepat meliputi:

Pemilihan Network Adapter (Kartu Ethernet).
Rata-rata, network adapter masa kini sudah mendukung kecepatan 100 Mbps dan harganya tidak terlalu mahal. Gunakanlah pada seluruh komputer yang terintegrasi dalam sistem NFS ini.
Jika pemakaian NFS dimaksudkan hanya terjadi dalam subnet internal, gunakanlah network adapter yang terpisah dengan subnet eksternal (internet). Ini akan membuat load jaringan pada masing-masing subnet akan menjadi lebih ringan.

Pemakaian Switch atau Router yang tepat.
Pemakaian switch bila dibandingkan dengan pemakaian hub akan membantu kinerja jaringan secara keseluruhan. Gunakanlah switch yang mempunyai speed yang sama dengan network adapter, yaitu minimal 100 Mbps.
Bila dimungkinkan, aturlah MTU (Maximum Transfer Unit) pada router atau switch mendekati nilai umum pada wsize / rsize optimal yang akan diuraikan di bawah ini (pada poin 2).
Perintah tracepath namaserver/2049 dari komputer klien akan menunjukkan nilai MTU yang berlaku saat ini.

Meminimalkan/menghindari collision (tumbukan).
Beberapa network adapter datang dengan setting Auto (Autonegotiation) untuk memilih kecepatan antara 10 dengan 100 Mbps, serta full duplex dengan half duplex. Jika anda sudah mengetahui seluruh infrastruktur jaringan harus dibangun dengan kecepatan 100 Mbps *dan* full-duplex, lakukan setting secara strict pada network adapter. Banyak kasus terjadi, kinerja NFS menjadi amat sangat lambat bahkan putus hanya karena banyaknya collision pada jaringan. Collision dapat dicek dengan perintah ifconfig dengan memperhatikan baris collision.

2. Setting ukuran blok untuk mempercepat transfer

Perintah mount mempunyai beberapa opsi/pilihan, di antaranya wsize dan rsize. Opsi ini dipergunakan untuk menentukan besarnya “potongan” data yang ditransfer dari dan ke server NFS. Ukuran paling umum adalah 4K atau 4096 bytes.

NFS protokol versi 2 (NFS V2) mempunyai limitasi sampai 8K secara teoritis, namun NFS V3 mendukung “potongan” data maksimal sampai dengan 32K. Rata-rata, komputer klien (dalam kasus ini kita anggap komputer yang melakukan mount adalah komputer klien) yang memiliki kernel 2.4.x mendukung “potongan” data sampai dengan 32K.

Setting standar mungkin tidak sesuai dengan karakteristik data yang disalurkan, oleh sebab itu perlu dilakukan eksperimen untuk mencari nilai wsize dan rsize yang tepat. Ini juga tergantung pada usia hardware serta kernel di mana, semakin “uzur” keduanya biasanya tidak mampu menghandle ukuran potongan yang terlalu besar.

Tes atau eksperimen secara sederhana dapat dilakukan dengan kombinasi perintah time dan dd. Contoh:

time dd if=/dev/zero of=/mnt/mountpoint bs=16k count=16384 

akan menyebabkan 16384 blok ditransfer dari komputer klien ke server NFS (dimount di bawah direktori /mnt/mountpoint) dalam potongan-potongan 16K serta waktu transfernya akan dihitung dari awal hingga akhir.

Penggunaan software khusus benchmark seperti Bonnie++ juga dapat dilakukan untuk hasil yang lebih akurat, karena tidak hanya melakukannya secara sequential atau berurutan, namun juga random atau acak.

Lakukan tes tersebut beberapa kali dan buatlah rata-rata waktunya. Apabila perlu, lakukan mount dan unmount sebelum menjalankan tiap tes untuk memastikan setiap cache dibersihkan.

Jika hasil rata-rata sudah diketahui, lakukan mount dan umount lagi dengan nilai wsize dan rsize yang berbeda-beda. Jangan lupa untuk mematuhi batas maksimal besarnya “potongan” data yang sudah ada untuk NFS V2 dan NFS V3.

Jika nilai terbaik sudah ditemukan, silakan lakukan penulisan di file /etc/fstab supaya setiap kali ada restart atau power failure sistem akan melakukan mount otomatis sesuai dengan nilai yang dikehendaki. Misalnya:

server:/direktorinya /mnt/mountpoint rw,async,wsize=8192,rsize=8192 0 0 

3. NFS melalui protokol TCP

Ini adalah fitur baru dari kernel 2.4.x atau yang lebih baru. TCP (Transmission Control Protocol) bekerja lebih baik daripada UDP (User Datagram Protocol) terutama pada jaringan yang tidak andal (misalnya: sering putus). TCP memungkinkan sebuah paket data tunggal ditransmisikan ulang saat jaringan putus, tidak seperti UDP yang mentransmisikan keseluruhan permintaan RPC (Remote Procedure Call).

Namun TCP bukanlah stateless protocol seperti UDP, sehingga bila server crash, klien yang terkoneksi akan hang dan perlu dilakukan lagi un-mount dan mount.

Tetap gunakanlah UDP jikalau anda merasa yakin jaringan internal anda yang dipergunakan untuk koneksi NFS andal dan hampir-hampir tidak pernah putus.

4. Nilai Timeout dan Retransmission

Perintah mount yang lain adalah timeo dan retrans berfungsi untuk mengendalikan permintaan UDP saat mengalami timeout pada klien jika terjadi hal-hal berikut: paket di-drop, jaringan padat, atau hal lainnya yang menyebabkan paket tidak sampai.

Opsi timeo menunjukkan waktu dalam sepersepuluh detik, bahwa klien akan menunggu sampai ia memutuskan untuk tak mendapatkan balasan dari server, serta harus mencoba untuk mengirim permintaan lagi. Standarnya adalah 7/10 detik.

Sedangkan retrans mengizinkan penentuan jumlah timeout yang dikehendaki sebelum klien “menyerah” dan menampilkan pesan Server not responding. Nilai standarnya adalah tiga klai. Sekali klien menampilkan pesan ini, akan diteruskan untuk mencoba mengirimkan permintaan, namun hanya sekali sebelum menampilkan pesan kesalahan jika timeout berikutnya terjadi.

Saat kontak tersambung kembali klien akan menggunakan nilai yang benar serta menampilkan pesan Server OK.

Penyesuaian nilai timeo dan retrans hanya dilakukan bila dijumpai transmisi yang dilakukan berulang-ulang (excessive retransmission).

5. Jumlah proses atau instance NFSD daemon pada server NFS

Pada umumnya, setiap distro Linux yang menyertakan nfsd akan memberikan 8 proses yang bisa dilihat dari variabel RPCNFSDCOUNT yang ada pada initscript. Sebenarnya ini adalah standar dari Sun dan mungkin cukup untuk jaringan pada umumnya.

Jika klien yang melakukan mount dan/atau trafik yang terjadi lebih banyak/tinggi penambahan jumlah proses perlu dilakukan. Yang menjadi pertanyaan adalah: Kapan saya harus melakukannya?

Mari kita lihat isi /proc/net/rpc/nfsd (jika menggunakan kernel 2.4.x atau yang lebih baru) dengan cara langsung melakukan cat atasnya. Perhatikan baris th yang menunjukkan jumlah detik yang digunakan oleh thread dalam persentase dari jumlah maksimal yang diizinkan.
Jikalau menjumpai nilai yang tinggi sejumlah tiga urutan, mungkin sudah saatnya nilai instance dinaikkan.

6. Batasan memory pada antrian masukan

Nilai rmem_default pada kernel 2.2.x dan 2.4.x adalah 64K. Nilai ini adalah antrian masukan socket di mana permintaan menunggu saat permintaan sedang diproses.

Antrian tersebut perlu untuk klien yang memiliki aktivitas baca yang tinggi serta server yang mempunyai aktivitas tulis yang tinggi. Jika server menjalankan 8 proses nfsd, setiap proses hanya memiliki 64K/8 alias 8K untuk menyimpan permintaan tulis saat server memprosesnya.

Juga, antrian keluaran socket, penting untuk klien dengan load penulisan tinggi dan server dengan aktivitas baca yang tinggi, yaitu wmem_default juga mempunyai ukuran standar yang terbatas, yaitu 64K.

Silakan dinaikkan sampai batas yang wajar, misalnya 128K, untuk dapat meningkatkan kinerja sistem file jaringan (NFS), namun jangan sampai melampaui nilai maksimalnya (rmem_max dan wmem_max ), dengan cara sebagai berikut:

Ubah nilainya: echo 131071 > /proc/sys/net/core/rmem_default
echo 131071 > /proc/sys/net/core/rmem_max

Lakukan restart pada NFS: /etc/rc.d/init.d/nfs restart
 

7. Pilih mana? Sinkron atau Asinkron?

Secara standar, perintah mount akan memilih asynchronous saat klien melakukan pemetaan (mounting) atas direktori di server NFS. Ini terjadi baik di NFS V3 maupun V2.

Asynchronous akan menyebabkan server segera melakukan reply atas permintaan klien seolah-olah seluruh proses yang lama sudah selesai ditulis seluruhnya ke storage. Metode ini akan meningkatkan kinerja dengan resiko data corrupt jika server mati atau crash saat data belum ditulis seluruhnya ke storage, sedangkan synchronous berlaku sebaliknya.

Oleh sebab itu, gunakan opsi async hanya dan jika hanya anda yakin bahwa power failure atau hardware failure kecil sekali kemungkinannya, sedangkan anda membutuhkan kecepatan transfer melalui NFS dalam kapasitas yang besar.

8. Gunakan Journaling File System

Journaling File System semacam ext3 atau reiserfs memang lebih lambat daripada sistem file ext2 atau yang kita kenal dengan nama Linux Native, namun sangat menguntungkan pada storage berkapasitas besar atau sangat besar (misalnya per partisi > 20 GB).

Keunggulannya akan tampak saat sistem tiba-tiba crash dan memerlukan filesystem check di awal saat booting kembali. Journaling File System akan memerlukan waktu lebih singkat daripada ext2.

Sebagai catatan, gunakan kernel lebih baru daripada 2.4.7 jika memutuskan untuk menggunakan reiserfs sebagai sistem file partisi baru anda yang nantinya akan dimount oleh klien-klien NFS.

Sistem file ext3 atau reiserfs dapat dikombinasikan dengan opsi async pada poin 7 di atas untuk mendapatkan kecepatan transfer sekaligus keamanan data, ini dikarenakan sistem file terjurnal akan selalu mengambil alih sistem update (baca/tulis) pada sebuah storage, sehingga mengurangi data-loss.

Sebagai tambahan informasi, jurnal pada sistem file terjurnal juga dapat tersimpan pada device terpisah seperti pada flash memory, sehingga berlangsung lebih cepat (karena berupa memori, bukan disk) serta lebih aman (karena berupa memori non-volatil).