[转帖]linux 磁盘队列深度nr_requests 和 queue_depth
linux 磁盘队列深度nr_requests 和 queue_depth
nr_requests 和 queue_depth
本文主要介绍Linux 操作系统中 nr_requests 和 queue_depth的参数意义和工作原理。以及结合iostat 的avgqu-sz 之间关系分析。
1.nr_requests 和 queue_depth
操作系统中nr_requests参数,可以提高系统的吞吐量,似乎越大越好,但是该请求队列的也不能过大,因为这样会消耗大量的内存空间。该值的调整需要综合多处因素,
比如: 文件系统、sheduler类型、io的特点。
命令: echo xxx > /sys/block//queue/nr_requests,nr_requests的大小设置至少是/sys/block//device/queue_depth的两倍,所以,修改nr_requtests的时候要注意。
[root@node-1 ~]# cat /sys/block/sdj/queue/nr_requests
256
[root@node-1 ~]# cat /sys/block/sdj/device/queue_depth
64
2.修改配置值
$ echo “512” > /sys/block/sda/queue/nr_requests IO调度队列大小
$ echo “512” > /sys/block/sda/device/queue_depth 磁盘队列深度
3.nr_requests 和 queue_depth 区别
- nr_requests:请求的IO调度队列大小
- queue_depth:请求在磁盘设备上的队列深度
- I/O调度器中的最大I/O操作数是nr_requests * 2。读和写是分开的。
- 已经分配到底层设备的I/O操作是queue_depth。
- 一个磁盘设备的I/O操作的最大未完成限制为(nr_requests * 2)+(queue_depth) 。对应iostat 的avgqu-sz。
英文解释
nr_requests
Specifies the maximum number of read and write requests that can be queued at one time.
The default value is 128, which means that 128 read requests and 128 write requests can be queued before the next process to request a read or write is put to sleep. For latency-sensitive applications, lower the value of this parameter and limit the command queue depth on the storage so that write-back I/O cannot fill the device queue with write requests.
When the device queue fills, other processes attempting to perform I/O operations are put to sleep until queue space becomes available.
Requests are then allocated in a round-robin manner, which prevents one process from continuously consuming all spots in the queue. The maximum number of I/O operations within the I/O scheduler is nr_requests*2.
As stated, nr_requests is applied separately for reads and writes.
Note that nr_requests only applies to the I/O operations within the I/O scheduler and not to I/O operations already dispatched to the underlying device. Therefore, the maximum outstanding limit of I/O operations against a device is (nr_requests*2)+(queue_depth) where queue_depth is /sys/block/sdN/device/queue_depth, sometimes also referred to as the LUN queue depth.
You can see this total outstanding number of I/O operations in, for example, the output of iostat in the avgqu-sz column. 指定一次可以排队的读请求和写请求的最大数目。
默认值是128,这意味着128个读请求和128个写请求可以在请求读或写的下一个进程进入睡眠状态之前排队。 对于对延迟敏感的应用程序,可以降低该参数的值,并限制存储上的命令队列深度,以防止回写I/O用写请求填满设备队列。
当设备队列满时,其他试图执行I/O操作的进程将进入休眠状态,直到队列空间可用。
然后以循环的方式分配请求,这可以防止一个进程持续地消耗队列中的所有位置。 I/O调度器中的最大I/O操作数是nr_requests*2。
如前所述,对于读和写,分别应用nr_requests。
注意,nr_requests仅适用于I/O调度器中的I/O操作,而不适用已经分配到底层设备的I/O操作。因此,对一个设备的I/O操作的最大未完成限制为(nr_requests*2)+(queue_depth),其中queue_depth为/sys/block/sdN/device/queue_depth,有时也称为LUN队列深度。
例如,您可以在avgqu-sz列中的iostat输出中看到这个未完成的I/O操作总数。
4.iostat 的avgqu-sz
该值大小为:(nr_requests*2)+(queue_depth)
5.lsscsi -l 的队列大小
Lun queue depth值来自 /sys/block/sdj/device/queue_depth
[root@node-1 ~]# echo "128" >/sys/block/sdj/device/queue_depth
[root@node-1 ~]# lsscsi -l | grep -A 1 sdj
[0:0:16:0] disk SEAGATE ST1000NX0453 NS02 /dev/sdj
state=running queue_depth=128 scsi_level=7 type=0 device_blocked=0 timeout=90
[root@node-1 ~]# echo "256" >/sys/block/sdj/device/queue_depth
[root@node-1 ~]# lsscsi -l | grep -A 1 sdj
[0:0:16:0] disk SEAGATE ST1000NX0453 NS02 /dev/sdj
state=running queue_depth=256 scsi_level=7 type=0 device_blocked=0 timeout=90
6.iostat
The default value is 1 (enabled).
Setting iostats to 0 disables the gathering of I/O statistics for the device, which removes a small amount of overhead with the I/O path.
Setting iostats to 0 might slightly improve performance for very high performance devices, such as certain NVMe solid-state storage devices.
It is recommended to leave iostats enabled unless otherwise specified for the given storage model by the vendor. If you disable iostats, the I/O statistics for the device are no longer present within the /proc/diskstats file.
The content of /sys/diskstats is the source of I/O information for monitoring I/O tools, such as sar or iostats.
Therefore, if you disable the iostats parameter for a device, the device is no longer present in the output of I/O monitoring tools.缺省值为1(启用)。
将iostats设置为0将禁用收集设备的I/O统计信息,这将减少I/O路径的少量开销。
将iostats设置为0可能会略微提高非常高性能设备的性能,比如某些NVMe固态存储设备。
除非供应商为给定的存储模型特别指定,否则建议保持启用iostats。
如果禁用iostats,设备的I/O统计信息将不再存在于/proc/diskstats文件中。
/sys/diskstats的内容是用于监视I/O工具(如sar或iostats)的I/O信息的来源。
因此,如果对某个设备禁用iostats参数,该设备将不再出现在I/O监控工具的输出中。
[转帖]linux 磁盘队列深度nr_requests 和 queue_depth的更多相关文章
- IO队列深度max_queue_depth对系统性能的影响
前段时间,发生了一个问题引起了我对IO队列深度的研究. 存储服务器中linux kernel的mpt2sas驱动模块,将max_queue_depth设置为1024时,引起系统加载驱动时卡死,而调整为 ...
- Linux磁盘IO监控[zz]
磁盘 I/O 监控是 Unix/Linux 系统管理中一个非常重要的组成部分.它可以监控吞吐量.每秒 I/O 数.磁盘利用率.服务时间等信息,并且在发现异常时,发送告警信息给系统管理员,便于系统管理员 ...
- MySQL 调优基础(四) Linux 磁盘IO
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
- 条带深度 队列深度 NCQ IOPS
http://blog.csdn.net/striping/article/details/17449653 IOPS 即I/O per second,即每秒进行读写(I/O)操作的次数,多用于数据库 ...
- linux磁盘及分区详解
1.Linux 分区简介 1.1 主分区 vs 扩展分区 硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extend ...
- Linux - 磁盘操作
Linux 磁盘常见操作 : df -Ph # 查看硬盘容量 df -T # 查看磁盘分区格式 df -i # 查看inode节点 如果inode用满后无法创建文件 du -h 目录 # 检测目录下所 ...
- Linux磁盘分区和挂载
Linux磁盘分区和挂载 分区 分区的方式: mbr分区 最多支持4个主分区 系统只能安装到主分区上 扩展分区要占用一个主分区 MBR最大支持2TB,但拥有最好的兼容性 gtp分区 支持无线多个主分区 ...
- linux磁盘I/O的性能评估
linux磁盘I/O的性能评估 参考自:自学it网,http://www.zixue.it/. (1)使用iostat命令. [test@localhost /]$ iostat -d Linux - ...
- Linux crond任务调度(定时任务),Linux磁盘分区/挂载
一.crond任务调度 1.基本语法 crontab [选项] -e : 编辑 crontab定时任务 -l : 查询crontab -r : 删除当前用户所有的crontab任务 例子: 每分钟执行 ...
- Linux 实用指令(7)--Linux 磁盘分区、挂载
目录 Linux 磁盘分区.挂载 1 分区基础知识 1.1 分区的方式: 1.2 windows 下的磁盘分区 2 Linux分区 2.1 原理分析 2.2 磁盘说明 2.3 使用lsblk指令查看当 ...
随机推荐
- Windows环境下为Android编译OpenCV4.3
Windows环境下为Android编译OpenCV4.3 踩了三四天的坑,今天终于顺利跑通了,原来是toolchain的问题,外网的教程大多都是用opencv source里的toolchain,会 ...
- 4大焕新,华为云CCE带你感受容器化上云体验
本文分享自华为云社区<华为云CCE邀您共同打造最佳容器化上云体验>,作者:云容器大未来 . 在容器化日益成为中大型企业上云主流选择的情况下,容器服务如何能帮助用户更简单快捷的上云.高效可信 ...
- 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
摘要:在本文中总结了4 种方法完美解决 IntelliJ IDEA 控制台中文乱码问题. 前言 IntelliJ IDEA 如果不进行配置的话,运行程序时控制台中文乱码问题会非常严重,严重影响我们对信 ...
- 零代码修改,教你Spring Cloud应用轻松接入CSE
摘要:本文介绍了Sermant Agent的接入原理和如何使用Sermant Agent无修改接入CSE. 本文分享自华为云社区<Spring Cloud应用零代码修改接入华为云微服务引擎CSE ...
- Gartner 权威解读: SBOM 采用率将于2025年达到60%
随着现代软件开发越来越依赖于第三方资源,针对软件供应链的恶意攻击数量也随之激增.据业内权威机构 Gartner 预计,软件物料清单 (SBOM) 的采用率在 2025 年将会达到 60%. Gartn ...
- 火山引擎 DataTester:A/B 测试,让企业摆脱广告投放“乱烧钱”
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在广告投放的场景下,一线广告优化师通常会创建多个计划,去测试不同的广告素材效果.这套方法看似科学,实际上却存在诸多 ...
- 对话 BitSail Contributor | 梁奋杰:保持耐心,享受创造
2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计划第一期,目前已有 13 位外部开发者为 BitSail 社区做出贡献,成为了首批 B ...
- SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
命令如下: mvn install:install-file -Dfile="D:\Projects\lib\com.ibm.mq-7.0.1.3.jar" -DgroupId=c ...
- 【Java爬虫】如何通过 API 递归分页爬取网页数据
前言 在最近的互联网项目开发中,需要获取用户的访问ip信息进行统计的需求,用户的访问方式可能会从微信内置浏览器.Windows浏览器等方式对产品进行访问. 当然,获取这些关于ip的信息是合法的.但是, ...
- drf-Response drf-request.data 序列化类的使用 反序列化新增、修改、删除数据
目录 APIView基本使用 使用原生Django写接口(View + JsonResponse) 使用drf写接口(APIView + drf Response) drf 两种导入View的方式 d ...