Linux Disk Performance Tuning

Configuring the Linux Kernel for Hardware RAID

The first point to note here is that the RAID is hardware based. There is absolutely no need for the Linux kernel to perform any kind of disk buffering. Let the RAID controller handle all of the disk I/O.

Configuring the Linux scheduler and changing the default from [cfq] gives I/O improvements. On my system, this change alone increased average I/O speeds on the NFS server from 15MB/s to 54MB/s with a maximum read speed of 95MB/s.

echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler
echo "noop" > /sys/block/cciss\!c0d1/queue/scheduler

The RAID controller and Network cards must not be on shared interrupts.

To check for shared interrupts:
cat /proc/interrupts

Stop all unnecessary services as shown in the example below.

chkconfig --list
chkconfig --level 3 xfs off
chkconfig --level 3 sendmail off
chkconfig --level 3 gpm off

Configuring HP RAID Controllers For Video Streaming 

Download the hpacucli utility from HP website. Search for HP Array Configuration Utility CLI for Linux

For a video streaming server set RAID Controller cache ratio to 75% read and 25% write.

hpacucli ctrl all show config detail
hpacucli ctrl slot=2 modify cacheratio=75/25

Configuring Linux Disk Read-Ahead 

The read-ahead disk cache in the example below is set 512KB. However, this can vary depending on what the system is being used for. For a video streaming server, disk access is mostly sequential, and would benefit from a larger read-ahead. Database servers seek randomly, and would not benefit from read-ahead.

/sbin/blockdev --setra 1024 /dev/cciss/c0d0
/sbin/blockdev --setra 1024 /dev/cciss/c0d1

Configuring Linux Filesystems 

For faster disk writes, use the data=journal option and prevent updates to file access times which in itself results in additional data written to the disk.

/dev/cciss/c0d1 /mnt/nfs ext3 defaults,noatime,data=journal