一,工具简介

netqtop工具用于追踪在数据链路层上执行数据包发送 (xmit_one) 和数据包接收 (__netif_receive_skb_core) 的内核函数。该工具不仅通过指定的网络接口追踪每个数据包,还分别统计发送和接收方向上的 PPS(每秒数据包数)、BPS(每秒位数)和平均数据包大小以及按大小范围分类的数据包数量。结果以表格形式打印输出,可用于了解感兴趣的网络接口上每个队列的流量负载分配情况,以判断是否均衡。整体性能信息则在底部提供。

二,代码示例


#include <linux/netdevice.h>
#include <linux/ethtool.h>
#if IFNAMSIZ != 16 
#error "IFNAMSIZ != 16 is not supported"
#endif
#define MAX_QUEUE_NUM 1024

/**
* 这个union用于存储指定接口的名称,并将其读取为两种不同的数据类型。
*/
union name_buf{
    char name[IFNAMSIZ];
    struct {
        u64 hi;
        u64 lo;
    }name_int;
};

/* 在跟踪点中检索的数据 */
struct queue_data{
    u64 total_pkt_len;
    u32 num_pkt;
    u32 size_64B;
    u32 size_512B;
    u32 size_2K;
    u32 size_16K;
    u32 size_64K;
};

/* 用于设备名称的长度为1的数组 */
BPF_ARRAY(name_map, union name_buf, 1);
/* 传输和接收数据包的表格 */
BPF_HASH(tx_q, u16, struct queue_da
03-19 09:04