Recent Posts
-
2024-07-16
XDP 接收报文实践
现代网卡能接收处理报文的极限通常会超过单个 CPU 能能力, 此时具有硬件 RSS 功能的网卡来对接收到的流量进行分流, 以将负载分发给不同的 CPU,然而, 如果网卡不具有硬件 RSS 功能或者流量不符合 RSS 支持的类型 (比如我们想根据报文的非常规字段设计自定义的 CPU 分发规则) 时, 就需要另想办法.这里, eXpress Data Path(XDP) 就是一个可选方案, 我们可以利用 XDP 实现可编程的 RSS, 以及其他更多功能….XDP 的基本原理是在报文接收方向,...
-
2024-01-15
linux 内核实现与 rfc 不一致的地方
本文后续不定时更新SYN 报文是否能携带 payload (不考虑 TCP FastOpen)TCP Fast Open(TFO)TCP ISN 递增速度理解 TCP 初始序号选择(ISN Selection)TCP TIME-WAIT 时间tcp_tw_reuse 的原理和实现TCP MSS 协商Linux内核协议栈中一些关于 TCP MSS 的细节rfc 接收端糊涂窗口综合征 vs 内核首部预测一个 TCP 接收缓冲区问题的解析本文不定时更新
-
2023-12-12
跟我一起学习drgn(4)---实现'ss -nlpt'
ss -nlpt 是查看本机tcp监听端口的常用命令, 而本文将使用drgn重新实现它. 目的是为了证明一点: 作为一种快照式的调试工具, drgn 能非常有效地检视运行中内核的实时数据.预期结果先看看 ss -nlpt 会展示什么信息:图中展示了5条记录, 每条记录包含了监听信息: TCP状态, 队列长度, 地址端口, 进程和fd信息.数据来源接下来, 我们需要从内核源码中寻找上述信息的来源. 本文使用的内核版本是 6.2.2, 不同内核版本的数据结构略有不同内核创建的所有 tcp s...
-
2023-12-08
跟我一起学习drgn(3)---调试crash dump
drng 可以调试运行中的 kernel (通过/proc/kcore), 也可以对 crash dump 文件进行调试.本文以官网中的Kyber bug为例子, 介绍 drgn 如何找出内核 bug.前置知识为了读懂这个案例, 需要先了解一些前置知识。内核会为每个 block 设备建立一个每 CPU 的 “software queue”, 并为硬件 I/O queue 建立一个 “hardware queue”,这两者是多对一的关系:每一个”hardware queue”可以绑定一个或多...
-
2023-12-07
跟我一起学习drgn(2)---核心概念
本文介绍 drgn 中的一些核心概念.Programs A program being debugged is represented by an instance of the drgn.Program class. The drgn CLI is initialized with a Program named prog; unless you are using the drgn library directly, this is usually the only Program ...