Meningkatkan performa ext4

Tips kali ini lebih ditujukan bagi pengguna Linux umum atau dedicated server. Asumsi saya kalau VPS mestinya tidak bisa diganti, tapi kalau salah silahkan dikoreksi. Beban I/O VPS saya belum sebesar itu juga soalnya. Kalau anda install Linux maka akan ada pilihan filesystem kan? Secara default dan direkomendasikan adalah ext4 dibandingkan yang lainnya (ext2, ext2, brtfs, xfs, dan sebagainya). Soal kelebihan kekurangannya silahkan digoogle saja. 🙂

Saya cuma ingin memberitahu bahwa ada flag default ext4 yang mungkin tidak anda butuhkan saat mount filesystem ini. Efeknya ke performa karena memang dibatasi dengan sengaja untuk menjamin integritas data.

Namanya adalah barrier dan ga sengaja menemukannya pas mencari solusi masalah performa ini. Cukup banyak juga korbannya. Hehe. 😀 Akan lebih akurat kalau yang ahli menjelaskan. Pertama adalah dari LWN: https://lwn.net/Articles/283161/

The filesystem code must, before writing the [journaling] commit record, be absolutely sure that all of the transaction’s information has made it to the journal. Just doing the writes in the proper order is insufficient; contemporary drives maintain large internal caches and will reorder operations for better performance. So the filesystem must explicitly instruct the disk to get all of the journal data onto the media before writing the commit record; if the commit record gets written first, the journal may be corrupted. The kernel’s block I/O subsystem makes this capability available through the use of barriers; in essence, a barrier forbids the writing of any blocks after the barrier until all blocks written before the barrier are committed to the media. By using barriers, filesystems can make sure that their on-disk structures remain consistent at all times.

Dan yang kedua sumbernya dari source code Linux pada GitHub: https://github.com/torvalds/linux/blob/master/Documentation/filesystems/ext4.txt#L184

barrier=<0|1(*)>	This enables/disables the use of write barriers in
barrier(*)		the jbd code.  barrier=0 disables, barrier=1 enables.
nobarrier		This also requires an IO stack which can support
			barriers, and if jbd gets an error on a barrier
			write, it will disable again with a warning.
			Write barriers enforce proper on-disk ordering
			of journal commits, making volatile disk write caches
			safe to use, at some performance penalty.  If
			your disks are battery-backed in one way or another,
			disabling barriers may safely improve performance.
			The mount options "barrier" and "nobarrier" can
			also be used to enable or disable barriers, for
consistency with other ext4 mount options.

Kalau anda merasa lebih penting performa dibandingkan keamanan/integritas data maka anda bisa mematikannya.

mount -o remount,nobarrier /

Kita pasang ulang partisi yang sebelumnya dilimit ini, lokasi mount point diatas (/) hanyalah contoh. Misal anda meletakkan database MySQL pada /home/mysql maka bisa yang ini saja sebagai targetnya.

Dari percobaan saya pada server milik teman yang mengalami masalah ini. Prosesnya intensif I/O dari 50 detikan bisa dipangkas jadi 10 detikan saja. Sungguh signifikan jadinya. Bisa dipertimbangkan kalau anda merasa ada masalah yang serupa.

Jangan lupa backup data sebelum menggantinya. Resiko tanggung sendiri lho ya, walaupun saya belum mengalami masalah sampai saat ini.

Tinggalkan komentar