Linux操作系统块设备参数调优

       

目录

一、队列深度

二、调度算法

三、预读量

四、I/O对齐


一、队列深度

        队列深度决定了给块设备写I/O的最大并发数,对于Linux系统,默认值为128,一般情况下不建议用户修改此参数。用户可以使用cat命令查询当前块设备队列深度。

 linux-ob3a:~ # cat /sys/block/sdc/queue/nr_requests

128 

        当对系统进行极限性能测试时,为了增大主机写I/O的压力及I/O在队列中被合并的概率,可以适当的增大此参数。可以通过如下方法临时修改块设备的队列深度。

echo 256 > /sys/block/sdc/queue/nr_requests

https://download.huawei.com/mdl/image/download?uuid=298fc6778043430aac2b93a309236082

临时修改块设备队列深度可以用于性能调优,当应用服务器重启后,块设备队列深度将恢复为默认值。

二、调度算法

        Linux操作系统2.6内核支持四种块设备调度算法:noop,anticipatory,deadline和cfq。默认的调度算法为cfq。用户可以使用cat命令查询当前块设备调度算法。

 linux-ob3a:~ # cat /sys/block/sdc/queue/scheduler

noop deadline [cfq]  

        调度算法配置不当会对系统性能产生影响,如I/O并发等。可以通过如下方法临时修改块设备的调度算法。

echo noop > /sys/block/sdc/queue/scheduler

https://download.huawei.com/mdl/image/download?uuid=298fc6778043430aac2b93a309236082

临时修改调度算法可以用于性能调优,当应用服务器重启后,调度算法将恢复为默认值。

三、预读量

        Linux的预读功能类似于阵列的预读算法,仅对顺序读有效且会对顺序流进行识别,并提前读取“read_ahead_kb”(单位为扇区)长度的数据。例如,SUSE 11操作系统预读量的默认值为512扇区,即256KB。用户可以使用cat命令查询当前块设备预读量。

 linux-ob3a:~ # cat /sys/block/sdc/queue/read_ahead_kb

512 

当业务需要对大量的大文件进行读取时,可以通过适当调大此参数提升性能。可以通过如下方法修改块设备的预读量。

echo 1024 > /sys/block/sdc/queue/read_ahead_kb

四、I/O对齐

        在Linux或Windows Server 2003之前版本的操作系统中使用MBR格式创建分区时,会将磁盘的最开始63个扇区预留给主引导记录和分区表,第一个分区默认从第64扇区开始。这造成了主机的数据块(数据库或文件系统)与存储数据块不对齐,导致I/O处理效率降低。

Linux操作系统解决I/O不对齐的方法有两种:

  • 方法一:更改分区开始位置。

        在Linux系统中使用MBR格式创建分区时,建议进入fdisk命令的专家模式,设置首分区的开始位置为LUN的第二个Extent的开始位置(Extent大小默认是4MB)。下面的快速命令用在/dev/sdb上使用MBR格式创建1个分区,使用/dev/sdb的全部空间,开始扇区设置为8192,即4MB。

printf "n\np\n1\n\n\nx\nb\n1\n 8192\nw\n" | fdisk /dev/sdb

  • 方法二:直接采用GPT格式分区。

        下面的快速命令用于在/dev/sdb上使用GPT格式创建1个分区,使用/dev/sdb的全部空间,开始扇区设置为8192,即4MB。

parted -s -- /dev/sdb "mklabel gpt" "unit s" "mkpart primary 8192 -1" "print"

对于Windows Server 2003之前版本的系统中创建MBR分区时,建议使用diskpart命令,设置分区对齐。

diskpart> select disk 1

diskpart> create partition primary align=4096

你可能感兴趣的:(Linux,服务器,linux,性能优化)