Linux系统调优:调整请求队列数提高磁盘吞吐量

post by rocdk890 / 2013-7-20 9:13 Saturday linux技术
在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以
动态调整请求队列数来提高效率,默认的请求队列数存放在 /sys/block/xvda/queue/nr_requests 文件中,
注意:/sys/block/xvda ,这里 xvda 写的是你自己的硬盘名,因我的是vps所以是xvda,有可能的参数是 sda hda....等等。
如果你不清楚可以,fdisk -l查看一下自己的物理磁盘名称。

[root@leda03 public_html]# fdisk -l

Disk /dev/xvdd: 117 MB, 117549056 bytes
255 heads, 63 sectors/track, 14 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/xvdd doesn't contain a valid partition table

Disk /dev/xvda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1          13      104391   83  Linux
/dev/xvda2              14        2610    20860402+  8e  Linux LVM

下面我们来测试:
# cat /sys/block/xvda/queue/nr_requests
128

默认请求队列数为:128。现在我们来测试请求一个1G大小的文件:

# time dd if=/dev/zero of=test bs=1M count=1000 

1000+0 records in 
1000+0 records out 

1048576000 bytes (1.0 GB) copied, 60.2789 seconds, 17.4 MB/s
real    1m0.553s

user    0m0.043s 

sys     0m6.363s


由此看出,共花了1分55秒,现在把 nr_requests 的 128 改成 512 再试下:
# echo 512 > /sys/block/xvda/queue/nr_requests 

# cat /sys/block/hda/queue/nr_requests 
512 

# rm -f  test 
# time dd if=/dev/zero of=test bs=1M count=1000 
1000+0 records in 
1000+0 records out 

1048576000 bytes (1.0 GB) copied, 28.298 seconds, 37.1 MB/s
real    0m28.787s
user    0m0.040s
sys     0m5.982s

同样大小的文件,改成 512 后只需要 28  秒钟,由此可以结论出,通过适当的调整
nr_requests 参数可以大幅提升磁盘的吞吐量,缺点就是你要牺牲一定的内存。


建议:通过适当的调整nr_requests 参数可以大幅提升磁盘的吞吐量,缺点就是你要牺牲一定的内存。但是这个牺牲的比例,目前 我还没有一个比较严格的数字,所以大家还是要慎重的去更改为好,最后先做一个压力测试,再去进行更改。当然如果你服务器的内存很足,就不必有此顾虑了。
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-406.html

标签: 优化 linux 系统 磁盘 吞吐量

  1. 2016-09-27 13:47
    @platinum:这个测试有可能不是很严谨,但我只是告诉大家有这么一个方法,毕竟用不用在你们自己手上.
  1. gravatar platinum
    2016-09-24 17:59
    两次测试之间重启过系统吗?
    如果没有,何以见得不是 Linux 系统自身的 Cache 机制缓存到 memory 里了呢?
    这个测试严谨程度值得推敲

评论: