linux内核对网卡驱动多队列的支持

简介:
linux的招牌就是它强大的网络功能,稳定,高效,能随着现实的日新月异而日趋完善。众所周知,linux的网卡由结构体net_device表示,一 个该结构体对应一个可以调度的数据包发送队列,注意,这里不谈数据包接收,数据包的实体在内核中以结构体sk_buff表示,这样的话,上述文字就可以用 以下图示来表示: 
clip_image002  
所谓的网卡对发送数据包的调度指的是多个数据包共享一个网卡的规则,当然就要拥有一系列的约定,比如区分数据包的优先级,区分数据包的类型,内核根据不同的调度策略来对不同的数据包进行排队,然后按照队列的顺序进行发送,关于这些细节不是本文要讨论的内容,可以参考linux内核对网络流量控制的支持方面的资料,需要明白的是,以往不支持多队列的内核中每个网卡拥有一个排队规则,然后根据排队规则的过滤器将数据包区分为一个一个的类,类中还可以嵌套新的更 细的排队规则,这个过程可以看到是以网卡为中心的,因为是每网卡一队列,这个队列指的是根队列,以网卡为中心实际上是一种过时的方式,还可以看成是以现在的观点来看偷懒的方式,毕竟网卡是内核和整个系统中的静态数据,是完全可以把握的,可是这已经不能适合当今的网络应用了,当今是一个必须适应大环境的世界 而不再是局部意义上的入乡随俗的世界了,丰富的数据没有必要入linux网卡的乡随网卡唯一的根队列的俗了,取而代之的是必须为丰富的网络数据提供属于它 们自己的舞台而不是逼迫它们强挤到网卡的根队列等待调度。我们来看一下具体的意义。 
特别在无线设备上,几乎都是网络应用,有声音,有视频,有电子邮件,有实时数据等等。如果将这些数据都统一到一个队列中当然是可以的,因为2.6.27之 前的内核并没有因为没有实现多队列而出现问题,但是这么做是有弊端的,因为我们将必须用一种统一的方式管理它们,可实际上它们的区别很大很大,如果统一的队列有一些什么限制的话,这种限制将会限制到所有的数据,这将导致调度程序的复杂化。事实上真的需要将事情搅和在一起从而必须增加复杂性吗?我们在遇到困 难的时候必须想想现实是什么样子的,然后我们按照真实的世界的样子去做就会得到最好的解决方案,返璞归真真的是一条亘古不变的真理。实现了多队列,每个网卡将拥有很多的根队列,每个应用一个都有可能,这样的话我们就可以随心所欲的控制并且仅仅控制我们想控制的数据包了,比如视频数据强调实时性而对数据的准 确性要求不高,这样我们需要给视频数据包队列更高的发送优先级,为了不使视频效果变得很卡,我们缩短视频数据包队列的长度,而对那些要求准确性但是不要求实时的比如电子邮件的数据包队列,我们可以降低其优先级但是增加队列的长度,仅此而已,不需要变更已经很优美的调度机制就可以轻松实现。实现了多队列的网 卡的图示如下: 
clip_image004  
前面简要说明了多队列的意义,在对内核的更改上也很简单,就是将原先的每个net_device一个的队列改为多个就可以了: 
static inline void qdisc_reset_all_tx(struct net_device *dev) 
 { 

-


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273947

相关文章
|
13天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
1月前
|
Linux API 调度
Linux系统驱动跟裸机驱动的区别
Linux系统驱动跟裸机驱动的区别
29 0
|
1月前
|
网络协议 Ubuntu Linux
Linux 动态/静态配置ip网卡信息
Linux 动态/静态配置ip网卡信息
36 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
31 0
|
1月前
|
存储 缓存 Linux
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
35 0
|
1月前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
6天前
|
算法 Linux 调度
深入理解Linux内核的进程调度机制
【4月更文挑战第17天】在多任务操作系统中,进程调度是核心功能之一,它决定了处理机资源的分配。本文旨在剖析Linux操作系统内核的进程调度机制,详细讨论其调度策略、调度算法及实现原理,并探讨了其对系统性能的影响。通过分析CFS(完全公平调度器)和实时调度策略,揭示了Linux如何在保证响应速度与公平性之间取得平衡。文章还将评估最新的调度技术趋势,如容器化和云计算环境下的调度优化。
|
8天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
63 0
|
12天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
20 3
|
17天前
|
域名解析 监控 网络协议
Linux网卡与IP地址:通往网络世界的通行证 🌐
探索Linux网卡与IP地址关系,理解网卡作为网络通信的关键。Linux网卡需配置IP地址以实现唯一标识、通信、路由、安全管理和网络服务。无IP地址时,网卡在特定情况如局域网服务、网络监控、无线认证和网络启动可有限工作,但通用功能受限。配置IP地址通常通过`ifconfig`(传统)或`ip`(现代)命令,永久配置需编辑网络配置文件。配置错误如IP冲突、子网掩码错误、默认网关和DNS配置不当可能导致服务中断、网络拥堵、安全漏洞和数据丢失。重视网络配置的正确与安全至关重要。
Linux网卡与IP地址:通往网络世界的通行证 🌐