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. C++ 学习宝藏网站分享

    C++ 学习宝藏网站分享 1. C++ 在线参考手册 Cppreference https://zh.cppreference.com C++ 开发者必备的在线参考手册,是我最常访问的 C++ 网站之 ...

  2. <Python全景系列-1> Hello World,1分钟配置好你的python环境

    <从此开始:1分钟配置好你的python环境> 欢迎来到我们的系列博客<Python360全景>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题, ...

  3. 活动预告| 字节跳动基于DataLeap的DataOps最佳实践

    DataOps概念从2014年首次被提出,不断演化和发展,在2018 年Gartner 的数据管理成熟度曲线中确定了 DataOps,标志着 DataOps 被业界接纳和认可.随着数字化转型的推进以及 ...

  4. 火山引擎 DataTester“智能发布”:覆盖产品研发、测试、上线全流程,一站式智能管理 A/B 实验

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 A/B 测试是企业产品新老功能迭代时,进行效果监测的方法.通过 A/B 测试,可以提高功能改动给产品带来正向收益的确定性. ...

  5. xv6book阅读 chapter2

    一个操作系统至少应该满足三个需求:多路复用.隔离.交互.本章主要介绍如何组织操作系统来实现以上的三个需求,本文关注的是一种围绕单核进行设计的方法,这种设计是被许多uinx操作系统所使用的.Xv6运行在 ...

  6. linux tar解压命令总结

    把常用的tar解压命令总结下,当作备忘: -c:建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可 ...

  7. luoguP1419 寻找段落(二分答案+单调队列)单调队列DP求在区间[l,r] 中长度至少为 m 的最大平均值

    模板:单调队列DP求在区间\([l,r]\) 中长度至少为 \(m\) 的最大平均值 题目链接:Here 题意 给定一个长度为 \(n\) 的序列 \(a_1\) ~ \(a_n\) ,从中选取一段长 ...

  8. 一篇文章教你从入门到精通 Google 指纹验证功能

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EHomjBy4Tvm8u962J6ZgsA作者:Sun Daxiang Google 从 An ...

  9. OpenSCA用开源的方式做开源风险治理:Why? What? How?

    随着容器.微服务等新技术的快速迭代,开源软件已成为业界主流形态,开源和云原生时代的到来导致软件供应链越来越趋于复杂化和多样化,网络攻击者开始采用软件供应链攻击作为击破关键基础设施的的重要突破口,从而导 ...

  10. C#开源跨平台的多功能Steam工具箱&GitHub加速神器

    前言 作为一个程序员你是否会经常会遇到GitHub无法访问(如下无法访问图片),或者是访问和下载源码时十分缓慢就像乌龟爬行一般.今天分享一款C#开源的.跨平台的多功能Steam工具箱和GitHub加速 ...