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

发布于:2024-12-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

服务端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在返回给用户

网站公告

今日签到

点亮在社区的每一天
去签到