我在一些旧的(奔腾4)硬件上使用Puppy-4.3.1Linux。
我从tee命令中获得了糟糕的性能。
在这个发行版上,tee是BusyBox v1.15.0的一部分。
例如,这个没有tee的命令需要执行0.05秒。
cat "$my1megfile" | sha256sum相比之下,如果我使用一个进程替换的tee,则需要15.36秒来完成,307要长一倍!
cat "$my1megfile" | tee >(sha256sum) >/dev/null这个BusyBox构建有什么问题,还是我做错了什么?
我可以在Bash中实现我自己的tee吗?
我需要将命令(二进制)输出输送到另外两个命令,其中一个是sha256sum。
发布于 2020-12-07 08:38:37
在最新的busybox-1.32中,用于优化tee applet性能的FEATURE_ to _USE_BLOCK_IO配置参数在默认情况下被设置为“是”:
配置FEATURE_TEE_USE_BLOCK_IO bool“启用块I/O (更大/更快)而不是字节I/O”默认的y依赖于tee帮助为速度更快的TEE启用此选项,而不是牺牲大小。
在busybox-1.15中,默认情况下相同的参数设置为"no"。这可能解释了为什么tee在运行busybox-1.15的系统上速度慢。
当 <#>not _TEE_USE_BLOCK_IO设置为时,tee通过其输入的char副本(带有getchar())对其输出(使用putc())执行char操作:
setvbuf(stdout, NULL, _IONBF, 0);
while ((c = getchar()) != EOF) {
fp = files;
do
putc(c, *fp++);
while (*fp);
}当FEATURE_IO_USE_BLOCK_IO <#>set时,tee将使用缓冲副本:
while ((c = safe_read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
fp = files;
do
fwrite(buf, 1, c, *fp++);
while (*fp);
}https://unix.stackexchange.com/questions/623191
复制相似问题