BusyBox 티가 매우 느림

BusyBox 티가 매우 느림

저는 일부 오래된(Pentium 4) 하드웨어에서 Puppy-4.3.1 Linux를 사용하고 있습니다.

내 명령 수행 능력이 형편없어요 tee.

이 배포판에서는 tee그렇습니다 BusyBox v1.15.0.

예를 들어, 이 명령은 다음을 tee사용 하지 않습니다.0.05실행하는 데 초가 소요됩니다.

cat "$my1megfile" | sha256sum

반대로 tee프로세스 대체를 사용하는 경우에는 다음이 필요합니다.15.36몇 초 만에 완료,307몇 배는 더 걸렸어요!

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

이 빌드에 문제가 있는 걸까요 BusyBox, 아니면 제가 뭔가 잘못하고 있는 걸까요?

teeBash에서 직접 구현할 수 있나요?

명령(바이너리) 출력을 두 개의 다른 명령으로 파이프해야 합니다. 그 중 하나는 sha256sum.

답변1

최근에는비지박스-1.32, 이것FEATURE_TEE_USE_BLOCK_IO미니 프로그램의 성능을 최적화하는 데 사용되는 구성 매개변수는 다음과 같이 설정됩니다 tee."예"기본적으로:

config FEATURE_TEE_USE_BLOCK_IO
bool "바이트 I/O 대신 블록 I/O(더 크고/빠름) 활성화"
기본값 y는 TEE 도움말
에 따라 다릅니다 . 크기를 희생하면서 더 빠른 Tee를 위해 이 옵션을 활성화합니다.

존재하다비지박스-1.15, 동일한 매개변수가 다음으로 설정됩니다."아니요"기본적으로. 이는 tee시스템이 느리게 실행되는 이유를 설명할 수 있습니다.비지박스-1.15.

자세한 내용은:

언제FEATURE_TEE_USE_BLOCK_IO설정 없음, tee입력의 문자 대 문자 복사본 만들기(사용getCharacter())를 출력으로 (푸케()):

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

언제FEATURE_TEE_USE_BLOCK_IO놓다, tee대신 버퍼링된 복사본을 사용하세요.

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

관련 정보