41.3. 使用 SystemTap 监控网络数据包丢弃

Linux 中的网络堆栈可以丢弃由于各种原因的数据包。有些 Linux 内核包括一个跟踪点(tracepoint), kernel.trace ("kfree_skb") ',用于跟踪数据包被丢弃的位置。

dropwatch.stp SystemTap 脚本使用 kernel.trace ("kfree_skb") 来跟踪数据包丢弃;脚本总结了每 5 秒间隔丢弃数据包的位置。

先决条件

流程

  • 运行 dropwatch.stp 脚本:

    # stap  --example dropwatch.stp

    运行 dropwatch.stp 脚本 15 秒的结果类似如下:

    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) 文件的代码片段中,地址 0xffffffff8024cd0f 映射到功能 unix_stream_recvmsg,地址 0xffffffff8044b472 映射到功能 arp_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
    [...]