28-磁盘知识-程序员宅基地

技术标签: java  linux  操作系统  多线程  缓存  

持久化的存储设备

存储设备,系统中容量最大的存储设备

存储数据之前,要先进行格式化

linux:ext4

windwos:FAT32、NTFS

在读写数据时,数据与磁盘间有个磁盘缓存(内存的一部分)

机械磁盘「HHD」

由盘片,磁头组成,数据存在盘片的环形磁道上,读写时,磁头移动,定位到数据的磁道,进行数据读写

固态磁盘「SSD」

由固态电子元器件组成,不需要磁头寻址,所以不管是连续IO还是随机IO,都比机械盘快

为什么代码可以运行在不同的操作系统中

不同系统的读写

Linux中,一切都是文件

磁盘文件系统:ext4、xfs、nfs

内存文件系统:基于内存的文件系统 /proc/sys

网络文件系统:用来访问其他计算机数据的文件系统 nfs ,smb

磁盘内部

扇区sector:磁盘组成的最小单位「512B」,磁盘磁道中一个弧段

块Block:操作系统与磁盘数据交换的最小单位,快=2^n*扇区

  • linux:类似Ext4文件系统,就是磁盘分块

  • windows:类似NTFS文件系统,也就是块,只是被叫做「簇」

页page:操作系统与内存数据交换的最小单位

缓冲区:buffer内存与磁盘速度不匹配,在数据与磁盘进行IO时,数据先进入缓存区

页缓存:Linux内存中对磁盘部分数据的副本,加快程序读取磁盘的速度和进程间数据共享

磁盘分区

  • 基本分区:不能再分区

  • 扩展分区:必须进行二次分区,才能使用。再分区就是逻辑分区

linux中IDE设备分区符以「hd」开头

  • hd=Hard Disk表示硬盘是IDE(或ATA)并行接口.速度快一些

linux中SCSI设备分区符以「sd」开头

  • sd=Serial ATA Disk表示硬盘是scsi,SATA串行接口,u盘也是scsi

  • vmware中把磁盘做成scsi设备,所以硬盘名称是sda

sda:a、b、c…第几个硬盘

sda1、sda2…数字1、2、3表示第几个分区

fdisk -l查看系统分区详细信息

root@zx:~# fdisk -l
Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcdbde65e

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 83886046 83883999  40G 83 Linux
root@zx:~# 

分区的目的:提升磁盘读写数据的速度

磁盘阵列RAID

独立磁盘构成具有冗余能力的阵列

  • 由多块独立的磁盘组成一个容量巨大的磁盘组,利用磁盘提供数据所产生的加成效果提升整个磁盘系统的效能。利用这个技术,把数据切割成多段,分别存在不同磁盘上

  • RAID0:数据分片存在2块磁盘,读写速度提升2倍,主要用于SWAP\TMP,但是数据不冗余,数据恢复难

  • RAID1:相同数据冗余存入2块磁盘,写速度不变,读速度提升2倍,数据冗余1份,主要用于数据备份,但磁盘利用率低

  • RAID5:数据分片和校验码混合存储3份,读写速度提升2倍,主要在要求告诉时用,可以用于数据还原

  • RAID10:2块磁盘1组先做RAID1,多组RAID1,再做RAID0,读写速度N「组数」倍

虚拟文件系统

Virtual File System简称VFS。是Linux内核的子系统之一,它为用户程序提供文件和文件操作系统的统一接口,屏蔽不同文件系统的差异和操作细节。节奏VFS可以直接使用open(),read(),write()这样的系统调用操作文件,而无需考虑具体的文化系统和实际的存储介质

通过VFS系统,Linux提供了通用的系统调用,可以跨越不同文件系统和介质之间执行,极大简化了用户访问不同文件系统的过程。另一方面,新的文件系统,新类型的存储介质,可以无须编译的情况下,动态加载到Linux中

文件IO

文件操作:先open,再read或write,最后close

读写的不同:

  • 是否利用标准库缓存:缓存IO、非缓存IO

  • 是否利用页缓存:直接IO、非直接IO

  • 直接IO:跳过操作系统和页缓存,直接与文件系统交互来访问文件

  • 非直接IO:文件读写时,先给页缓存,再由内核调用,写入磁盘

  • 释放阻塞自身运行:阻塞IO、非阻塞IO

  • 阻塞IO:如果没有获得响应,就阻塞当前线程

  • 非阻塞IO:不阻塞当前线程

  • 是否等待响应结果:同步IO、异步IO

  • 同步IO:要一直等待整个IO完成,才能获取IO响应

  • 异步IO:不等待IO完成,可以执行另外任务

iostat

root@zx:~# iostat -dx 2
Linux 5.4.0-54-generic (zx)     06/17/2021      _x86_64_        (2 CPU)

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
vda              0.00      0.11     0.00  33.65    1.93    28.47    0.94     10.72     1.28  57.78    2.17    11.43    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.13


Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
vda              0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00


Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz  aqu-sz  %util
vda              0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00   0.00
  • rrqm/s:每秒进行merge的读操作数目,即delta(rmerge)/s

  • wrqm/s:每秒进行merge的写操作数目,即delta(wmerge)/s

  • r/s:每秒完成的读IO设备次数,即delta(rio)/s

  • w/s:每秒完成的写IO设备次数

  • rsec/s:每秒读扇区数

  • wsec/s:每秒写扇区数

  • rkBs:每秒读k字节数

  • wkB/s:每秒写k字节数

磁盘性能指标

使用率

指磁盘处理IO的时间百分比

饱和度

磁盘处理IO的繁忙程度

IOPS

input\output per second 每秒的IO请求

吞吐量

每秒的IO请求大小

响应时间

指IO请求从发送到收到响应的时间间隔

实战

清理缓存

echo 3 > /proc/sys/vm/drop_caches
  • echo 1:释放页缓存

  • echo 2:释放目录项

  • echo 3:释放页缓存、目录项、节点

执行之后,buff会为0,cache会减少,free增大

测试磁盘「写」能力

root@zx:~# dd if=/dev/zero of=$PWD/outfile bs=20MB count=100
100+0 records in
100+0 records out
2000000000 bytes (2.0 GB, 1.9 GiB) copied, 12.5943 s, 159 MB/s



root@zx:~# time dd if=/dev/zero of=$PWD/outfile bs=20MB count=100
100+0 records in
100+0 records out
2000000000 bytes (2.0 GB, 1.9 GiB) copied, 18.2494 s, 110 MB/s

real    0m18.556s
user    0m0.000s
sys     0m2.696s
  • if输入文件(in file)

  • of输出文件(out file)

  • /dev/zero 一个伪设备,只产生字符流,不会有IO

  • of=$PWD/outfile 输出到当前目录下的outfile文件中

  • bs=20MB count=100 块文件20MB,执行100次

观察

使用vmstat 1:free变小,空闲内存变小;buffer为0,cache数据变大,bo数据也变大,说明有大量的写磁盘

使用iostat -dx 1:r/s没有数据,wKB/s有大量数据,说明有大量的磁盘操作

top:wa有明显的数据

测试磁盘「读」能力

root@zx:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           394M  908K  393M   1% /run
/dev/vda1        40G   14G   24G  37% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
overlay          40G   14G   24G  37% /var/lib/docker/overlay2/620bb7aa0e627cdba9390176389043e6822ab9e5eb2babdeab85277eff33f615/merged
overlay          40G   14G   24G  37% /var/lib/docker/overlay2/d3473cb9961cfa686528b22e036640d393e58e3f53498952e88b602392005deb/merged
overlay          40G   14G   24G  37% /var/lib/docker/overlay2/4255afaa35207b007713bd6b0366838b6452038dffd1c1a1d23639aaab9a37ae/merged
tmpfs           394M     0  394M   0% /run/user/0

root@zx:~# dd if=/dev/vda1 of=/dev/null bs=20MB count=100
100+0 records in
100+0 records out
2000000000 bytes (2.0 GB, 1.9 GiB) copied, 17.9035 s, 112 MB/s

root@zx:~# time dd if=/dev/vda1 of=/dev/null bs=20MB count=100
100+0 records in
100+0 records out
2000000000 bytes (2.0 GB, 1.9 GiB) copied, 9.53937 s, 210 MB/s

real    0m9.548s
user    0m0.001s
sys     0m1.305s
  • if输入文件(in file)

  • of输出文件(out file)

  • /dev/vda1 磁盘第1个物理分区,读取这个磁盘文件,会有IO

  • /dev/null 一个伪设置,回收站,是个无底洞,可以无限放暑假

  • bs=20MB count=100 块文件20MB,执行100次

观察

使用vmstat 1:free变小,空闲内存变小;buffer明显变大,cache数据没有明显变化,bi也有明显的数据

bi数据,经过几次增加后,buffer数据也相应的增加,当bi数据没有时,buffer数据也不变了,但是读的操作还没有结束。说明后面的读数据来自buffer

  • buffer是由磁盘虚拟而来,用于加快磁盘读速度。

使用iostat -dx 1:rkB/s数据变大,wkB/s数据不明显

小结

磁盘数据时,cache会变大,在磁盘数据时,buffer会变大。

测试内存的速度

root@zx:~# echo 3>/proc/sys/vm/drop_caches 

root@zx:~# dd if=/dev/zero of=/dev/null bs=50MB count=100
100+0 records in
100+0 records out
5000000000 bytes (5.0 GB, 4.7 GiB) copied, 0.831753 s, 6.0 GB/s

内存的速度,大概是几个GB/s

内存的速度,看你是磁盘速度的上百倍

磁盘性能优化

  1. 由机械硬盘,转为固态硬盘,提升磁盘的速度,所以整体性能提升

  2. 减少磁盘的IO次数。代码可以优化

  3. 可以适当的加大内存的大小

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37786060/article/details/118123828

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签