일정 시간 동안 TCP를 통해 임의의 데이터를 보내고 전송된 바이트 수를 계산합니다.

일정 시간 동안 TCP를 통해 임의의 데이터를 보내고 전송된 바이트 수를 계산합니다.

데이터 처리량을 테스트하기 위해 1) X초 동안 무작위 데이터를 보내고 2) TCP를 통해 무작위 데이터를 보내고 4) 전송된 바이트 수를 정확히 알고 싶습니다.

내 최선의 시도(많지는 않음)


1
)
시간 초과wc -c 실패하면 임의의 데이터를 tee파일로 파이프 /dev/tcp한 다음 시간 초과가 만료되면 파일의 바이트 크기를 계산할 수 있습니까?

누구든지 이 작업을 수행하기 위해 우아한 bash 명령을 제공할 수 있습니까?


[업데이트] 이것은 Linux용 사용자 정의 버전입니다. Safe Dolphin에서는 모든 명령을 사용할 수 있는 것은 아닙니다. 모든 제안 사항을 확인하고 최대한 빨리 답변해 드리겠습니다.

답변1

솔루션을 요청하셨기 때문에 제가 언급한 솔루션과 @SatoKatsura가 언급한 솔루션을 제공해 드리겠습니다. 첫째, 무작위 네트워크 로드를 생성하는 것은 일반적으로 로드 테스트를 수행하는 가장 유용한 방법이 아닙니다. 작업량이 많은 현실을 재현해야 하는 경우가 많습니다. 그럼에도 불구하고, 어떤 종류의 경쟁 로드 하에서 다른 워크로드의 성능과 관련된 정보를 찾고 싶다면 파이프라인에 임의의 데이터를 넣는 것이 여전히 합리적입니다.

당신이 언급한 것에서 원하는 것을 얻는 가장 직접적인 방법은 제가 댓글에서 언급한 것입니다 nc. 임의의 포트에서 수신 대기하고 출력을 다음으로 리디렉션하도록 수신기를 설정합니다 /dev/null.

[root@listeningServerFQDN ~]# nc -l listeningServerFQDN 1023 >/dev/null

그런 다음 클라이언트 측에서 nc다시 사용하여 /dev/urandom원격 측으로 데이터를 보냅니다.

[root@transmit ~]# dd if=/dev/urandom count=65535 bs=1500 | nc listeningServerFQDN 1023

그 후에는 원하는 도구를 사용할 수 있습니다.


가능한 해결책은 다음과 같습니다. 또 다른 하나는 iperf@SatoKatsura가 언급한 도구입니다. 이는 필요한 네트워크 엔지니어에게 더 적합합니다.일부어떤 이유로 네트워크에서 로드가 실행 중입니다. 예를 들어, 구현하려는 QoS 정책을 테스트하려는 경우입니다. 이 경우 워크로드를 대표하는지 여부는 신경 쓰지 않고 대역폭이 적절하게 조절되는지 테스트할 뿐입니다.

기본 iperf사용법에는 서버 프로세스 설정이 포함됩니다.

[root@listeningServerFQDN ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

그런 다음 클라이언트에서 테스트를 실행합니다.

[root@transmit ~]# iperf -c listeningServerFQDN -r
bind failed: Address already in use
------------------------------------------------------------
Client connecting to transmit.example.com, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  4] local 10.762.40.95 port 54610 connected with 10.762.40.95 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  37.1 GBytes  31.8 Gbits/sec

서버 인스턴스에서 반복되고 내 출력에 다음을 추가합니다.

[  4] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54610
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  37.1 GBytes  31.7 Gbits/sec
------------------------------------------------------------
Client connecting to 10.762.40.95, TCP port 5001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[  4] local 10.762.40.95 port 54640 connected with 10.762.40.95 port 5001
[  5] local 10.762.40.95 port 5001 connected with 10.762.40.95 port 54640
[  4]  0.0-10.0 sec  37.4 GBytes  32.1 Gbits/sec
[  5]  0.0-10.0 sec  37.4 GBytes  32.1 Gbits/sec

분명히 거기에서 분기할 수 있지만 일반적인 아이디어를 얻고 다른 모든 내용은 매뉴얼 페이지를 확인할 수 있습니다.


내 관점 에선:nc귀하의 기준이 실제로 "파이프에 임의의 데이터 보내기"라면 실제로 이 솔루션을 고수할 것입니다. nc이는 그 이상의 작업을 수행하는 데 사용할 수 있는 일반적으로 유용한 도구이며 사용 사례가 iperf매우 좁은 것으로 생각됩니다.

또 다른 "파이프라인의 무작위 데이터" 테스트를 수행하는 대신 nc(또는 더 친숙한 도구를 사용하여) 기본 테스트를 수행 한 다음 단계별로 실제 로드를 시뮬레이션합니다.iperf

관련 정보