磁盘的写入速度恒定

ron*_*nag 11 windows io disk

我正在按顺序将实时数据写入空的旋转磁盘.(编辑:它不必是连续的,只要我可以读回,如果它是顺序的.)在100 MB的速率的数据到达/ s和盘具有120 MB的平均写入速度/秒.

有时(特别是当可用空间开始减少时)磁盘速度低于100 MB/s,具体取决于磁盘写入盘片的位置,我必须丢弃重要数据.

有没有办法以一种模式(或其他方式)写入磁盘,以确保接近平均速率的恒定写入速度?无论磁盘上当前有多少数据.

编辑:

关于为什么我认为这应该成为可能的一些注释.

当通常写入磁盘时,它从盘片的快速部分开始,然后写入较慢的部分.但是,如果我可以将一半数据写入快速部分,将一半数据写入慢速部分(即1秒钟可以写入50MB到快速部分,50MB写入慢速部分),它们应该在中间相遇.我可以达到一个恒定的速度?

作为一名程序员,我不知道如何确定数据写在盘子上的位置,或者即使操作系统可以实现类似的功能.

kby*_*yrd 7

如果我必须在常规Windows系统上执行此操作,我会使用具有更高平均写入速度的设备来为我提供更多空间.期望在整个磁盘上平均写入速度为100MB/s(额定速度​​为120MB/s)会给您带来麻烦.旋转硬盘在整个磁盘上没有恒定的写入速度.

这个问题的通常解决方案是在RAM中缓冲以掩盖不频繁的减速.您用作缓冲区的RAM越多,您可以处理的缓慢范围就越长.这些都是你必须做出的权衡.如果您的问题是已知的旋转磁盘内部扇区减速,那么您的设备速度不够快.

可能有帮助的另一件事是尽可能直接访问磁盘并确保它不被系统的其他部分共享.使用单独的物理设备,不要使用文件系统对其进行格式化,直接写入分区空间.是的,你必须处理文件系统为你解决的一些问题,但你也跳过一堆你无法控制的代码.即使这样,您的应用程序也可能会遇到Windows的调度问题.Windows不是RTOS,在时间上没有保证.再次,这将有助于更多文件系统清理临时减速,刷新脏页等.它可能无助于"最后100GB写入80MB/s"问题.

如果你真的遇到了从120MB/s - > 80MB/s的外部到内部的磁盘(你应该用你自己的代码进行测试,不要相信制造商的规格,这样你就知道你在处理什么)那么你将不得不像别人建议的那样玩分区游戏.在机械磁盘上​​,这将引入一些严重的头部搜索,这可能会耗费你的改进.为了最大限度地减少搜索,确保它是操作系统不用于其他任何东西的专用磁盘将更加重要.此外,在寻找磁盘末尾之前,使用大缓冲区并一次写入许多兆字节.您可以直接写入块设备并控制写入的块,而不是分区.我不知道如何在Windows中执行此操作.

要在Linux上解决这个问题,我很想在同一个驱动器上的两个分区上测试mdadm的raid0,看看是否有效.如果是这样,那么工作就完成了,你不必编写和测试一些复杂的写机制.


usr*_*usr 5

将磁盘分区为两个大小相等的分区.在分区之间交替写入几秒钟的数据.这样你几乎可以得到所有常用的顺序速度,很好地平均.每隔几秒就有一次磁盘搜索几乎没有时间吃掉.每秒一次搜索将可用时间从1000毫秒减少到约990毫秒,这是吞吐量减少约1%.你可以用来缓冲的内存越多,就越少.

使用更多分区来增加平均效果.

  • 为什么这会被贬低?这实际上是一个非常有创意的解决方案.它至少应该得到一个解释downvote的评论. (3认同)

ues*_*esp 5

我担心这可能比你意识到的更困难:

  • 如果平均120 MB/s的写入速度是制造商的价值,那么它最有可能"乐观".
  • 即使是基准的写入速度通常也是在非分区/格式化的驱动器上完成的,并且会高于您在实际使用中通常看到的速度(一个好问题要高出多少).
  • 更重要的值是驱动器的最低写入速度.例如,从Tom的硬件2013 HDD基准测试中,平均120 MB/s的驱动器最低为76 MB/s.
  • 其他应用程序同时使用的驱动器(例如,Windows)将具有低得多的写入速度.
  • 更重要的价值是驱动器实际测量的性能.我会创建一个类似于您的用例的简单应用程序,它尽可能快地将数据写入驱动器,直到它填满驱动器.这样做几十(十)次以获得更真实的平均/最小/最大写入速度值...它可能会低于您的预期.
  • 正如您所指出的,即使您的"实际"平均写入速度高于100 MB/s,如果您在磁盘填满之前遇到慢速写入速度,也会遇到问题,假设您没有其他地方可以写入数据至.在这种情况下,使用缓冲区无济于事.
  • 这些天我不确定你是否可以实际指定在硬盘上写入的物理位置,而无需进入驱动器的固件.即使你可以,这也是我解决问题的最后选择.

我会看一些具体的事情来解决你的问题:

  • 测量驱动器的"实际"写入性能,看它是否足够快.这可以让您了解实际情况.
  • 将操作系统放在单独的驱动器上,以确保数据驱动器不被您的应用程序以外的任何其他设备使用.
  • 获得更快的驱动器(HDD或SDD).可以使用制造商的写入速度作为初始指南,但也要彻底测试它们.
  • 获取更多驱动器并将其置于RAID0(或类似)配置中,以实现更快的写访问.您将再次想要对此进行测试以确认它适合您.