nr_requests 以及 queue_depth的学习与了解


背景

冯诺依曼的计算机体系结果里面
运算器,存储器是核心. 但是将核心的产生的结果推送出去的其实是IO
IO虽然不是像运算器和存储器那么核心, 但是他的性能不好会严重的影响整体的性能响应 前段时间遇到了很多IO相关的问题, 这一块学习不是很彻底,
只是在一个周末学习了 IOWAIT和 %busy 等的概念.
想着趁着项目间隙, 学习一下内核里面关于IO的一两个核心参数.
太多了记不住. 也没有实际意义.

回顾

IOWAIT  理解应该是用户态IO开始到获得IO的整体时间. 他不仅包含了IO处理的时间SVCTIME 还包含了队列内的时间.
SVCTIME 是IO设备处理时间. 他主要是依靠设备的能力, 比如IOPS,吞吐量,以及寻址响应时间等. 一个IO的处理时间核心就是这两处. SVCTIME 内核应该没法控制, 是驱动连接具体的外设来处理.
队列的时间其实要看设备支持的队列情况, 如果硬盘支持多队列, 但是操作系统只有一个队列,那么就会浪费性能. %busy: busy的参数随着最近几年的计算机的迅猛发展其实已经没有了他本来的意义.
计算模式是 队列中有IO操作的时间/抽样的实际时间.
因为多对列的出现. 和队列深度的发展. 有任务不一定性能差, 没任务不一定性能好.

关于nr_requests的理解

这两个参数其实不是 /proc下的内核参数
还是/sys下面的block设备的参数. 第一个nr_requests的参数为之一般为
/sys/block/sda/queue/nr_requests
注意sda 为 设备名称 很多虚拟机一般是 vda
很多linux 默认的 队列数 512
需要注意 这个队列的含义是队列的数量.
之前的AHCI 接口硬盘一般只允许一个队列
队列深度为 32
最新的NVME的接口硬盘一般支持 64k个队列
每个队列支持的深度为 64k 更多的队列会带来性能的提升. 但是队列多了对CPU资源和内存资源都有更高的要求.
欲戴王冠必承其重.

关于queue_depth的理解

一般queue_depth与nr_requests不在一个路径下面
nr_requests 是在 queue 目录下面
但是 queue_depth 其实是在 device 目录下面.
也就是说 队列的数量 其实是 队列的属性
队列的深度, 更像是设备的属性.
设备支持的深度的情况.
很多linux 发行版默认的数值是 1014
cat /sys/block/sda/device/queue_depth 如果设备有余力可以适当改大这个参数. 能够更好的实现性能.

队列数量与队列深度的关系

队列数量是有多少IO操作在排队.
队列深度是硬件可以支持多少IO操作同时执行. 因为队列有写队列和读队列, 所以所有的IO队列应该是 2*nr_requests 队列深度就是真正发给设备的IO操作. 他可以体现硬件的并发能力.
最早的HDD 支持一个队列, 队列深度是32. 就是说排队的需要少.
一次最多可以并行执行32个IO操作. 这是磁盘电梯算法的极限了. 现阶段SSD 已经没有磁头和步进电机的物理设备. 使用NVME的协议后他的队列数量已经得到了巨大的提升.

其他理解

之前IO的调度有很多算法像是 deadline 后者是 cfq 算法.
但是随着SSD设备的到来 最好的调度据说是noop 理论上计算IO需要使用不同的队列深度, 队列已经IO调度算法进行处理. 有时候可以在生产环境上面使用 biohist 等ebpf命令获取IO 的block的大小.
然后针对性的调整系统内核参数. 调度算法.
然后使用FIO等工具进行压测, 获取最好的性能结果.

nr_requests 以及 queue_depth的学习与了解的更多相关文章

  1. Mysql : L闪存卡linux中的内核参数设置

    将 Nytro WarpDrive 加速卡配置为文件系统 本节说明的操作使您可调整 Nytro WarpDrive 加速卡,增强使用 Oracle Linux with Unbreakable Ent ...

  2. linux驱动开发之块设备学习笔记

    我的博客主要用来存放我的学习笔记,如有侵权,请与我练习,我会立刻删除.学习参考:http://www.cnblogs.com/yuanfang/archive/2010/12/24/1916231.h ...

  3. RHCA学习笔记:RH442-Unit6 磁盘性能调整

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://alansky.blog.51cto.com/634963/654451 UNIT ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  10. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

随机推荐

  1. 过亿云资源运维管控难?华为云CloudMap带你喝着咖啡做运维

    摘要:华为云站点数字化平台CloudMap携手华为云图引擎GES打造云服务全栈拓扑,网络流量路径和云服务动态依赖等空间关系数据,支撑现网运行态风险识别和分钟级定位定界,构建业界领先的数字化能力. 本文 ...

  2. Python图像处理丨图像的灰度线性变换

    摘要:本文主要讲解灰度线性变换. 本文分享自华为云社区<[Python图像处理] 十五.图像的灰度线性变换>,作者:eastmount. 一.图像灰度线性变换原理 图像的灰度线性变换是通过 ...

  3. Python 可以满足你任何 API 使用需求

    摘要:在本教程中学到的概念和技术将允许您使用自己喜欢的任何 API 进行练习,并使用 Python 来满足您可能拥有的任何 API 使用需求. 本文分享自华为云社区<Python 和 API:读 ...

  4. 这8个JS 新功能,你应该去尝试一下

    摘要:本文主要介绍几个已经进入stage4的提案,这几个提案有望在2022年逐步纳入标准. 本文分享自华为云社区<2022 年你应该尝试的 8个 JavaScript 新功能>,作者:前端 ...

  5. 让数据大白于天下:GCC插件实现代码分析和安全审计

    摘要: 如何利用GCC的插件功能,辅助安全分析人员实现对程序的安全审计.漏洞检测.安全加固等自动化处理能力,提升分析效率和精准度. 本文分享自华为云社区<利用GCC插件实现代码分析和安全审计&g ...

  6. Linux设置SSH连接时间,解决断开速度快,不停输密码问题: connection reset by

    ssh 登录,没有设置ssh key 登录的情况下(临时登录),断开速度太快.如何解决? 修改:/etc/ssh/ssh_config 文件 #设置连接保持的时间ClientAliveInterval ...

  7. vmware14安装centos8

    vmware14 推荐,直接选取centos8镜像,然后安装,发现是无法安装的. 然后选择自定义安装,然后,选择客户机操作系统,只有centos7 64位,没有centos8 64位的. 搜了一下,看 ...

  8. Google Guava ListeningExecutorService

    POM <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> < ...

  9. 【django drf】 阶段练习

    目录 需求 settings.py views.py urls.py serializers.py permissions.py page.py authenticate.py model.py 权限 ...

  10. 2021 年如何学习 Android,一位 5 年中大厂老哥跟你聊聊

    本文首发我的微信公众号:程序员徐公 大家好,我是程序员徐公,加上实习,有五年中大厂经验.今天,我们一起来聊一聊如何自学 Android. 光阴似箭,日月如梭,时间真的过得飞快. 加上实习,从事 And ...