문제

내 애플리케이션 (Linux에서)의로드 테스트의 경우, STDOut의 데이터를 특정 속도 (100 바이트/S)로 출력하는 도구를 찾고있어 출력을 NetCAT로 파이프하여 내로 보내는 도구를 찾고 있습니다. 신청. DD에 대한 일부 옵션은 이상적이지만 지금까지 아무것도 찾지 못했습니다. 어떤 종류의 데이터가 인쇄되는지는 중요하지 않습니다 (NUL 바이트는 괜찮습니다). 힌트가 있습니까?

도움이 되었습니까?

해결책

나는 이것이 당신이 정말로 원하는 것이라고 생각합니다. 파이프 뷰어

사용 <fast input> | pv -qL <rate>[k|m|g|t] | <rate-limited output> 파이프를 요청 된 속도로 제한합니다.

다른 팁

나는 하나의 논쟁을 취하는 빠른 프로그램을 썼다. A 초당 표준 출력으로 인쇄 할 문자 (음의 인수는 속도 제한이 없음을 의미합니다). 도움이 되었기를 바랍니다! :-) (GNU LIBC에서는 프로그램을 연결해야합니다. -lrt.)

편집 : 두 번째 인수가 지정되지 않는 한 기본적으로 DOT를 인쇄하도록 개정되며,이 경우 첫 번째 문자가 사용됩니다. (그리고 그것은 NUL 문자를 인쇄하려면 빈 문자열을 두 번째 인수로 지정하는 것을 의미합니다. :-)).

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

int
sleeptill(const struct timespec *when)
{
    struct timespec now, diff;

    clock_gettime(CLOCK_REALTIME, &now);
    diff.tv_sec = when->tv_sec - now.tv_sec;
    diff.tv_nsec = when->tv_nsec - now.tv_nsec;
    while (diff.tv_nsec < 0) {
        diff.tv_nsec += 1000000000;
        --diff.tv_sec;
    }
    if (diff.tv_sec < 0)
        return 0;
    return nanosleep(&diff, 0);
}

int
main(int argc, char **argv)
{
    double rate = 0.0;
    char *endp;
    struct timespec start;
    double offset;

    if (argc >= 2) {
        rate = strtod(argv[1], &endp);
        if (endp == argv[1] || *endp)
            rate = 0.0;
        else
            rate = 1 / rate;

        if (!argv[2])
            argv[2] = ".";
    }

    if (!rate) {
        fprintf(stderr, "usage: %s rate [char]\n", argv[0]);
        return 1;
    }

    clock_gettime(CLOCK_REALTIME, &start);
    offset = start.tv_nsec / 1000000000.0;

    while (1) {
        struct timespec till = start;
        double frac;
        double whole;

        frac = modf(offset += rate, &whole);
        till.tv_sec += whole;
        till.tv_nsec = frac * 1000000000.0;
        sleeptill(&till);
        write(STDOUT_FILENO, argv[2], 1);
    }
}

한 번에 백 바이트를 모두 얻는 것이 좋으면 루프를 할 수 있습니다. sleep 그리고 평범한 오래된 echo 최소한 첫 번째 시도로서 쉘에서.

글쎄, 나는 지금 NUTTCP를 사용하여 대신 "실제"로드 테스트를 수행하고 있습니다. 오버 헤드가 매우 낮은 것으로 보이므로 테스트 시스템이 너무 방해받지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top