用户发送请求后服务端i/o工作过程

news2025/2/27 14:13:53

华子目录

  • 服务端`i/o`介绍
    • `磁盘i/o`
      • `机械磁盘`的`寻道时间`、`旋转延迟`和`数据传输时间`
      • 常见的机械磁盘平均`寻道时间值`
      • 常见磁盘的平均`延迟时间`
      • 每秒最大`IOPS`的`计算方法`
    • `网络i/o`
      • `网络I/O`处理过程
      • `磁盘和网络i/o`
  • `一次完整的请求在内部的执行过程`

服务端i/o介绍

  • i/o计算机中指Input/OutputIOPS (Input/Output Per Second) 即每秒处理I/O请求的数量 (或读写次数),是衡量磁盘性能主要指标之一
  • IOPS是指单位时间内系统能处理I/O请求数量,一般以每秒处理的I/O请求数量单位
  • I/O请求通常为读或写数据操作请求
  • 一次完整I/O用户空间进程数据内核空间内核数据报文完整交换
  • 但是由于内核空间用户空间严格隔离的,所以其数据交换过程中不能由用户空间进程直接调用内核空间内存数据,而是需要经历一次内核空间中的内存数据copy到用户空间进程内存当中
  • 所以简单说I/O就是把数据内核空间中的内存数据复制到用户空间进程的内存当中

服务器I/O

  • 磁盘I/O
  • 网络I/O : 一切皆文件本质为对socket文件读写

磁盘i/o

  • 磁盘I/O进程内核发起系统调用,请求磁盘上某个资源,比如是html文件或者图片,然后内核通过相应的驱动程序目标文件加载到内核的内存空间加载完成之后数据内核内存复制进程内存,如果是比较大数据也需要等待时间

机械磁盘寻道时间旋转延迟数据传输时间

  • 寻道时间:是指磁头移动到正确的磁道上花费的时间寻道时间I/O处理越快,目前磁盘的寻道时间一般在3-15毫秒左右
  • 旋转延迟:是指从磁盘寻道结束开始,直到磁头旋转到I/O请求请求的起始数据块位置为止时间间隔这个时间间隔磁盘驱动器读取或写入数据时所需的一个额外时间,主要由磁盘物理特性决定
  • 旋转延迟大小取决于磁盘的转速磁头所在磁道与目标磁道之间角度差。一般使用磁盘旋转周期一半作为旋转延迟近似值这种方法实际应用非常实用
  • 旋转延迟 = 磁盘旋转一周所需时间 / 2 = 60秒 × 1000毫秒/秒 / 磁盘转速(RPM) / 2
  • 例如一个7200RPM磁盘,其平均旋转延迟大约为60 × 1000 / 7200 / 2 = 4.17毫秒
  • 数据传输时间:指的是读取数据后传输数据时间,主要取决于传输速率数据传输时间等于数据大小除以传输速率目前的磁盘接口每秒的传输速度可以达到600MB因此可以忽略不计

常见的机械磁盘平均寻道时间值

  • 7200转/分磁盘平均物理寻道时间9毫秒
  • 10000转/分磁盘平均物理寻道时间6毫秒
  • 15000转/分磁盘平均物理寻道时间4毫秒

常见磁盘的平均延迟时间

  • 7200转机械盘平均延迟60*1000/7200/2 = 4.17ms
  • 10000转机械盘平均延迟60*1000/10000/2 = 3ms
  • 15000转机械盘平均延迟60*1000/15000/2 = 2ms

每秒最大IOPS计算方法

  • 7200转磁盘IOPS计算方式:1000毫秒/(9毫秒的寻道时间+4.17毫秒的平均旋转延迟时间)=1000/13.13=75.9 IOPS
  • 10000转磁盘的IOPS计算方式:1000毫秒/(6毫秒的寻道时间+3毫秒的平均旋转延迟时间)=1000/9=111IOPS
  • 15000转磁盘的IOPS计算方式:15000毫秒/(4毫秒的寻道时间+2毫秒的平均旋转延迟时间)=1000/6=166.6 IOPS

网络i/o

  • 网络I/O指的是网卡内存之间输入输出。当网络上数据到来时网卡需要将数据拷贝到内存中;当要发送数据网络上的其他设备时,需要将数据内存拷贝到网卡里

在这里插入图片描述

网络I/O处理过程

  • 获取请求数据客户端服务器建立连接发出请求服务器接受请求
  • 构建响应,当服务器接收完请求,并在用户空间处理客户端的请求直到构建响应完成
  • 返回数据服务器已构建好的响应再通过内核空间网络I/O发还给客户端

磁盘和网络i/o

每次I/O,都要经由两个阶段

  • 第一步:将数据文件加载内核内存空间缓冲区),等待数据准备完成时间较长
  • 第二步:将数据内核缓冲区复制到用户空间进程的内存中时间较短

一次完整的请求在内部的执行过程

  • 网卡内存都在主板上网卡内存通过总线通信不消耗cpu),用户请求的数据就会到io空间上,访问的是socket套接字,这个io空间内核开的,然后内核会把请求copy到应用软件app,然后进程就会知道这个请求需要什么东西所有对于硬件的调用,app是做不到的,只能内核可以),如果说这个appnginx请求是index.htmlnginx就会构建报文告诉内核它要取index.html文件内核读取完所有数据之后需要消耗cpu),返回给nginxnginx开始构建相应报文,将相应报文返回给内核中socketsocket在返回给用户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT c++ 测控系统 一套报警规则(上)

本文适用于pc based的测控系统的上位机,定义了一套报警规则。 由5个部分组成:自定义4布尔类、在全局文件定义工位错误结构体和结构体变量,其它地方给此变量的当前值成员赋值,报警线程类、数据库保存类、弹框类。 1.自定义4布尔类…

概率论得学习和整理24:EXCEL的各种图形,统计图形

目录 0 EXCEL的各种图形,统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图,一般是只选中1列数据(1个数组) 1.3 如何修改频度图的宽度 1.4 hist图的一个特…

项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%

资料查找: 01 方案选择 使用单片机测量电阻有多种方法,以下是一些常见的方法及其原理: 串联分压法(ADC) 原理:根据串联电路的分压原理,通过测量已知电阻和待测电阻上的电压,计算出…

Linux中 vim 常用命令大全详细讲解

文章目录 前言一、Vim 基本操作 🕹️1.1 打开或创建1.2 退出编辑1.3 模式切换 二、Vim 光标移动命令 ↕️2.1 基本移动2.2 行内移动2.3. 单词移动2.4. 页面移动2.5. 行跳转 三、Vim 文本编辑命令 📋3.1 插入和删除3.2 复制、剪切与粘贴3.3 替换与修改 四…

ARM架构服务器国产麒麟V10安装nginx

目前ARM架构服务器越来越多的出现在我们的工作中,尤其大数据时代的需要,服务器操作系统linux国产化进程的推进。本人已经编写了很多ARM架构下安装java环境,安装mysql,安装redis等等的文档。现在我们演示一下国产麒麟V10安装nginx-…

【SQL】语句练习

1. 更新 1.1单表更新 例1: 所有薪水低于30000的员工薪水增加10% SQL命令&#xff1a; update employee set salarysalary*1.1 where salary < 30000; 1.2多表更新 例1: 将下图两表张三的语文成绩从95修改为80 SQL命令&#xff1a; update exam set score80 where subjec…

【开源】使用环信UIKit for uniapp 做一个IM即时聊天应用

环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库&#xff0c;提供各种组件实现会话列表、聊天界面、联系人列表及后续界面等功能&#xff0c;帮助开发者根据实际业务需求快速搭建包含 UI 界面的即时通讯应用。 本文教大家使用环信 uniapp UIKit 快…

用 Python Turtle 绘制经典杰瑞鼠:捕捉卡通世界中的小聪明

用 Python Turtle 绘制经典杰瑞鼠&#xff1a;捕捉卡通世界中的小聪明 &#x1f438; 前言 &#x1f438;&#x1f41e;往期绘画>>点击进所有绘画&#x1f41e;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f438; 前言 &#x1f438; 杰…

Excel拆分脚本

Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件&#xff0c;使用快捷键&#xff08;AltF11&#xff09;打开脚本界面&#xff0c;选择要拆分的sheet&#xff0c;打开Module&#xff0c;在Module中输入脚本代码&#xff0c;然后运行脚本 Su…

ModStartCMS v9.1.0 数据Grid样式优化,富文本格式刷支持,精简代码

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

2024年12月16日Github流行趋势

项目名称&#xff1a;PDFMathTranslate 项目维护者&#xff1a;Byaidu reycn hellofinch Wybxc YadominJinta项目介绍&#xff1a;基于 AI 完整保留排版的 PDF 文档全文双语翻译&#xff0c;支持 Google/DeepL/Ollama/OpenAI 等服务&#xff0c;提供 CLI/GUI/Docker。项目star数…

3-机器人视觉-机器人抓取与操作

文章目录 3机器人视觉目录 1. 传感器和标定摄像头模型Intrinsic MatrixExtrinsic Matrix 标定内参标定手眼标定和外参标定 力传感器&其它传感器其它传感器 2. 神经网络和图像处理2D特征处理常见架构 训练流程推理流程部署流程2D 图像任务3D Point Cloud FeaturePointNet Ap…

Java String详解(二)

上一篇博客&#xff1a;Java String详解&#xff08;一&#xff09; 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blo…

Qt之点击鼠标右键创建菜单栏使用(六)

Qt开发 系列文章 - menu&#xff08;六&#xff09; 目录 前言 一、示例演示 二、菜单栏 1.MenuBar 2.Menu 总结 前言 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff08;menubar&#xff09;、多个工具栏(toolbars)、一个状态栏(status…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(一)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(一) 你好&#xff0c;我是拉依达。 感谢所有阅读关注我的同学支持&#xff0c;目前博客累计阅读 27w&#xff0c;关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析&#xff08;持续更新&#xff09;-CSDN博客》已经是 Lin…

IntelliJ IDEA(2024版) 的安装、配置与使用教程:常用配置、创建工程等操作(很详细,你想要的都在这里)

IDEA的安装、配置与使用&#xff1a; Ⅰ、IDEA 的安装&#xff1a;1、IDEA 的下载地址(官网)&#xff1a;2、IDEA 分为两个版本&#xff1a;旗舰版 (Ultimate) 和 社区版 (Community)其一、两个不同版本的安装文件&#xff1a;其二、两个不同版本的详细对比&#xff1a; 3、IDE…

MybatisPlus-配置加密

配置加密 目前配置文件中的很多参数都是明文&#xff0c;如果开发人员发生流动&#xff0c;很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先&#xff0c;我们利用AES工具生成一个随机秘钥&#…

深度学习基础--将yolov5的backbone模块用于目标识别会出现怎么效果呢??

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 yolov5网络结构比较复杂&#xff0c;上次我们简要介绍了yolov5网络模块&#xff0c;并且复现了C3模块&#xff0c;深度学习基础–yolov5网络结构简介&a…

数据结构---图(Graph)

图&#xff08;Graph&#xff09;是一种非常灵活且强大的数据结构&#xff0c;用于表示实体之间的复杂关系。在图结构中&#xff0c;数据由一组节点&#xff08;或称为顶点&#xff09;和连接这些节点的边组成。图可以用于表示社交网络、交通网络、网络路由等场景。 1. 基本概…

人工智能技术的深度解析与推广【人工智能的应用场景】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…