RTO 최소값을 너무 낮추면 조금만 늦어도 불필요한 재전송이 나고 기본값(200ms)은 게임 입장에서 너무 길어 한 번 잃을 때마다 오래 멈춥니다.
왜 데이터센터용으로 RTO 최소값을 크게 낮춤, 또는 인터넷 구간에 기본값 그대로 사용 → 그러면 낮으면 순간 지연에도 재전송 폭주, 높으면 손실마다 긴 대기 → 화면에서는 기본값이면 손실 한 번에 수백 ms 멈춤 뒤 몰아치기, 너무 낮추면 멈춤은 줄지만 불필요한 재전송이 급증해 회선을 낭비
리눅스 6.15 이상이면 게임 연결에 TCP_RTO_MAX_MS로 RTO 상한 낮추기 검토(포기까지 걸리는 시간도 짧아지므로 TCP_USER_TIMEOUT으로 끊김 판정 시간을 함께 정하기), 서버 간 내부 연결만 소켓 옵션 TCP_RTO_MIN_US(6.15 이상)로 RTO 최소값 낮추기, 소켓 옵션 TCP_THIN_LINEAR_TIMEOUTS로 게임 연결만 연속 RTO가 두 배로 늘지 않게 하기 검토.
인프라팀 할 일
서버 간 내부 연결만 경로별로 rto_min 낮추기, 인터넷 구간은 기본값 유지하되 RACK-TLP·thin stream 설정(tcp_thin_linear_timeouts)으로 보완.
수치 감각
리눅스 RTO = 왕복 시간 + max(200ms, RTT 편차×4). 실패할 때마다 두 배, 최대 120초. 리눅스 6.15 이상은 TCP_RTO_MAX_MS로 이 상한을 1초까지 낮출 수 있습니다.
그래프에서는
처음부터 늘 높음 · 연결별 RTO, 불필요한 RTO 수
확인할 곳
서버의 RTO 최소값 설정(ip route show의 rto_min, 리눅스 6.11 이상은 sysctl net.ipv4.tcp_rto_min_us)과 ss -ti의 rto·rtt를 보고, nstat의 TcpExtTCPSpuriousRTOs 증가분을 봄
이러면 맞음
최소값을 낮춘 서버에서 인터넷 연결의 rto가 rtt에 바짝 붙어 있고 TcpExtTCPSpuriousRTOs가 많이 늘어남. 기본값 그대로면 게임 연결의 rto가 rtt보다 200ms 이상 크고 손실 한 번마다 그만큼 멈춤
이러면 아님
rto가 기본 계산대로(rtt + 200ms 안팎)이고 불필요한 RTO도 적은데 멈춤이 유난히 길면 연속 손실이나 복구 방식 쪽(“thin stream의 느린 복구”, “중간 장비의 TCP 옵션 제거”)