41.3. SystemTap을 사용하여 네트워크 패킷 제거

Linux의 네트워크 스택은 다양한 이유로 패킷을 삭제할 수 있습니다. 일부 Linux 커널에는 패킷이 삭제되는 위치를 추적하는 tracepoint kernel.trace("kfree_skb") 가 포함됩니다.

dropwatch.stp SystemTap 스크립트는 kernel.trace("kfree_skb") 를 사용하여 패킷 삭제 추적을 수행합니다. 이 스크립트는 5초 간격마다 패킷을 삭제하는 위치를 요약합니다.

사전 요구 사항

  • SystemTap 설치에 설명된 대로 SystemTap 설치했습니다.

절차

  • dropwatch.stp 스크립트를 실행합니다.

    # stap  --example dropwatch.stp

    15초 동안 dropwatch.stp 스크립트를 실행하면 다음과 유사한 출력이 생성됩니다.

    Monitoring for dropped packets
    51 packets dropped at location 0xffffffff8024cd0f
    2 packets dropped at location 0xffffffff8044b472
    51 packets dropped at location 0xffffffff8024cd0f
    1 packets dropped at location 0xffffffff8044b472
    97 packets dropped at location 0xffffffff8024cd0f
    1 packets dropped at location 0xffffffff8044b472
    Stopping dropped packet monitor
    참고

    패킷 위치를 더 의미 있게 설정하려면 /boot/System.map-$(uname -r) 파일을 참조하십시오. 이 파일은 각 기능의 시작 주소를 나열하여 dropwatch.stp 스크립트 출력의 주소를 특정 함수 이름에 매핑할 수 있습니다. /boot/System.map-$(uname -r) 파일의 다음 스니펫에서 주소 0xffffffff8024cd0funix_stream_recvmsg 함수에 매핑되고 주소 0xffffff8044b472arp_rcv 함수에 매핑됩니다.

    [...]
    ffffffff8024c5cd T unlock_new_inode
    ffffffff8024c5da t unix_stream_sendmsg
    ffffffff8024c920 t unix_stream_recvmsg
    ffffffff8024cea1 t udp_v4_lookup_longway
    [...]
    ffffffff8044addc t arp_process
    ffffffff8044b360 t arp_rcv
    ffffffff8044b487 t parp_redo
    ffffffff8044b48c t arp_solicit
    [...]