[转帖]linux磁盘IO读写性能优化

linux,磁盘,io,读写,性能,优化 · 浏览次数 : 0

小编点评

**Linux系统请求队列调整** 当大量读请求时,默认的请求队列可能无法处理请求。为了提高效率,我们可以动态调整请求队列数来改善性能。 **默认请求队列数** /sys/block/xvda/queue/nr_requests 文件中存储默认请求队列数,其值为 128。 **调整请求队列数** 我们可以使用 `echo` 或 `rm` 命令修改 `nr_requests` 值。例如: ```bash # echo 512 > /sys/block/xvda/queue/nr_requests # cat /sys/block/hda/queue/nr_requests ``` **测试请求队列数** 我们可以使用 `time` 命令测试请求队列数量是否已更改。例如: ```bash # time dd if=/dev/zero of=test bs=1M count=1000 & # cat /sys/block/xvda/queue/nr_requests ``` **结论** 通过适当的调整 `nr_requests` 参数,我们可以大幅提升磁盘的吞吐量。但是,请注意该操作会牺牲一定的内存,因此谨慎操作。

正文

在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
 
Centos系统


查看磁盘的默认请求队列:
# 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 参数可以大幅提升磁盘的吞吐量,缺点就是你要牺牲一定的内存。但是这个牺牲的比例,目前 我还没有一个比较严格的数字,所以大家还是要慎重的去更改为好,最后先做一个压力测试,再去进行更改。当然如果你服务器的内存很足,就不必有此顾虑了。

与[转帖]linux磁盘IO读写性能优化 相似的内容:

[转帖]linux磁盘IO读写性能优化

在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文件中,注意:/sys/block/xvda ,这里 xvda 写的是你自己的硬盘名,因我的是vps所

[转帖]Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能

文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据)。写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘。这对加速磁盘I/O有很好的效果,但是当数据未写入磁盘时,丢失数据的可能性会增加。 当然,也存在缓存被写爆的

[转帖]018 磁盘 IO 性能监控 / 压测工具 (sar、iotop、fio、iostat)

https://my.oschina.net/u/3113381/blog/5465063 1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:

[转帖]Linux系统IO基准测试方法

https://www.cnblogs.com/wangzhen3798/p/13631848.html 顺序读写测试 主要关注磁盘的吞吐量,即每秒能够读入或者写出多少数据。普通单块机械磁盘顺序写在100MB/s左右,普通单块SSD的顺序写在500MB/s左右。该指标对MQ、ES等以append方式

[转帖]Linux磁盘I/O(一):Cache,Buffer和sync

Cache和Buffer的区别 磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。Linux 中“一切皆文件”,我们平时查看的“文件”是普通文件,磁盘是块设备文件,我们可以通过执行 “ls -l <路径>” 查看它们的区别: $ ls

[转帖]Linux查看硬件信息超强命令sar,以及可视化工具ksar

https://juejin.cn/post/6947470401135968286 一、概述 sar(System Activity Reporter,系统活动情况报告)是Linux下系统运行状态统计工具,可从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU

[转帖]Linux 磁盘I/O 调度算法 说明

2022-08-23 13:031361转载Linux 1 Linux 4.0 IO协议栈框架图 I/O 调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 Linux 4.0 IO协议栈框架图 I/O调度程序的总结 当向

[转帖]《Linux性能优化实战》笔记(十五)—— 磁盘IO的工作原理

前一篇介绍了文件系统的工作原理,这一篇来看看磁盘IO的工作原理 一、 磁盘 1. 按存储介质分类 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。 机械磁盘,也称为硬盘驱动器(Hard Disk Driver,HDD),主要由盘片和读写磁头组成,数据存储在盘

[转帖] Linux命令拾遗-使用blktrace分析io情况

https://www.cnblogs.com/codelogs/p/16060775.html 简介# 一般来说,想检查磁盘I/O情况,可以使用iostat、iotop、sar等,但这些命令只能做一个整体的了解,没法具体到某一次io的详细情况,而今天介绍的blktrace就可以深入到Linux I

[转帖] Linux命令拾遗-使用blktrace分析io情况

https://www.cnblogs.com/codelogs/p/16060775.html 简介# 一般来说,想检查磁盘I/O情况,可以使用iostat、iotop、sar等,但这些命令只能做一个整体的了解,没法具体到某一次io的详细情况,而今天介绍的blktrace就可以深入到Linux I