本文作者:plkng

linux内核学习误区 《linux内核分析》

plkng 5分钟前 2
linux内核学习误区 《linux内核分析》摘要: 大家好,今天小编关注到一个比较有意思的话题,就是关于linux内核学习误区的问题,于是小编就整理了3个相关介绍linux内核学习误区的解答,让我们一起看看吧。为什么内核态转发性能低...

大家好,今天小编关注到一个比较意思的话题,就是关于linux内核学习误区的问题,于是小编就整理了3个相关介绍Linux内核学习误区的解答,让我们一起看看吧。

  1. 为什么内核态转发性能低?
  2. 举例说明Linux内核版本号变化规律。?
  3. linux使用内核模块有什么优缺点?

什么内核态转发性能低?

现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK。

但是,即便Linux内核协议栈收包效率真的很低,这是为什么?有没有办法去尝试着优化?而不是动不动就DPDK。

我们从最开始说起。

Linux内核作为一个通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。

但一开始不知道怎么回事将网络协议栈的实现塞进了内核态,从此它就一直在内核态了。既然网络协议栈的处理在内核态进行,那么网络数据包必然是在内核态被处理的。无论如何,数据包要先进入内核态,这就涉及到了进入内核态的方式:

外部可以从两个方向进入内核-从用户态系统调用进入或者从硬件中断进入。

也就是说,系统在任意时刻,必然处在两个上下文中的一个:

进程上下文

中断上下文 (在非中断线程化的系统,也就是任意进程上下文)

收包逻辑的协议栈处理显然是自网卡而上的,它显然是在中断上下文中,而数据包往用户进程的数据接收处理,显然是在应用程序的进程上下文中, 数据包通过socket在两个上下文中被转接。

举例说明Linux内核版本号变化规律。?

Linux内核版本号以主版本号、次版本号、补丁级版本号三部分组成。主版本号一般来说变化较大,表示改变较大,次版本号一般变化较小,表示功能有改进,补丁级版本号一般用于修复bug等。

例如Linux内核版本号为3.10.0,表示主版本号为3,次版本号为10,补丁级版本号为0。

linux使用内核模块有什么优缺点?

当然需要。。。

第一点,就是源码树中有相应的头文件函数的实现,没有源码树,你哪调用去呢?

(pc上编译的时候内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你pc上版本的内核可加载的模块)。

第二个,内核模块中会记录版本号的部分,需要记录版本号的原因是不同的内核版本之间,那些接口和调用可能会有比较大的差异,因此必须要保证你的代码和某个特定的内核对应,这样编译出来的模块就可以(也是只能)在运行这个内核版本的Linux系统中加载,否则一个很简单异常就会导致内核崩溃,或者你的代码根本无法编译通过(接口名变了)。我上面说的是编译模块的情况,当然如果是把模块直接编译到内核当中去的话,那就不用说了,没有内核源码,你无法编译内核。

到此,以上就是小编对于linux内核学习误区的问题就介绍到这了,希望介绍关于linux内核学习误区的3点解答对大家有用。

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享