: jank : : 1104 : 2021-10-23 23:23 操作系统和网络
磁盘
磁盘通常是由多个盘片(platter)构成,每个盘片有两面称为表面(surface),覆盖着磁性记录材料,盘片中央有一个可旋转的主轴,使盘片以固定的旋转速率(rotational rate)旋转,通长是5400~15000转每分钟(Revolution Per Minute RPM)。
一个磁道上可以有多个扇区,一般扇区大小是512字节,扇区也是磁盘IO的最小单位。也就是说,磁盘读写的时候都是以扇区为最小寻址单位的,不可能往某个扇区的前半部分写入一部分数据。一个扇区的大小是512B,每次磁头连续读写的时候,只能以扇区为单位,即使一次只写了一个字节的数据,那么下一次新的文件写操作就不能再向这个扇区剩余的部分接着写入,而是要寻找一个空扇区来写。
磁盘表面是由一组称为磁道的同心圆组成,每个磁道有一组扇区(sector),每个扇区包含数据相等的数据位(512字节),数据编码在扇区上的磁性材料中。扇区之间的间隙(gap)不存储数据位,存储标识扇区的格式化位。
磁盘容量=字节数(扇区)* 平均扇区数(磁道,早期磁盘磁道密度不同、扇区数相等)* 磁道数(表面)*表面数(盘片)*盘片数(磁盘)
CHS(Cylinder Head Sector)寻址:
早期的磁盘磁道扇区数相同,因此产生了所谓的3D参数:磁头(Heads)、柱面(Cylinder)、扇区(Sector),以及相应的CHS寻址。
CHS寻址方式的容量由CHS三个参数决定: 磁头号(8bit,0-255),柱面号(10bit,0-1023),扇区号(6bit,1-63)
最大容量or最大寻址范围:255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )
缺点:由于磁道区块数相等,外磁道密度小于内磁道,造成空间的浪费,同时也限制了磁盘的容量。
ZBR(Zoned Bit Recording,区位记录)寻址:
新磁盘使用ZBR(Zoned Bit Recording,区位记录)技术,盘片表面由里向外划分为数个区域,不同区域的磁道扇区数目不同,同一区域内各磁道扇区数相同,盘片外圈区域磁道长扇区数目较多,内圈区域磁道短扇区数目较少,大体实现了等密度,从而获得了更多的存储空间。将磁道划分出 区块(zone)
LBA编址方式把硬盘所有的物理扇区的C/H/S编号(48bit,128PB)通过一定的规则转变为一线性的编号。
在这种模式下,不考虑磁盘的物理结构,直接将磁盘上的所有扇区依次从“0”开始进行编号,直到磁盘的最大扇区数减1。
系统效率得到大大提高。在访问硬盘时,由磁盘控制器把这种逻辑地址转换为实际硬盘的物理地址。
1.ATA(Advanced Technology Attachment)先进技术附件,是IDE硬盘的接口标准。包括PIO(Programming I/O)和DMA(Direct Memory Access) 两种传输模式。ATA本身可以支持串行或并行。
1)IDE(Integrated Drive Electronic电子集成驱动器)硬盘也叫ATA硬盘,是采用并行传输技术的硬盘。IDE的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。把盘体与控制器集成在一起的做法减少 了硬盘接口的电缆数目与长度,数据传输的可靠性得到了增强。
IDE硬盘的接口类型:ATA、Ultra ATA、DMA、Ultra DMA
IDE硬盘优点:价格低廉、兼容性强、性价比高。
IDE硬盘缺点:数据传输速度慢、线缆长度过短、连接设备少。
2)PATA: Paralle ATA。并行协议,基于ATA。
3)SATA: Serial ATA。 串行协议,基于ATA,SATA于2002年推出后,原有的ATA改名为PATA
SATA硬盘采用串行传输技术,分为第一代SATA和第二代SATA2,其中SATA2可以达到3Gbps,速度比IDE快多了。SATA只能提供单通道和半双工模式
2.SCSI(Small Computer System Interface)小型计算机系统接口。跟ATA一样串行或并行都支持。并行SCSI是基于总线技术,速度很慢,只有 320 MB/sec (Ultra320 SCSI),已经不能满足现代企业的需要。串行SCSI就是Serial Attached SCSI (SAS)。
1)SAS(Serial Attached SCSI)采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等,SAS接口可兼容SATA接口。主要用于中,高端服务器和高档工作站。SAS硬盘支持双向全双工模式,为同时发生的读写操作提供了两路活动通道。
2)
SAS 协议可分为3块:
SSP是串行SCSI协议,用于传输SCSI协议。
SMP是SCSI管理协议,用于对连接设备的维护和管理。
STP是SATA tunnel协议,用于SAS和SATA之间数据的传输。即把SATA Frame当做SAS协议的数据来传输,跟隧道一样。
第一代SAS为数组中的每个驱动器提供3.0 Gbps(约3000 Mbps)的传输速率。
第二代SAS为数组中的每个驱动器提供6.0 Gbps(约6000 Mbps)的传输速率。
第三代SAS为数组中的每个驱动器提供12.0 Gbps(约12000 Mbps)的传输速率。
第四代SAS为数组中的每个驱动器提供 24.0 Gbps(24000 Mbps)的传输速率,相关标准制订于2017年。
3.M.2原名是NGFF接口,这是为超极本(Ultrabook)量身定做的新一代接口标准,主要用来取代mSATA接口。不管是从非常小巧的规格尺寸上讲,还是说从传输性能上讲,这种接口要比mSATA接口好很多。正是因为SATA的接口瓶颈越来越突出,现在很多主板厂商都开始在产品线上预留出M.2接口M.2接口能够同时支持PCI-E通道以及SATA,其中前者在提高速度方面更轻松一些。最开始该接口所采用的是PCI-E 2.0 x2通道,理论带宽10Gbps,可以说它也突破了SATA接口理论传输瓶颈。如今的M.2接口全面转向PCI-E 3.0 x4通道,理论带宽达到了32Gbps,相比以往水准提升了很多,这也让SSD性能潜力大幅提升。另外,该接口固态硬盘还支持NVMe标准,和现在的AHCI比较起来,通过新的NVMe标准接入的SSD,在性能提升方面非常明显。
4.U.2原名叫SFF-8639,如果光听这个代号,估计没有多少人能真正地把他记正确,所以在后期intel将他改名为U.2,这样一来,先不管它是什么接口,至少朗朗上口了。U.2接口的最大特色就是高速低延迟低功耗,支持NVMe标准协议,并且走的是PCI-E 3.0 x4通道,理论传输速度高达32Gbps,而SATA只有区区6Gbps,比SATA快了足足5倍多。缺点是U.2的主板少,价格贵,厂商也少,目前主要在intel推行。
小结:
IDE = ATA
并行接口: 传输数据和信号的总线是复用的,线路间的信号高频时会互相干扰,影响稳定性,限制了传输速度,并行可传输4字节(4*8bit)。
串行接口:每次只传输1bit,本质上就是通过提升传输频率来提升传输速度。Serial ATA只需要4根线就可以实现数据传输(第1根发数据,第2根接收数据,第3根供电,第4根地线),串行通信允许磁盘驱动器对传入数据进行排队。
SATA 接口的两半,小的一部分是数据口,大的是电源口。
SAS盘之所以比SATA盘要快,不仅仅是接口问题,更主要的是转速更快,转速快温度高,因此SAS盘内部加入了很多传感器对温度进行闭环监控,使系统的温度达到恒定,不能过高。另外,SAS盘内部的DISC基板也是需要特殊设计的,和SATA盘内部的基座完全不一样。SATA盘采用的是铝材料基板;SAS盘采用的是玻璃材料基板,平整度高(如果不平整容易被磁头划伤盘面)。铝材料的优点在于存储密度高。平整度高可靠性好,密度高存储量就大。总结:SATA盘:存储空间大、便宜、吞吐差、可靠性低。 SAS盘:存储空间相对小、贵一点、吞吐好、可靠性高。
两种分区方式, 分别是MBR 和 GPT
主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)
主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。主引导扇区内的信息可以通过任何一种基于某种操作系统的分区工具软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统(操作系统是创建在高级格式化的硬盘分区之上,是和一定的文件系统相联系的)。
标准MBR结构 | |||||
地址 | 描述 | 长度 | |||
0000 | 0000 | 0 | 代码区 | 440 | |
01B8 | 0670 | 440 | 选用磁盘标志 | 4 | |
01BC | 0674 | 444 | 一般为空值; 0x0000 | 2 | |
01BE | 0676 | 446 | 标准MBR分区表规划 | 64 | |
01FE | 0776 | 510 | 55h | MBR有效标志: | 2 |
01FF | 0777 | 511 | AAh | ||
MBR,总大小:446 + 64 + 2 = | 512 |
硬盘分区表占据主引导扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。
硬盘分区结构信息 | ||
偏移 | 长度(字节) | 意义 |
00H | 1 | 分区状态:00-->非活动分区;80-->活动分区; |
01H | 1 | 分区起始磁头号(HEAD),用到全部8位 |
02H | 2 | 分区起始扇区号(SECTOR),占据02H的位0-5; |
04H | 1 | 文件系统标志位 |
05H | 1 | 分区结束磁头号(HEAD),用到全部8位 |
06H | 2 | 分区结束扇区号(SECTOR),占据06H的位0-5; |
08H | 4 | 分区起始相对扇区号 |
0CH | 4 | 分区总的扇区数 |
主引导扇区的读取流程:
系统开机或者重启
BIOS加电(台湾用语:引导)自检(Power On Self Test -- POST)。BIOS执行内存地址为FFFF:0000H处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
读取主引导记录(MBR)
当BIOS检查到硬件正常并与CMOS中的设置相符后,按照CMOS中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H处。
检查0000:01FEH-0000:01FFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处,然后继续执行。
根据MBR中的引导代码启动引导程序。
事实上,BIOS不仅检查0000:01FEH-0000:01FFH(MBR的结束标志位)是否等于55AAH,往往还对磁盘是否有写保护、主引导扇区中是否存在活动分区等进行检查。如果发现磁盘有写保护,则显示磁盘写保护出错信息;如果发现磁盘中不存在活动分区,则显示类似如下的信息“Remove disk or other media Press any key to restart”。
通常使用fdisk 工具分区。
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(UEFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2.2TB(2.2×1012字节)[1]的分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,并且将他们的容量较大的磁盘升级到4KB的扇区,这意味着MBR的有效容量上限提升到16 TiB。
通常使用parted 工具分区。
GPT的优势:
最多允许 128 个分区;主引导记录 (MBR) 磁盘可以支持 4 个主分区和扩展分区内的 124 个附加分区。
允许大于 2 TB 的卷容量,而 2 TB 是 MBR 磁盘的极限。
由于分区表提供了复制和循环冗余校检 (CRC) 保护,所以更加可靠。
能在所有基于 x64 平台上用作存储卷,包括运行 Windows XP Professional x64 Edition 的平台。从 Windows Server 2003 SP1 开始,GPT 磁盘也可用作基于 x86 的Windows 平台上的存储卷。
用GPT分区与MBR分区的影响:
1、用哪种模式的分区对系统运行没有影响。
2、如果主板支持UEFI,那么你可以在大于2T的磁盘上使用GPT模式创建分区安装64位操作系统。如果使用了MBR模式,大于2T那部份不可识别,只能浪费。
3、如果主板是传统BIOS,不支持UEFI,那么你只能在不大于2T的磁盘上使用MBR模式安装64位或32位系统。如果使用了2T以上磁盘,大于2T那部份不可识别,只能浪费。而且,无论磁盘是否大于2T,如果运行于GPT模式,那就不能安装任何操作系统。
附加:
UEFI,全称Unified Extensible Firmware Interface,即“统一的可扩展固件接口”,是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替BIOS(基本输入/输出系统)。此标准由UEFI联盟中的140多个技术公司共同创建,其中包括微软公司。UEFI旨在提高软件互操作性和解决BIOS的局限性。
要详细了解UEFI,还得从BIOS讲起。我们都知道,每一台普通的电脑都会有一个BIOS,用于加载电脑最基本的程式码,担负着初始化硬件,检测硬件功能以及引导操作系统的任务。UEFI就是与BIOS相对的概念,这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而达到开机程序化繁为简节省时间的目的。传统BIOS技术正在逐步被UEFI取而代之,在最近新出厂的电脑中,很多已经使用UEFI,使用UEFI模式安装操作系统是趋势所在。
UEFI和BIOS有什么不同?优点优势是什么?
作为传统BIOS(Basic Input/Output System)的继任者,UEFI拥有前辈所不具备的诸多功能,比如图形化界面、多种多样的操作方式、允许植入硬件驱动等等。这些特性让UEFI相比于传统BIOS更加易用、更加多功能、更加方便。而Windows 8在发布之初就对外宣布全面支持UEFI,这也促使了众多主板厂商纷纷转投UEFI,并将此作为主板的标准配置之一。
UEFI抛去了传统BIOS需要长时间自检的问题,让硬件初始化以及引导系统变得简洁快速。换种方式说,UEFI已经把电脑的BIOS变得不像是BIOS,而是一个小型固化在主板上的操作系统一样,加上UEFI本身的开发语言已经从汇编转变成C语言,高级语言的加入让厂商深度开发UEFI变为可能。
以下关于 UEFI的特点 来自微软官网:
1、通过保护预启动或预引导进程,抵御bootkit攻击,从而提高安全性。
2、缩短了启动时间和从休眠状态恢复的时间。
3、支持容量超过2.2 TB的驱动器。
4、支持64位的现代固件设备驱动程序,系统在启动过程中可以使用它们来对超过172亿GB的内存进行寻址。
5、UEFI硬件可与BIOS结合使用。
大部分磁盘挂载名称都是/dev/sd[a-z] , 如果磁盘有多个分区则/dev/sd[1,2,3...]
SATA - /dev/sdX
SSD - /dev/sdX
SCSCi - /dev/sdX
IDE - /dev/hda
理解Linux系统的Device mapper机制
Device mapper是Linux2.6内核中提供的一种从逻辑设备到物理设备的映射机制,在该机制下,用户能够很方便的根据自己的需要实现对存储资源的管理。在具体管理时需要用到Linux下的逻辑卷管理器,当前比较流行的逻辑卷管理器有 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等。
/dev/mapper目录的解释
为了方便叙述,假设一台服务器有三块硬盘分别为a,b,c,每块硬盘的容量为1T。在安装Linux的时候,先根据系统及自身的需要建立基本的分区,假设对硬盘a进行了分区,分出去了0.1T的空间挂载在/boot目录下,其他硬盘未进行分区。系统利用Device mapper机制建立了一个卷组(volume group,VG),你可以把VG当做一个资源池来看待,最后在VG上面再创建逻辑卷(logical volume,LV)。若要将硬盘a的剩余空间、硬盘b和硬盘c都加入到VG中,则硬盘a的剩余空间首先会被系统建立为一个物理卷(physical volume,PV),并且这个物理卷的大小就是0.9T,之后硬盘a的剩余的空间、硬盘b和硬盘c以PV的身份加入到VG这个资源池中,然后你需要多大的空间,就可以从VG中划出多大的空间(当然最大不能超过VG的容量)。比如此时池中的空间就是2.9T,此时你就可以建立一个1T以上的空间出来,而不像以前最大的容量空间只能为1T。
/dev/mapper/Volume-lv_root的意思是说你有一个VG (volume group卷组)叫作Volume, 这个Volume里面有一个LV叫作lv_root。其实这个/dev/mapper/Volume-lv_root文件是一个连接文件,是连接到/dev/dm-0的,你可以用命令ll /dev/mapper/Volume-lv_root进行查看。
其实在系统里/dev/Volume/lv_root 和 /dev/mapper/Volume-lv_root以及/dev/dm-0都是一个东西,都可当作一个分区来对待。
若要了解硬盘的具体情况,可通过fdisk -l或者pvdisplay, 或者ll /dev/sd* 命令进行查看。
若你想要重装系统到/dev/sda下,且安装时有些东西不想被格式化想转移到/dev/sdb下,但此时/dev/sda和/dev/sdb被放到VG中了,那该如何解决该问题呢?这种情况下,由于此时根本没办法确定数据在哪一个硬盘上,因为这两个硬盘就如同加到池里,被Device mapper管理,所以解决方案就是再建个逻辑卷出来,把数据移到新的卷里,这样你就可以重装系统时只删掉之前分区里的东西,而新的卷里的东西不动,就不会丢失了。
靠近CPU的为北桥芯片,主要负责控制AGP显卡、内存与CPU之间的数据交换;(北桥,i7之后已整合到cpu内)
靠近PCI槽的为南桥芯片,主要负责软驱、硬盘、键盘以及附加卡的数据交换。
磁盘控制器:
硬盘接口包含物理接口和逻辑接口。
物理接口:硬盘和磁盘控制器连接的接口。
逻辑接口:指令系统。如SCSI指令集和ATA指令集。
磁盘控制器用来向驱动器的控制电路发送指令,从而控制磁盘驱动器读写数据。
磁盘驱动器控制电路:应该将磁盘控制器和磁盘驱动器的控制电路区别开来,二者是作用于不同物理位置的。磁盘驱动器控制电路位于磁盘驱动器上,它专门负 责直接驱动磁头臂做运动来读写数据
1)用户进程向 CPU 发起 read 系统调用读取数据,由用户态切换为内核态,然后一直阻塞等待数据的返回。
2)CPU 在接收到指令以后对 DMA 磁盘控制器发起调度指令。
3)DMA 磁盘控制器对磁盘发起 I/O 请求,将磁盘数据先放入磁盘控制器缓冲区,CPU 全程不参与此过程。
4)数据读取完成后,DMA 磁盘控制器会接受到磁盘的通知,将数据从磁盘控制器缓冲区拷贝到内核缓冲区。
5)DMA 磁盘控制器向 CPU 发出数据读完的信号,由 CPU 负责将数据从内核缓冲区拷贝到用户缓冲区。
6)用户进程由内核态切换回用户态,解除阻塞状态,然后等待 CPU 的下一个执行时间钟。
DMA与CPU调度
DMA控制器可采用哪几种方式与CPU分时使用内存?
直接内存访问(DMA)方式是一种完全由硬件执行I/O交换的工作方式。DMA控制器从CPU完全接管对总线的控制。数据交换不经过CPU,而直接在内存和I/O设备之间进行。
DMA控制器采用以下三种方式:
①停止CPU访问内存:当外设要求传送一批数据时,由DMA控制器发一个信号给CPU。DMA控制器获得总线控制权后,开始进行数据传送。一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。 ②周期挪用:当I/O设备没有 DMA请求时,CPU按程序要求访问内存:一旦 I/O设备有DMA请求,则I/O设备挪用一个或几个周期。
③DMA与CPU交替访内:一个CPU周期可分为2个周期,一个专供DMA控制器访内,另一个专供CPU访内。不需要总线使用权的申请、建立和归还过程。
IOPS(In/Out per second)即磁盘每秒的输入/输出数,通常用IOPS来衡量小IO的随机读写的性能。
IOPS= 1000 ms / (寻道时间 + 旋转延时 + 传输时间)
寻道时间(Tseek):指的是磁盘读写头寻找磁道时间,通常为3-15ms
旋转延时(Trotation):指的是磁盘盘片旋转到指定被读写的扇区所耗费的时间,根据磁盘转速不同,旋转时间也不相同,通常7200rpm(Revolutions per minute,转/每分
) 转速磁盘的旋转平均时间为4ms = 60 * 1000 / 7200 / 2 (通常使用磁盘旋转一周所需时间的1/2表示,最好和最差情况的均值)
传输时间(Ttransfer):指的是磁盘数据传输所需要的时间,由于传输时间相比寻道时间和旋转延时相比相差甚远,所以通常可以忽略。
数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。吞吐量主要取决于磁盘阵列的架构,通道的大小以及磁盘的个数。不同的磁盘阵列存在不同的架构,但他们都有自己的内部带宽,一般情况下,内部带宽都设计足够充足,不会存在瓶颈。磁盘阵列与服务器之间的数据通道对吞吐量影响很大,比如一个2Gbps的光纤通道,其所能支撑的最大流量仅为250MB/s。最后,当前面的瓶颈都不再存在时,硬盘越多的情况下吞吐量越大。
使用率,是指磁盘忙处理 I/O 请求的百分比。过高的使用率(比如超过 60%)通常意味着磁盘 I/O 存在性能瓶颈。
响应时间,是指从发出 I/O 请求到收到响应的间隔时间。考察这些指标时,一定要注意综合 I/O 的具体场景来分析,比如读写类型(顺序还是随机)、读写比例、读写大小、存储类型(有无 RAID 以及 RAID 级别、本地存储还是网络存储)等。
小结:
随机读写频繁的应用,如小文件存储(图片)、数据库,关注随机读写性能,IOPS是关键衡量指标。
顺序读写频繁的应用,如电视台的视频编辑,备份系统,关注连续读写性能。数据吞吐量是关键衡量指标。
1.fdisk 是一个创建和维护分区表的工具,在Linux 中有专门的分区命令 fdisk 和 parted。其中 fdisk 命令较为常用,但不支持大于 2TB 的分区;如果需要支持大于 2TB 的分区,则需要使用 parted 命令,当然 parted 命令也能分配较小的分区。
示例:
使用fdisk -l 查看全部分区信息
2.parted命令是可以在命令行直接分区和格式化的,parted交互模式为常用模式。
3.df命令,用来检查linux服务器的文件系统的磁盘空间占用情况。
1.vmstat 是linux 系统用来展示cpu、内存、磁盘
vmstat -s 查看内存信息
vmstat -d 查看磁盘信息(可加速率,如 vmstat -d 1 10)
vmstat [-D] [-d] [-p partition] [interval count]
total: 总的成功读写次数
sectors: 成功读写的扇区
ms: 读写花费的毫秒数
merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.
cur:正在进行IO数
sec:IO的秒数
1.iostat 统计磁盘IO情况,也会展示CPU 使用情况,但不能深入的分析进程IO情况。
Tps: 每秒发送到设备的 I/O 请求数。多逻辑请求可以组合成对设备的单I/O 请求。
Blk_read/s:每秒读取的磁盘块的数量。
Blk_wrtn/s:每秒写入的磁盘块的数量。
Blk_read: 读取的块的总数。
Blk_wrtn:写入的总块数。
r/s:设备每秒完成的读请求数(合并后)。
w/s:设备每秒完成的写请求数(合并后)。
sec/s:每秒从设备读取或写入的扇区数。
rsec/s:每秒从设备读取的扇区数。
wsec/s:每秒写入设备的扇区数。
rqm/s:每秒钟排队到设备的合并后的 I/O 请求数量。
rrqm/s:每秒钟排队到设备的合并后的读请求数。
wrqm/s:每秒钟排队到设备的合并后的写请求数。
%rrqm:在发送到设备之前合并到一起的读请求的百分比。
%wrqm:在发送到设备之前合并到一起的写请求的百分比。
areq-sz:向设备发出的 I/O 请求的平均大小(单位为 k)。
rareq-sz:向设备发出的读请求的平均大小(单位为 k)。
wareq-sz:向设备发出的写请求的平均大小(单位为 k)。
await:平均每次 I/O 操作的时间(以毫秒为单位)。这包括请求在队列中花费的时间和执行它们所花费的时间。
r_await:平均每次读请求的时间(以毫秒为单位)。这包括请求在队列中花费的时间和执行它们所花费的时间。
w_await:平均每次写请求的时间(以毫秒为单位)。这包括请求在队列中花费的时间和执行它们所花费的时间
aqu-sz:发送到设备的请求的平均队列长度。
%util:向设备发出 I/O 请求的运行时间百分比(设备的带宽利用率),换句话说就是一秒中有百分之多少的时间用于 I/O 操作。当连续处理请求的设备的这个值接近100%时,说明产生的 I/O 请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈。但是对于并行处理请求的设备,例如 RAID 阵列和现代 SSD,这个数字并不反映它们的性能限制。
1.Pidstat,查看进程的详细信息,包括进程的io情况。
常用参数:
· -u:默认参数,显示各进程的cpu信息
· -r:进程的内存使用统计
· -d:进程的IO使用情况
· -p:指定进程号
· -w:进程的上下文切换情况
· -t:任务线程的统计信息外的额外信息
查看磁盘io情况:
1.iotop 可查看进程的io信息,同时像top命令一样对io大小进行排序。
2.blktrace
blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。
blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求提交,入队,合并,完成等等一些列的信息)。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括进行读写的进程名称、进程号、执行时间、读写的物理块号、块大小等等,是一个Linux下分析I/O相关内容的很好的工具。
[root@master01 ~]# blktrace -d /dev/sda -o - | blkparse -i - |grep file
8,0 0 603 0.010857791 4902 D W 55478664 + 64 [file_write]
8,0 0 605 0.011043070 4902 D W 55478728 + 1024 [file_write]
8,0 0 607 0.011190578 4902 D W 55479752 + 1024 [file_write]
8,0 0 609 0.011687527 4902 D W 55480776 + 1024 [file_write]
8,0 0 611 0.011876166 4902 D W 55481800 + 1024 [file_write]
第一个字段:8,0 这个字段是设备号 major device ID和minor device ID。
第二个字段:3 表示CPU
第三个字段:11 序列号
第四个字段:0.009507758 Time Stamp是时间偏移
第五个字段:PID 本次IO对应的进程ID
第六个字段:Event,这个字段非常重要,反映了IO进行到了那一步
第七个字段: R W 常规 D:块扔除 B barrier操作 S 同步操作 如果为WS表示当前为写同步。
第八个字段:223490+56,表示的是起始block number 和 number of blocks,即我们常说的Offset 和 Size
第九个字段: 进程名
其中第六个字段非常有用:每一个字母都代表了IO请求所经历的某个阶段。
blkparse显示的各指标点示意:
Q------->G------------>I--------->M------------------->D----------------------------->C
|-Q time-|-Insert time-|
|--------- merge time ------------|-merge with other IO|
|----------------scheduler time time-------------------|---driver,adapter,storagetime--|
|----------------------- await time in iostat output ---------------------------------------|
|Q – 即将生成IO请求
|G – IO请求生成
|I – IO请求进入
|O Scheduler队列
|D – IO请求进入driver
|C – IO请求执行完毕
扇区大小: fdisk -l
磁盘块大小: stat /boot
内存页大小:getconf PAGE_SIZE
1)查看linux系统最大文件句柄限制(总打开): cat /proc/sys/fs/file-max
系统级修改临时生效方式:
echo 655350 > /proc/sys/fs/file-max
系统级修改永久生效方式:
vi /etc/sysctl.conf
增加: fs.file-max=655350
系统级永久生效方式修改后,重启服务器,才能生效。
查看系统级文件句柄修改,是否生效
sysctl -p
2)查看当前ssh 会话单个服务句柄限制:ulimit -a(查看所有), ulimit -n (默认1024)
设置当前ssh 会话单个服务句柄限制:ulimit -n 4096
3)设置系统单个服务最大句柄限制:vim /etc/security/limits.conf
增加: * soft core 65535
* hard rss 65535
设置具体服务最大句柄限制:可通过在systemd 对相应的service配置:
[Service]
LimitNOFILE=16364
三个层级的先后顺序是:
当系统启动的时候,先读取系统级别的句柄数限制(/proc/sys/fs/file-max)
如果用户设置了(/etc/security/limits.conf),那么就会再次加载这份配置,可以大于 file-max(这个只是建议值)
如果用户设置了会话级别的,那么就使用会话级别覆盖
如果用户设置了服务级别的,那么同样使用服务级别的设置覆盖
Soft 和 Hard 的区别是啥?
没有本质区别,但是有些许的权限区别:
只有 root 用户可以提高 hard
非 root 用户和 root 运行的进程可以降低 hard
所有用户都可以修改 soft,但是,不能超过 hard
没有强制限制,但是即使超过了 hard,实际使用的时候也是选 soft 和 hard 中的小值
1.dd命令用来在Linux和类Unix系统下对硬盘设备进行写性能的检测。
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
time dd if=/dev/zero of=/test.file bs=2k count=10000
if表示inputfile,表示从if所指的文件读取数据流
of指定输出的文件
bs 每秒输出的大小
count 执行次数
读速度测试:
time dd if=/test.file of=/dev/null bs=8k
读写速度测试:
time dd if=/test.file of=/tmp/test2.file bs=8k
2. hdparm可检测,显示与设定IDE或SCSI硬盘的参数,包括测试读性能以及缓存性能等。
显示硬盘的柱面、磁头、扇区数: hdparm -g /dev/sda
评估硬盘的读取效率: hdparm -t /dev/sda
直接读取硬盘所提供的硬件规格信息: hdparm -X /dev/sda
使IDE硬盘进入睡眠模式: hdparm -Y /dev/sda
3. fio是一个开源压力测试工具,主要用来测试硬盘io性能。这个工具的可定制性非常强,可以根据测试者的想法进行各种混合io测试,它支持13种不同类型io引擎(libaio、sync、mmap、posixaio、network等等)。它可以测试块设备或文件,可以通过多线程或进程模拟各种io操作,可以测试统计iops、带宽和时延等性能