计算机的运行,就像一场有条不紊的交响乐演奏,CPU、内存、磁盘等硬件各司其职,共同奏响和谐的旋律。在这场演奏中,磁盘 I/O 虽然不像 CPU 那样被众人熟知,却承担着至关重要的角色。它就像一座桥梁,连接着计算机的内部世界与外部存储,负责数据的输入与输出。从打开一份文档,到加载一款大型游戏,再到服务器处理海量数据,每一个操作都离不开磁盘 I/O 的默默支持。
然而,你是否想过,为什么有时候打开一个文件会瞬间完成,而有时候却要等待许久?为什么同样是存储设备,固态硬盘和机械硬盘的读写速度会有天壤之别?磁盘 I/O 背后,究竟隐藏着怎样的奥秘?
接下来,就让我们一同深入探索磁盘 I/O 的世界,揭开它神秘的面纱,了解它的工作原理、性能指标,以及影响它的关键因素,让你对计算机的存储系统有全新的认知 。
一、磁盘I/O是什么?
磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。
第一类,机械磁盘,也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。机械磁盘主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中。在读写数据前,需要移动读写磁头,定位到数据所在的磁道,然后才能访问数据。显然,如果 I/O 请求刚好连续,那就不需要磁道寻址,自然可以获得最佳性能。这其实就是我们熟悉的,连续 I/O 的工作原理。与之相对应的,当然就是随机 I/O,它需要不停地移动磁头,来定位数据位置,所以读写速度就会比较慢。
第二类,固态磁盘(Solid State Disk),通常缩写为 SSD,由固态电子元器件组成。固态磁盘不需要磁道寻址,所以,不管是连续 I/O,还是随机 I/O 的性能,都比机械磁盘要好得多。
其实,无论机械磁盘,还是固态磁盘,相同磁盘的随机 I/O 都要比连续 I/O 慢很多,原因也很明显。
-
对机械磁盘来说,我们刚刚提到过的,由于随机 I/O 需要更多的磁头寻道和盘片旋转,它的性能自然要比连续 I/O 慢。
-
而对固态磁盘来说,虽然它的随机性能比机械硬盘好很多,但同样存在“先擦除再写入”的限制。随机读写会导致大量的垃圾回收,所以相对应的,随机 I/O 的性能比起连续 I/O 来,也还是差了很多。
-
此外,连续 I/O 还可以通过预读的方式,来减少 I/O 请求的次数,这也是其性能优异的一个原因。很多性能优化的方案,也都会从这个角度出发,来优化 I/O 性能
此外,机械磁盘和固态磁盘还分别有一个最小的读写单位。
-
机械磁盘的最小读写单位是扇区,一般大小为 512 字节。
-
而固态磁盘的最小读写单位是页,通常大小是 4KB、8KB 等。
如果每次都读写 512 字节这么小的单位的话,效率很低。所以,文件系统会把连续的扇区或页,组成逻辑块,然后以逻辑块作为最小单元来管理数据。常见的逻辑块的大小是 4KB,也就是说,连续 8 个扇区,或者单独的一个页,都可以组成一个逻辑块。
除了可以按照存储介质来分类,另一个常见的分类方法,是按照接口来分类,比如可以把硬盘分为 IDE(Integrated Drive Electronics)、SCSI(Small Computer System Interface) 、SAS(Serial Attached SCSI) 、SATA(Serial ATA) 、FC(Fibre Channel) 等。
不同的接口,往往分配不同的设备名称。比如, IDE 设备会分配一个 hd 前缀的设备名,SCSI 和 SATA 设备会分配一个 sd 前缀的设备名。如果是多块同类型的磁盘,就会按照 a、b、c 等的