我有一个想法来快速对一些解压程序进行基准测试。例如,对于 gz,我会运行以下命令:
timeout 10 zcat foo.gz | wc -c
Run Code Online (Sandbox Code Playgroud)
这将测量解压缩器在 10 秒内可以提取的数据量。
唯一的问题是,它不起作用:因为 zcat 被杀死,wc 也被杀死,所以我没有得到字节数,只是一条Terminated
消息。
所以,问题是:有没有办法从 wc 获取计数,或者通过以某种方式阻塞信号,或者使用替代方法而不是 wc 来打印结果,即使它得到一个 term 信号。
当然,还有其他选择:
写入临时文件:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
这样做的问题是使用了大量内存,并且可能会有一些性能损失。
使用 ulimit 代替:
ulimit -t 10; zcat foo.gz | wc -c
这也有效,但仅测量 CPU 时间,因此不会测量由于 I/O 导致的减速(例如,因为压缩更糟,需要从磁盘读取更多字节)。
制作较小的测试文件:
嗯,这当然可以工作,并且可能是最好的解决方案。但是,这会创建大量临时文件。
Mar*_*rco 21
您可以将 timeout 命令放在子shell中并使其成功:
( timeout 10 <command> || true ) | wc -c
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1389 次 |
最近记录: |