Network Latency와 SO_Timestamping

1.
일반적으로 레이턴시를 측정하기 위해서 syslog를 이용합니다. 어플리케이션 로그로 레이턴시를 측정할 때 빠지는 부분이 있습니다. 네트워크 어댑터와 Userspace사이의 시간을 측정할 수 없습니다. Network Latency입니다. Network Latency는 10G 네트워크 카드를 구매할 때와 튜닝할 때 중요합니다. 10G 네트워크 카드로 많이 사용하는 Mellanox, Solarflare, Exanic 및 각 제조업체가 제공하는 TCP Accelerator의 튜닝을 할 때 숫자가 필요하기 때문입니다.

이러한 요구에 부응하는 기술이 Timestamping입니다. 리눅스 커널 문서중 timestamping입니다.

이상을 기초로 하여 SO_TIMESTAMPING: powering fleetwide RPC monitoring은 실제 사용설명을 합니다.

Download (PDF, 560KB)

아래는 2009년 Patrick Ohly가 개발한 Socket timestamping 프로그램입니다.

DMA환경에서 많이 사용하는 Solarflare, Mellanox, Exanic은 고유한 TCP Accelerator를 제공합니다. 관련한 프로젝트를 보면 timestamping과 관련한 툴을 각각 제공합니다.

먼저 Solarflare. AMD(옛날 Solarflare) OpenOnload에서 제공하는 hwtimestamping을 이용합니다.

Download (PDF, 296KB)

libvma의 경우 별도의 도구를 제공하지 않고 리눅스커널에 포함되어 있는 timestamping.c를 이용하는 방법을 제시합니다.

2.
이상의 개념과 도구를 이용하여 실 환경에 적용할 수 있을까요? 이런 목적으로 이루어진 프로젝트가 있습니다. 일본 iij engineering이 소개한 How to measure network latency using hardware timestamps은 앞서의 so_timestamps를 이용하여 네트워크 레이턴시를 측정하는 방법을 소개합니다. 앞서 프로그램과 다른 점은 측정한 값을 파일로 저장하고 그래프로 출력할 수 있도록 코드를 수정한 점입니다.

원래 프로젝트 레포지토리에는 Rust로 개발된 packet sender가 있지만 아래는 C로 된 packet sender입니다.

이상을 실제 업무에 적용한 것이 Timestamping を使ってネットワークレイテンシを分析することで、ゲスト VM の Disk 性能低下問題を解決した입니다. 가상환경에서 네트워크 성능향상을 위해 위 툴을 적용하였습니다.

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.