首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BusyBox tee非常慢

BusyBox tee非常慢
EN

Unix & Linux用户
提问于 2020-12-06 15:43:09
回答 1查看 468关注 0票数 1

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

我从tee命令中获得了糟糕的性能。

在这个发行版上,teeBusyBox v1.15.0的一部分。

例如,这个没有tee的命令需要执行0.05秒。

代码语言:javascript
复制
cat "$my1megfile" | sha256sum

相比之下,如果我使用一个进程替换的tee,则需要15.36秒来完成,307要长一倍!

代码语言:javascript
复制
cat "$my1megfile" | tee >(sha256sum) >/dev/null

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

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

我需要将命令(二进制)输出输送到另外两个命令,其中一个是sha256sum

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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操作:

代码语言:javascript
复制
    setvbuf(stdout, NULL, _IONBF, 0);
    while ((c = getchar()) != EOF) {
        fp = files;
        do
            putc(c, *fp++);
        while (*fp);
    }

FEATURE_IO_USE_BLOCK_IO <#>set时,tee将使用缓冲副本:

代码语言:javascript
复制
    while ((c = safe_read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
        fp = files;
        do
            fwrite(buf, 1, c, *fp++);
        while (*fp);
    }
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/623191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档