BusyBox tee 非常慢

BusyBox tee 非常慢

我在一些较旧的(Pentium 4)硬件上使用 Puppy-4.3.1 Linux。

我的命令表现很糟糕tee

在此发行版上,teeBusyBox v1.15.0.

例如,这个命令不tee0.05秒执行。

cat "$my1megfile" | sha256sum

相比之下,如果我使用tee进程替换,则需要15.36秒完成,307时间长了好几倍!

cat "$my1megfile" | tee >(sha256sum) >/dev/null

这个构建有问题吗BusyBox,还是我做错了什么?

tee我可以在 Bash 中实现我自己的吗?

我需要将命令(二进制)输出通过管道传输到其他两个命令,其中之一是sha256sum.

答案1

在最新的busybox-1.32, 这FEATURE_TEE_USE_BLOCK_IO用于优化小程序性能的配置参数设置tee“是的”默认情况下:

config FEATURE_TEE_USE_BLOCK_IO
bool “启用块 I/O(更大/更快)而不是字节 I/O”
默认 y
取决于 TEE
帮助
启用此选项以获得更快的 Tee,但会牺牲大小。

busybox-1.15,同样的参数设置为“不”默认情况下。这可以解释为什么tee你的系统运行缓慢busybox-1.15

更多细节:

什么时候FEATURE_TEE_USE_BLOCK_IO没有设置tee对其输入进行逐字符复制(使用获取字符())到其输出(与普特克()):

    setvbuf(stdout, NULL, _IONBF, 0);
    while ((c = getchar()) != EOF) {
        fp = files;
        do
            putc(c, *fp++);
        while (*fp);
    }

什么时候FEATURE_TEE_USE_BLOCK_IOtee使用缓冲副本代替:

    while ((c = safe_read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
        fp = files;
        do
            fwrite(buf, 1, c, *fp++);
        while (*fp);
    }

相关内容