中断合并参数coalesce_params解释

在网络驱动程序中,中断是指网络设备向处理器发送信号,通知它有数据需要处理。频繁的中断会导致处理器负担过重,从而影响系统性能。为了优化性能,驱动程序可以使用中断合并技术,将多个中断合并为一个,从而减少中断的频率。这个是通过在ethtool_ops.supported_coalesce_params指示驱动支持哪些配置方式。

c 复制代码
//include/linux/ethtool.h

#define ETHTOOL_COALESCE_RX_USECS		BIT(0)
#define ETHTOOL_COALESCE_RX_MAX_FRAMES		BIT(1)
#define ETHTOOL_COALESCE_RX_USECS_IRQ		BIT(2)
#define ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ	BIT(3)
#define ETHTOOL_COALESCE_TX_USECS		BIT(4)
#define ETHTOOL_COALESCE_TX_MAX_FRAMES		BIT(5)
#define ETHTOOL_COALESCE_TX_USECS_IRQ		BIT(6)
#define ETHTOOL_COALESCE_TX_MAX_FRAMES_IRQ	BIT(7)
#define ETHTOOL_COALESCE_STATS_BLOCK_USECS	BIT(8)
#define ETHTOOL_COALESCE_USE_ADAPTIVE_RX	BIT(9)
#define ETHTOOL_COALESCE_USE_ADAPTIVE_TX	BIT(10)
#define ETHTOOL_COALESCE_PKT_RATE_LOW		BIT(11)
#define ETHTOOL_COALESCE_RX_USECS_LOW		BIT(12)
#define ETHTOOL_COALESCE_RX_MAX_FRAMES_LOW	BIT(13)
#define ETHTOOL_COALESCE_TX_USECS_LOW		BIT(14)
#define ETHTOOL_COALESCE_TX_MAX_FRAMES_LOW	BIT(15)
#define ETHTOOL_COALESCE_PKT_RATE_HIGH		BIT(16)
#define ETHTOOL_COALESCE_RX_USECS_HIGH		BIT(17)
#define ETHTOOL_COALESCE_RX_MAX_FRAMES_HIGH	BIT(18)
#define ETHTOOL_COALESCE_TX_USECS_HIGH		BIT(19)
#define ETHTOOL_COALESCE_TX_MAX_FRAMES_HIGH	BIT(20)
#define ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL	BIT(21)

/*
 * 这个参数允许驱动程序基于时间来合并中断。
 * 例如,如果设置为100微秒,驱动程序会等待最多100微秒来合并中断,
 * 而不是每次都有数据时立即中断处理器。
 */
#define ETHTOOL_COALESCE_USECS						\
	(ETHTOOL_COALESCE_RX_USECS | ETHTOOL_COALESCE_TX_USECS)

/*
 * 这个参数允许驱动程序基于帧数来合并中断。
 * 例如,如果设置为10帧,驱动程序会等待最多10个数据帧到达后再中断处理器,
 * 而不是每个数据帧到达时都中断一次。
 */
#define ETHTOOL_COALESCE_MAX_FRAMES					\
	(ETHTOOL_COALESCE_RX_MAX_FRAMES | ETHTOOL_COALESCE_TX_MAX_FRAMES)

/*
 * 它定义了在中断处理期间,接收中断前等待的时间(以微秒为单位)。
 * 这意味着当网络接口已经处理中断时,驱动程序会等待指定的微秒数后再触发新的接收中断
 */
#define ETHTOOL_COALESCE_USECS_IRQ					\
	(ETHTOOL_COALESCE_RX_USECS_IRQ | ETHTOOL_COALESCE_TX_USECS_IRQ)

/*
 * 它定义了在中断处理期间,接收中断前允许的最大帧数。
 * 这意味着当网络接口已经处理中断时,驱动程序会等待接收到指定数量的帧后再触发新的接收中断
 */
#define ETHTOOL_COALESCE_MAX_FRAMES_IRQ		\
	(ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ |	\
	 ETHTOOL_COALESCE_TX_MAX_FRAMES_IRQ)

/*
 * 用于启用或禁用自适应中断合并的参数。自适应中断合并是一种动态调整中断合并设置的机制,
 * 旨在根据当前网络流量条件优化性能。
 * 自适应接收中断合并 (adaptive-rx):当启用时,驱动程序会根据接收的数据包速率自动调整
 *   中断合并参数。在低数据包速率下,驱动程序会减少中断延迟以提高响应速度;在高数据包速率下,
 *   驱动程序会增加中断延迟以减少中断频率,从而提高吞吐量。
 * 自适应发送中断合并 (adaptive-tx):类似地,驱动程序会根据发送的数据包速率自动调整中断合并参数
 */
#define ETHTOOL_COALESCE_USE_ADAPTIVE					\
	(ETHTOOL_COALESCE_USE_ADAPTIVE_RX | ETHTOOL_COALESCE_USE_ADAPTIVE_TX)

/*
 * ETHTOOL_COALESCE_USECS_LOW 和 ETHTOOL_COALESCE_USECS_HIGH 
 * 分别用于低数据包速率和高数据包速率下的中断延迟时间(以微秒为单位)。
 * ETHTOOL_COALESCE_USECS_LOW:在低数据包速率下,接收中断前等待的时间。
 *  例如,如果设置为100微秒,那么在低数据包速率下,驱动程序会等待100微秒后再触发接收中断。
 * ETHTOOL_COALESCE_USECS_HIGH:在高数据包速率下,接收中断前等待的时间。
 *    例如,如果设置为50微秒,那么在高数据包速率下,驱动程序会等待50微秒后再触发接收中断。
 */
#define ETHTOOL_COALESCE_USECS_LOW_HIGH					\
	(ETHTOOL_COALESCE_RX_USECS_LOW | ETHTOOL_COALESCE_TX_USECS_LOW | \
	 ETHTOOL_COALESCE_RX_USECS_HIGH | ETHTOOL_COALESCE_TX_USECS_HIGH)

/*
 * ETHTOOL_COALESCE_MAX_FRAMES_LOW 和 ETHTOOL_COALESCE_MAX_FRAMES_HIGH 
 * 分别用于低数据包速率和高数据包速率下的最大帧数。
 * ETHTOOL_COALESCE_MAX_FRAMES_LOW:在低数据包速率下,接收中断前允许的最大帧数。
 *	例如,如果设置为10帧,那么在低数据包速率下,驱动程序会等待接收到10个数据帧后再触发接收中断。
 * ETHTOOL_COALESCE_MAX_FRAMES_HIGH:在高数据包速率下,接收中断前允许的最大帧数。
 *	例如,如果设置为20帧,那么在高数据包速率下,驱动程序会等待接收到20个数据帧后再触发接收中断。
 */
#define ETHTOOL_COALESCE_MAX_FRAMES_LOW_HIGH	\
	(ETHTOOL_COALESCE_RX_MAX_FRAMES_LOW |	\
	 ETHTOOL_COALESCE_TX_MAX_FRAMES_LOW |	\
	 ETHTOOL_COALESCE_RX_MAX_FRAMES_HIGH |	\
	 ETHTOOL_COALESCE_TX_MAX_FRAMES_HIGH)

/*
 * ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL:采样间隔时间
 * ETHTOOL_COALESCE_PKT_RATE_LOW:低数据包速率阈值
 * ETHTOOL_COALESCE_PKT_RATE_HIGH:高数据包速率阈值
 */
#define ETHTOOL_COALESCE_PKT_RATE_RX_USECS				\
	(ETHTOOL_COALESCE_USE_ADAPTIVE_RX |				\
	 ETHTOOL_COALESCE_RX_USECS_LOW | ETHTOOL_COALESCE_RX_USECS_HIGH | \
	 ETHTOOL_COALESCE_PKT_RATE_LOW | ETHTOOL_COALESCE_PKT_RATE_HIGH | \
	 ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL)

#define ETHTOOL_STAT_NOT_SET	(~0ULL)
相关推荐
blessing。。15 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_7544215430 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
ZZZCY200342 分钟前
华为ENSP--IP编址及静态路由配置
网络·华为
EasyCVR1 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
运维&陈同学1 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
hgdlip1 小时前
主IP地址与从IP地址:深入解析与应用探讨
网络·网络协议·tcp/ip
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode
科技象限2 小时前
电脑禁用U盘的四种简单方法(电脑怎么阻止u盘使用)
大数据·网络·电脑
东方隐侠安全团队-千里2 小时前
网安瞭望台第3期:俄黑客 TAG - 110组织与密码攻击手段分享
网络·chrome·web安全·网络安全
周末不下雨2 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu