您的位置 首页 > 数码极客

【磁盘io】提高磁盘I/o性能的一些提示

目前,磁盘是机械工作的,主要反映在磁盘在读/写之前找到磁道的过程中。磁盘中包含的读写缓存大小对磁盘读写速度至关重要。读写速度更快的磁盘,通常具有更大的读写缓存。磁盘的导航过程是机械的,随机读写速度可能明显低于顺序读写。在设计和实施系统时,应考虑磁盘的这一功能。

fast DFS是一个开源高效分布式文件系统,最初以hash方式随机分布在多个目录中,后来添加了顺序存储方法。通过比较测试,我们发现文件是按目录顺序存储的,文件写入I/o效率比按目录随机存储高得多。

目前磁盘顺序读取速度还不错。例如,普通硬盘的IO可以达到每秒40~60MB,而好的硬盘可以达到每秒100MB。对于多进程或多线程并发读取磁盘,随着并发数量的增加,磁盘I/o效率将大大降低。主要是因为每个读和写的磁道可能会有很大的偏移,磁道寻址时间较长,磁盘I/o性能急剧下降。对于此场景,优化方案是最大限度地减少并发读写的进程或线程数。可以使用锁定机制或专用磁盘IO线程来读取和写入磁盘。在fast DFS版本2.x中,磁盘读写是使用专用线程执行的。

为了最大限度地提高多个磁盘的效率,建议不要使用现有RAID方法。更好的方法是对每个磁盘使用单独的mount,以便通过程序控制对多个磁盘的同时读写。使用单个装载,可以通过多个系统实现文件备份和冗馀。

文件数量增加后(例如,如果到达一千万个文件),随机访问大量文件时,文件系统的性能可能会急剧下降。业界常用的方法是将多个小文件合并到一个大文件中,从而减少文件数。fast DFS 3.0支持将多个小文件整合存储在一个大文件中,目前开发正在顺利进行,并将于5月份发布3 . 0版本。

提高磁盘IO的另一种方法是一次尽量多写或多读。也就是说,将程序的读写缓冲设置得尽可能大。例如,日志或重做日志的写入不是每次调用时直接写入磁盘,而是先缓存到内存中,缓冲区满后写入磁盘,或者定期写入磁盘。

操作系统和C库函数通常缓存记录的文件内容,从而减少实际文件写入次数。直接调用系统函数fsync或C函数fflush将使系统的缓存机制无效,并将内容强制刷到磁盘上。除非必要,否则不要执行强制刷作业。

注:除非另有说明,否则本文中提到的磁盘是指硬盘。

关于作者: luda

无忧经验小编鲁达,内容侵删请Email至wohenlihai#qq.com(#改为@)

热门推荐