网卡收发队列设置ringparam

用户可以通过ethtool -g/G获取或设置对应网络接口收发队列参数:
在这里插入图片描述如获取eth0收发队列深度可以通过如下方式进行:
在这里插入图片描述其中:pre-set maximums对应网卡预设的最大值,current hardware settings对应网卡当前设置值。

以STMMAC驱动为例,当用户调用ethtool获取时,对应驱动实现是这样的:

//drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
static void stmmac_get_ringparam(struct net_device *netdev,
                 struct ethtool_ringparam *ring)
{
    struct stmmac_priv *priv = netdev_priv(netdev);

    ring->rx_max_pending = DMA_MAX_RX_SIZE;
    ring->tx_max_pending = DMA_MAX_TX_SIZE;
    ring->rx_pending = priv->dma_rx_size;
    ring->tx_pending = priv->dma_tx_size;
}

ethtool_ringparam结构定义如下:

//include/uapi/linux/ethtool.h

/*
 * 如果接口没有单独的接收小包和/或巨型包环形缓冲区,
 * rx_mini_max_pending 和/或 rx_jumbo_max_pending 将为 0。
 */
struct ethtool_ringparam {
    //命令编号,可以是 %ETHTOOL_GRINGPARAM 或 %ETHTOOL_SRINGPARAM
	__u32	cmd;
    //每个接收环形缓冲区支持的最大待处理条目数。只读
	__u32	rx_max_pending;
    //每个接收小包环形缓冲区支持的最大待处理条目数。只读
	__u32	rx_mini_max_pending;
    //每个接收巨型包环形缓冲区支持的最大待处理条目数。只读
	__u32	rx_jumbo_max_pending;
    //每个发送环形缓冲区支持的最大待处理条目数。只读
	__u32	tx_max_pending;
    //每个接收环形缓冲区当前的最大待处理条目数
	__u32	rx_pending;
    //每个接收小包环形缓冲区当前的最大待处理条目数
	__u32	rx_mini_pending;
    //每个接收巨型包环形缓冲区当前的最大待处理条目数
	__u32	rx_jumbo_pending;
    //每个发送环形缓冲区当前的最大待处理条目数
	__u32	tx_pending;
};

设置收发队列深度可以通过如下方式进行:
在这里插入图片描述以上命令分别修改了RX和TX队列的深度,通过ethtool -g可以查看到设置已经生效。

以STMMAC驱动为例,当执行以上命令时,对应驱动实现是这样的:

static int stmmac_set_ringparam(struct net_device *netdev,
                struct ethtool_ringparam *ring)
{
    if (ring->rx_mini_pending || ring->rx_jumbo_pending ||
        ring->rx_pending < DMA_MIN_RX_SIZE ||
        ring->rx_pending > DMA_MAX_RX_SIZE ||
        !is_power_of_2(ring->rx_pending) ||
        ring->tx_pending < DMA_MIN_TX_SIZE ||
        ring->tx_pending > DMA_MAX_TX_SIZE ||
        !is_power_of_2(ring->tx_pending))
        return -EINVAL;

    return stmmac_reinit_ringparam(netdev, ring->rx_pending,
                       ring->tx_pending);
}

在驱动中,首先对传入的参数进行了合法性判断,对于不支持的参数设置直接返回错误。参数无误则会修改收发队列深度信息。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值