一个相当迟钝的性能瓶颈已经归结为这个非常小的查询。我做了一些实证分析,我认为我可能会受到磁盘缓存策略的影响。从根本上讲(如果禁用了磁盘缓存),写入文件的速度、速度或速度是否与读取文件相同?我假设答案将取决于碎片(和文件大小),但是编写文件的操作必须对下一个空闲块的位置进行额外的查找,而不仅仅是跟踪指向它的指针。
发布于 2014-08-22 23:04:21
那得看情况。这个问题没有一般的答案。
在没有缓存的情况下,写入磁盘文件通常比读取要慢得多。这与操作系统无关,与硬件有关:硬盘和固态媒体的读取速度都比它们写的快。第二个因素与文件系统结构有关:读取只需要遍历目录树和块列表到数据,然后读取数据,而写入则需要执行相同的遍历,然后写入数据,然后更新一些元数据。
当缓存发挥作用时,情况就会发生变化。读取缓存中的数据非常快,但是读取不在缓存中的数据必须从磁盘中取出。操作系统可能会尝试提前读取,但这只在非常特殊的情况下(主要是从文件中顺序读取)起作用。另一方面,只要数据量不太大,写入就可以是近乎瞬时的,因为数据只写到内存缓冲区中。缓冲区最终必须写入磁盘,但到那时,您的应用程序已经开始执行更多的任务。
发布于 2014-08-22 19:33:18
写作应该更快。
空闲块列表保存在内存中,因此找到下一个空闲块将非常快。除非您是以同步模式编写,否则当您尝试编写某些东西时,它只需将数据复制到内核缓冲区中并对写入进行队列;它不需要等待I/O的完成。
另一方面,读取必须等待I/O完成,因为调用者在数据到达之前什么也做不了。
https://unix.stackexchange.com/questions/151665
复制相似问题