‘猫’为何会有这种奇怪的行为?

‘猫’为何会有这种奇怪的行为?

我使用cat管道将不同的文件合并到一个大文件中。不同文件的数量各不相同,从两个文件到十个文件不等,但所有文件的总大小始终相同(几 GB)。

我的问题:每当我总共有六个文件时,连接它们所需的时间(即明显多于五个或七个),但我不知道为什么。

有人有想法吗?

文件(大小均相同)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

命令

cat outputTEMP* >> output && rm -f outputTEMP*

目前,机器必须执行一些计算,但当有新的测量值时,我会稍后更新。

答案1

调试该问题的一种方法是使用 strace。

strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log 

23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3)                = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3)                = 0

-tt 选项以毫秒为单位记录系统调用的时间戳。-e trace=open,close 仅​​记录 open、close API。尝试删除它们,您将看到一个非常嘈杂的日志文件。

答案2

所以 Davides 的评论是正确的。为了做出准确的评估,我们需要做两件事:

  1. 保证缓存不属于该场景的一部分
  2. 实际测量所花费的时间。

假设您有磁盘空间,我将描述一个测试场景,以更准确地确定这是否是一个真正的问题。如果是,这种方法的支持证据将帮助开发人员知道它是真实的,并能够重现它。

为了帮助问题隔离,我们在这里根本不做 rm 部分。之后让 TEMP 文件闲置。如果您愿意,您可以稍后重复执行“rm”部分的测试。

测试场景如下:

  • 创建 9 个目录 - 每个目录对应一个文件数量( 2 3 4 5 6 7 8 9 和 10) - 如果您没有空间,也许只创建 2、5、6、7 和 10。
  • 确保将不同的文件放入每个目录中;任何地方都不要有重复
  • 使用如下时间命令:

    时间(cat outputTEMP* >> 输出)

捕获您运行的每个测试所报告的实际数字、用户数字和系统数字。

我同意雷诺兹的观点;如果这是真的,你一定要把详细信息发邮件给[电子邮件保护]

相关内容