首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恒写磁盘速度

恒写磁盘速度
EN

Stack Overflow用户
提问于 2014-06-19 19:25:30
回答 6查看 2K关注 0票数 11

我正在按顺序将实时数据写入一个空的旋转磁盘。(编辑:它不一定是顺序的,只要我能把它读回来,就好像它是顺序的。)数据以100 MB/s的速率到达,磁盘的平均写入速度为120 MB/s。

有时(特别是当空闲空间开始减少时),磁盘速度会低于100 MB/s,这取决于磁盘上写入的位置,而我必须删除重要的数据。

是否有任何方法以模式(或其他方式)向磁盘写入,以确保写入速度接近平均速率?不管当前磁盘上有多少数据。

编辑:

关于为什么我认为这是可能的。

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

作为一名程序员,我不知道如何决定在什么地方写数据,甚至是操作系统是否可以实现类似的功能。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-06-19 20:11:15

将磁盘划分为两个大小相等的分区。在分区之间交替写入几秒钟的数据。这样你就可以得到几乎所有通常的顺序速度,很好地平均。每隔几秒钟就找一个磁盘,几乎没有时间。每秒一次搜索将可用时间从1000 is减少到~990 is,即吞吐量减少了~1%。您可以用于缓冲的RAM越多,您需要寻找的就越少。

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

票数 5
EN

Stack Overflow用户

发布于 2014-06-19 19:45:15

如果我不得不在普通的Windows系统上这样做,我会使用一个平均写入速度更高的设备来给我更多的空间。期望100 to /s的平均写入速度对整个磁盘的额定为120 to/s将给您带来麻烦。旋转硬盘对整个磁盘没有恒定的写入速度。

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

另一件可能有帮助的事情是尽可能直接地访问磁盘,并确保它不会被系统的其他部分共享。使用单独的物理设备,不要用文件系统格式化它,直接写入分区空间。是的,您将不得不处理文件系统为您解决的一些问题,但您也跳过了一堆无法控制的代码。即使如此,您的应用程序也可能遇到Windows的调度问题。Windows不是一个RTOS,也没有时间保证。同样,这将有助于更多地解决文件系统清理、刷新脏页等临时减速问题。这可能对“最后100 at写入80 at/s”的问题没有多大帮助。

如果您真的被一个从120 so /s -> 80 so/s到内部的磁盘卡住了(您应该用自己的代码进行测试,而不相信来自制造的规范,这样您就知道自己在处理什么),那么您将不得不像其他人所建议的那样玩分区游戏。在一个机械磁盘上,这将引入一些严肃的头部寻找,这可能会吞噬你的进步。为了最小化搜索,更重要的是确保它是操作系统没有用于任何其他用途的专用磁盘。此外,在寻找磁盘的末尾之前,请使用大型缓冲区并一次写入多兆字节。与分区不同,您可以直接写入块设备,并控制写入哪些块。我不知道在Windows下该怎么做。

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

票数 7
EN

Stack Overflow用户

发布于 2014-06-19 20:41:23

我担心这比你意识到的要困难得多:

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

为了解决你的问题,我会考虑一些具体的事情:

  • 测量驱动器的“真实”写性能,看看它是否足够快。这让你了解到你的实际差距有多远。
  • 将操作系统放在一个单独的驱动器上,以确保数据驱动器不会被应用程序以外的任何东西所使用。
  • 获得更快的驱动器( HDD或SDD)。使用制造商的写入速度作为初始指南是很好的,但也要彻底测试它们。
  • 获取更多的驱动器,并将它们放入RAID0 (或类似的)配置中,以获得更快的写访问权限。您将再次想要实际测试这个,以确认它对您有用。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24314752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档