当前位置: 首页 > 科技观察

为什么CPU访问硬盘慢

时间:2023-03-20 15:36:55 科技观察

机械硬盘(HardDiskDrive,HDD)和固态硬盘(SolidStateDrive,SSD)是最常见的两种硬盘,作为电脑的外接存储,CPU想要访问其中存储的数据需要很长时间,如下表所示,SSD中随机访问4KB数据的时间是主存的1500倍,机械盘寻道时间是主存的10万倍:Table1-2012LatencyFiguresContrast[^1]虽然磁盘的寻道时间只需要10ms,但在CPU眼里已经是很长的时间了。当我们把上面的时间按比例放大时,我们可以直观地感受到它们之间的性能差异。如果CPU访问L1缓存需要1秒,那么访问主内存需要3分钟,从SSD随机读取数据需要3.4天,磁盘寻道需要2个月,网络传输可能需要一年多。在计算机体系结构中,硬盘是一种常见的输入输出设备。操作系统启动时不一定需要硬盘。它可以从硬盘启动,也可以从网络设备或外部设备启动,因此硬盘对于计算机的运行不是必需的。健康)状况。图1——输入输出设备作为外部输入输出设备,相对于CPU缓存和内存,硬盘极慢的读写速度更合理,但速度是几千甚至几十万倍。差异确实难以想象或接受。在本文中,我们将分析为什么CPU访问硬盘数据的速度很慢:CPU访问硬盘数据的过程比较复杂。将数据读入内存,然后访问内存中的数据;机械硬盘中的数据访问磁盘中的数据时依赖于机械结构,需要移动磁盘中的机械臂;I/O操作CPU首先要通过I/O访问磁盘中的数据/O操作将数据从磁盘读取到内存中,然后再访问存储在内存中的数据。计算机包含三种常见的I/O操作[^2]——程序化I/O(ProgrammedI/O)、中断驱动I/O(Interrupt-drivenI/O)和直接内存访问(DirectMemoryAccess),我们将依次介绍以上操作[^3]:图2-常见I/O操作执行I/O操作的最简单形式是使用编程I/O。当使用编程I/O时,CPU将负责所有工作。如果我们要在屏幕上输出HelloWorld,CPU每次都会向I/O设备写入一个新的字符。写完后会轮询设备的状态,等它完成工作再写新的字符。的性格。这种方法虽然简单,但是在一些复杂的系统中会占用所有的CPU资源,造成计算资源的严重浪费。中断驱动的I/O是执行I/O操作的一种更有效的方式。在programmedI/O中,CPU主动获取设备的状态,等待设备空闲,但是如果使用中断驱动I/O,设备会主动发起中断,挂起当前进程并保存上下文空闲时,操作系统将执行I/O设备的中断处理程序:如果当前不包含要打印的字符,则停止中断处理程序并恢复挂起的进程;如果当前包含要打印的字符,则将下一个字符复制到设备并恢复挂起的过程;使用中断驱动的I/O,让CPU在设备繁忙时处理其他任务,尽可能提高CPU利用率,不再浪费宝贵的计算资源。与编程I/O相比,中断驱动I/O将部分工作交给了I/O设备,因此可以提高资源利用率。直接内存访问利用DMA控制器进行I/O操作,而中断驱动的I/O则需要为每个字符触发操作系统中断,这会消耗一些CPU时间。当我们使用DMA控制器时,CPU会一次性将缓冲区中的所有数据读取到DMA控制器中,DMA控制器负责将数据按字符写入I/O设备:图3-DMAI/O虽然DMA控制器可以释放CPU并减少中断次数,但它的执行速度与CPU相比非常慢。如果DMA控制器不能快速驱动I/O设备,CPU可能会等待DMA控制器触发中断。在这种情况下,中断驱动I/O或编程I/O可以提供更快的访问速度。默认情况下,我们都使用DMA控制器来执行I/O任务,但是程序化I/O和中断驱动I/O并不是不能接受的选项。当CPU经常需要等待DMA控制器执行I/O任务时,可以使用中断驱动I/O甚至轮询编程I/O来实现更高的吞吐量,但是,无论哪种方式,I/O都是耗时的程序中的复杂操作。机械硬盘机械硬盘(HardDiskDrive,HDD)是一种以电子为基础的、非易失性的机械数据存储设备,它利用磁存储器在磁盘上存储和查找数据。在读取和写入数据的过程中,附着在硬盘臂上的磁头在磁盘表面读取和写入位[^8]。正是因为磁盘具有相对复杂的机械结构,所以读写磁盘需要花费大量的时间,而数据库的读写性能基本上取决于磁盘的性能。如果我们使用机械硬盘在数据库中随机查询一条数据,可能会触发磁盘的随机I/O。但是,将数据从磁盘读入内存的代价是非常大的。普通磁盘(非SSD)通过queue、seek、rotations和transmission这些过程加载数据大概需要10ms左右。图4-磁盘的随机I/O在估计数据库的查询时,我们可以用10ms的数量级来估计随机I/O所花费的时间。这里想说的是随机I/O对数据库查询性能的影响会非常大。大,从磁盘顺序读取数据的速度可达40MB/s。两者之间的性能差距是几个数量级。因此,我们还应该尽量减少随机I/O的数量,以提高性能。固态硬盘(SSD)是一种使用闪存作为持久存储的计算机存储设备[^9]。与机械硬盘不同,固态硬盘不包含任何机械结构。当我们用它来读取或存储数据时,不会使用任何机械结构,因为所有过程都是由电路完成的,所以SSD的读写速度比SSD快。HDD要快得多。图5-HDD和SSD的价格机械硬盘和SSD自诞生以来,价格一直在下降。机械硬盘是当今数据中心使用的主要外部存储。大多数通用商用服务器都采用机械硬盘作为主要的外存,但由于SSD的读写速度是机械硬盘的几十倍,所以越来越多的服务器,尤其是数据库,会采用SSD作为外存。但是,作为一款机械结构的外置存储设备,虽然结构非常成熟,容量也很大,但是在晃动时很容易受到外界的干扰。总结硬盘是计算机上的外部存储设备。它可以持久存储大量数据。但是CPU不能直接访问硬盘中的数据。当计算机启动时,操作系统会将硬盘中的数据加载到内存中供CPU访问,但是如果CPU要访问的数据不在内存中,那么我们就需要花费几千次甚至上百次的时间上千次读取数据,这主要是以下两个原因造成的:CPU需要通过I/O操作访问外部存储数据,编程I/O,中断驱动I/O,DMA都会带来额外的开销和占用更多的CPU时间;机械硬盘会通过机械结构来访问存储在其中的数据,硬盘的每一次随机I/O都需要执行排队、寻道、轮转、传输数据等几个过程,耗时10ms左右;正如我们在文章中提到的,硬盘并不是计算机运行所必需的硬件设备,计算机可以从磁盘或CD等任何外部设备中进行读取。存储设备将启动所需的数据加载到内存中并正常启动,但硬盘已经是当今最常见的外部存储设备。最后,让我们看看一些未解决的相关问题。有兴趣的读者可以仔细思考以下问题:写入硬盘的数据会不会永久保存,不会丢失?断电重启后会清零吗?