2 개의 리눅스 호스트 간의 대기 시간은 약 .23ms입니다. 그들은 하나의 스위치로 연결됩니다. Ping & Wireshark는 대기 시간 번호를 확인합니다. 그러나이 대기 시간을 일으키는 원인에 대한 가시성이 없습니다. 대기 시간이 호스트 A 또는 B의 NIC 또는 스위치 또는 케이블로 인한 것인지 어떻게 알 수 있습니까?
업데이트 : .23ms의 대기 시간은 기존 응용 프로그램에 좋지 않습니다.이 응용 프로그램은 매우 높은 빈도로 메시지를 보내고 0.1ms로 줄일 수 있는지 확인하려고합니다.
답변
일반적으로 iperf 유틸리티 에 대한 일부 고급 스위치를 사용하여 시스템 간 네트워크 성능, 특히 대기 시간 및 지터를 볼 수 있습니다.
이것이 UDP 또는 TCP 기반 메시지 스트림입니까?
설정에 대한 자세한 정보가 필요하다고 위에서 언급했습니다. 대기 시간이 짧은 메시징 응용 프로그램 인 경우 하드웨어, 드라이버 및 OS 조정에 걸친 전 세계 튜닝 및 최적화 기술 이 있습니다. 그러나 실제로 더 많은 정보가 필요합니다.
편집하다:
자, 이것은 TCP 메시징입니다. /etc/sysctl.conf
매개 변수 를 수정 했습니까 ? 송신 / 수신 버퍼는 어떻게 생겼습니까? 실시간 커널 만 사용하는 것은별로 도움이되지 않지만 인터럽트를 CPU에 바인딩하는 지점으로 이동하면 메시징 앱의 실시간 우선 순위 ( chrt
)를 변경 tuned-adm
하고 시스템 프로필을 수정하는 것이 도움이 될 수 있습니다 …
이는 일반적인 EL6 시스템 인 것처럼 들리므로 성능 조정 기준을 설정하는 쉬운 방법은 시스템의 성능 프로파일을 조정 된 프레임 워크 내에서 사용 가능한 다른 프로파일로 변경하는 것 입니다. 그런 다음 거기에서 빌드하십시오.
귀하의 경우 :
yum install tuned tuned-utils
tuned-adm profile latency-performance
차이점을 보여주는 빠른 매트릭스 :
하드웨어에 대해 말씀해 주시겠습니까? CPU, NIC, 메모리의 종류?
링크를 테스트하는 것이 흥미로울 수 있습니다 … iperf 테스트를 사용해보십시오 …
한 시스템에서 iperf UDP 리스너를 시작하십시오. 다른 한편으로, 첫 번째 연결을여십시오. 빠른 라인 품질 테스트.
# Server2
[root@server2 ~]# iperf -su
# Server1
[root@server1 ~]# iperf -t 60 -u -c server2
필자의 경우 낮은 지터와 낮은 핑 시간 :
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 224 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.15.3 port 5001 connected with 172.16.2.152 port 36312
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-20.0 sec 2.50 MBytes 1.05 Mbits/sec 0.012 ms 0/ 1785 (0%)
PING server1 (172.16.2.152) 56(84) bytes of data.
64 bytes from server1 (172.16.2.152): icmp_seq=1 ttl=63 time=0.158 ms
64 bytes from server1 (172.16.2.152): icmp_seq=2 ttl=63 time=0.144 ms
하드웨어와 인터페이스에 오류가 있는지 확인했습니다. 원하는 경우 시스템 간 전환을 제거하고 직접 연결이 어떻게 보이는지 확인하십시오. 높은 지터 (분산)를 원하지 않으므로 확인하십시오.
그러나 솔직히 말하면 현재 설정을 수행하는 핑 시간이 있어도 응용 프로그램을 종료하기에는 충분하지 않습니다. 보내기 / 받기 버퍼 조정 경로를 따라 가겠습니다. 참조 : net.core.rmem_max
, net.core.wmem_max
및 기본값 …
다음과 같은 것 /etc/sysctl.conf
(맛을 조정하십시오) :
net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216