c – 处理时写入数据块 – 由于硬件限制,是否存在收敛值?
我正在从一个大文件处理来自硬盘的数据(处理速度快,而且开销不大),然后必须将结果写回(数十万个文件).
我开始直接在文件中编写结果,一次一个,这是最慢的选项.我认为如果我构建一定数量的文件的向量然后立即写入它们会更快,然后返回处理,同时硬盘被写入我写入的所有内容(至少似乎是发生了什么). 我的问题是,我可以以某种方式估计我应该从硬件约束中写入的数据量的收敛值吗?对我来说它似乎是一个硬盘缓冲的东西,我在该硬盘上有16MB缓冲区并获得这些值(所有~100000文件): Buffer size time (minutes) ------------------------------ no Buffer ~ 8:30 1 MB ~ 6:15 10 MB ~ 5:45 50 MB ~ 7:00 或者这只是巧合? 我也会对有关如何优化写入性能的经验/经验法则感兴趣,例如更大的硬盘块有用,等等. 编辑: 硬件是一个非常标准的消费者驱动器(我是学生,而不是数据中心)WD 3,5 1TB / 7200 / 16MB / USB2,HFS记录,操作系统是MacOS 10.5.我很快就会尝试使用Ext3 / Linux和内部磁盘而不是外部磁盘. 解决方法
不是长期的.问题是你的写入性能将至少取决于四件事: >您正在使用哪个文件系统 例如,USB比IDE慢,后者比SATA慢.如果XFS写入许多小文件比ext2快得多,我不会感到惊讶.内核一直在变化.因此,这里有太多因素可以简化预测. 如果我是你,我会采取以下两个步骤: >将我的程序拆分为多个线程(甚至进程),并使用一个线程尽快提供打开,写入和关闭操作系统的系统调用.如果您可以使线程数成为运行时参数,则可以获得奖励积分. 然后,当您更改磁盘,互连,内核或CPU时,您只需重新运行配置程序即可!您的代码将进行优化以获得最佳性能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |