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. throws和try、catch有什么区别?throws如何使用?

    在Java中,异常处理是非常重要的一部分.当程序出现异常时,我们需要对其进行处理以确保程序的正确性和可靠性.Java提供了两种异常处理机制:throws和try.catch. 区别 throws和tr ...

  2. vue全屏

    <template> <div> <img src="../assets/fangda.png" @click="toggleFullscr ...

  3. 干货分享丨轻松玩转 Huawei LiteOS 传感框架

    摘要:LiteOS传感框架将物联网终端设备上不同类型的传感器统一管理,通过抽象不同类型传感器接口,屏蔽其硬件细节,做到"硬件"无关性,非常方便于物联网设备的开发.维护和功能扩展. ...

  4. OCR性能优化:从神经网络到橡皮泥

    摘要:在这个算力还可以的时代,我们的研究人员一方面致力于不断地去研究各中不同的场景中的的通用网络,一方面致力于优化神经网络的学习方式,这些都是在试图化减少AI需要的算力资源. 本文分享自华为云社区&l ...

  5. 聊聊数仓中TPCD-DS&TPC-H与查询性能的那些事儿

    摘要:详细讲述使用GaussDB(DWS)时,如何使用TPC-DS/TPC-H等标准数据模型,获取DWS的查询性能数据. 本文分享自华为云社区<GaussDB(DWS) <DWS之TPCD ...

  6. 万字详解什么是生成对抗网络GAN

    摘要:这篇文章将详细介绍生成对抗网络GAN的基础知识,包括什么是GAN.常用算法(CGAN.DCGAN.infoGAN.WGAN).发展历程.预备知识,并通过Keras搭建最简答的手写数字图片生成案. ...

  7. java并发编程(1):Java多线程-基本线程类-基础知识复习笔记

    复习资料:<同步与异步:并发/并行/进程/线程/多cpu/多核/超线程/管程 > 基本线程类 基本线程类 基本线程类指的是Thread类,Runnable接口,Callable接口 继承T ...

  8. Nacos 服务状态监听四种写发

    监听服务的四种实现方式,以监听 Nacos 服务为例 1. 传统方式 public void subscribe() { try { NamingService namingService = Nam ...

  9. Python Type Hints 从入门到实践

    Python 想必大家都已经很熟悉了,甚至关于它有用或者无用的论点大家可能也已经看腻了.但是无论如何,它作为一个将加入高考科目的语言还是有它独到之处的,今天我们就再展开聊聊 Python. Pytho ...

  10. 在原生 html 中使用 vue,在浏览器中直接运行 .vue 文件,在 vue 中使用 leaflet

    vue3-in-html 在html中使用vue3,不依赖nodejs和webpack,不依赖脚手架 demo源码 https://gitee.com/s0611163/vue3-in-html 功能 ...