linux 下一跳缓存,early demux(‌早期解复用)‌介绍

3.6版本以后的下一跳缓存

  • 3.6版本移除了FIB查找前的路由缓存。这意味着每一个接收发送的skb现在都必须要进行FIB查找了。这样的好处是现在查找路由的代价变得稳定(consistent)了。
  • 3.6版本实际上是将FIB查找缓存到了下一跳(fib_nh)结构上,也就是下一跳缓存
  • 下一跳缓存的作用就是尽量减少最初和最后的申请释放dst_entry,它将dst_entry缓存在下一跳结构(fib_nh)上。这和之前的路由缓存有什么区别吗? 很大的区别!之前的路由缓存是以源IP和目的IP为KEY,有千万种可能性,而现在是和下一跳绑定在一起,一台设备没有那么多下一跳的可能。这就是下一跳缓存的意义
  • 下一跳缓存并没有减少路由查找的开销,而是减少了内存分配/释放的开销。这是因为一个数据包在发送过程中,必须在路由查找结束后绑定一个下一跳结构体,然后绑定一个邻居,路由表只是一个静态表,数据通道没有权限修改它,它只是用来查找,协议栈必须用查找到的路由项信息来构造一个下一跳结构体,这个时候就体现了缓存下一跳的重要性,因为它减少了构造的开销。

early demux

early demux是在skb接收方向的加速方案。linux kernel 3.6之后版本在取消了FIB查询前的路由缓存后,每个skb应该都需要查询FIB。而early demux是基于一种思想:如果一个skb是本机某个应用程序的套接字需要的,那么我们可以将路由的结果缓存在内核套接字结构上,这样下次同样的报文(四元组)到达后,我们可以在FIB查询前就将报文提交给上层,也就是提前分流(early demux)。

参考

https://segmentfault.com/a/1190000020183650

https://www.acwing.com/blog/content/23014/

https://abcdxyzk.github.io/blog/2018/07/09/kernel-ip_early_demux/

相关推荐
比昨天多敲两行2 分钟前
Linux进程间通信-共享内存
linux·运维·服务器
AbandonForce2 分钟前
Linux权限深入解读
linux·运维·服务器
哎呦,帅小伙哦4 分钟前
Nanomsg usock 模块:Socket 选项与错误码介绍
linux·中间件·nanomsg
我是一颗柠檬12 分钟前
【Java后端技术亮点】Feed流三级缓存设计,从10秒到100毫秒的优化实战
java·开发语言·后端·缓存
Java 码思客14 分钟前
【Redis分布式缓存实战】第3章 Redis核心机制深度解析
redis·分布式·缓存
CDN36018 分钟前
【前端实战】LCP指标从2.5s优化至0.8s!用360CDN的WebP自适应与缓存策略榨干性能
前端·缓存
小饼干在学嘎瓦19 分钟前
秒杀场景Redis做预扣减,问题在哪里?
数据库·redis·mybatis
码不停蹄的玄黓21 分钟前
生产可用的 Redis 分布式锁完整实现
数据库·redis·分布式
草莓熊Lotso27 分钟前
【Linux网络】深入理解 HTTP 协议(一):从基础概念到 URL 编码解码
linux·网络·c++·网络协议·http·软件工程
stanleyrain41 分钟前
linux上无感操作Windows上的文件夹
linux·运维·windows