关于系统进程和io的优先级,我们这么玩

关于系统进程和io的优先级,我们这么玩

首先,如果不是特别老的内核,io是可以设置优先级的。
我们用fio工具来测试下
进程优先级10,io优先级7,调度类别为idle

fio -prioclass=3 -prio=7 -nice=10 -filename=/dev/md1 -direct=1 -iodepth 10 -thread -rw=randrw -rwmixread=100 -ioengine=psync -bs=16k -size=2000G -numjobs=30 -number_ios=100000 -runtime=100 -group_reporting -thinktime_spin=2000 -name=mytest1

进程优先级-10,io优先级0(high),调度类别为rt(实时)

fio -prioclass=1 -prio=0 -nice=-10 -filename=/dev/md1 -direct=1 -iodepth 10 -thread -rw=randrw -rwmixread=100 -ioengine=psync -bs=16k -size=2000G -numjobs=30 -number_ios=100000  -group_reporting -thinktime_spin=2000 -name=mytest1

如上2条命令或者自己调整下,能立马看到io优先级的效果


第二个实验,我们来验证下fio这个工具的thinktime thinktime_spin的用法。事先说下,thinktime是在向系统提交io请求之前,阻塞多长时间。thinktime_spine是阻塞的时间段内,有多少是通过cpu死循环的自旋来实现的。单位是microseconds

1s=103limiseconds=106microseconds

命令入下

fio -prioclass=1 -prio=0 -nice=-10 -filename=/dev/sda -direct=1 -iodepth 10 -thread -rw=randrw -rwmixread=100 -ioengine=libaio -bs=16k -size=2G -numjobs=30  -group_reporting -thinktime=2000000 -thinktime_spin=2000000 -name=mytest1

第三个实验,我们来测试进程的优先级对进程获取cpu的影响

fio -prioclass=1 -prio=0 -nice=-19 -filename=/dev/sda -direct=1 -iodepth 10 -thread -rw=randrw -rwmixread=100 -ioengine=libaio -bs=16k -size=2G -numjobs=30 -group_reporting -thinktime=2000000 -thinktime_spin=2000000 -name=mytest1 > /dev/null 2>&1
fio -prioclass=1 -prio=0 -nice=19 -filename=/dev/sda -direct=1 -iodepth 10 -thread -rw=randrw -rwmixread=100 -ioengine=libaio -bs=16k -size=2G -numjobs=30 -group_reporting -thinktime=2000000 -thinktime_spin=2000000 -name=mytest1 > /dev/null 2>&1

解释:为了使得系统cpu资源不足而是优先级有意义(如果充足的话优先级就没用了,可以满足所有进程的需求),我们把每一个进程都启动30个线程(16核心)。一组用最低优先级,一组用最高优先级。大家可以看到效果非常显著。买个关子,看这第三个实现有没有同学在2.6以上的内核做的出来,这里有小坑一个^_^


之所以有以上的实验,是因为笔者在工作过程中,遇到过系统资源不足,但是需要有优先级的去给各个事务去分配的情况,通过以上2中方式,我们可以把优先级低但是总量大,持续时间长的任务从系统的高优先级任务中排除。(一般高优先级任务小而且有突发的特性)。

你可能感兴趣的:(linux)