【问题标题】:How to add code into the linux kernel?如何将代码添加到 linux 内核中?
【发布时间】:2014-04-09 00:19:08
【问题描述】:

我正在研究如何分析和评估Linux的TCP/IP协议栈。我的目标是从整体上研究tcp/ip协议栈的性能,研究每一层的时间成本以及tcp/p协议层与ip层queuinf之间的交互。

要做到以上几点:我正在使用基于探测节点的模式来研究 linux 的 TCP/IP 协议的内部行为。探测节点是添加到内核中的一段代码,用于记录时间戳、排队长度和数据包大小等信息。

我的问题:如何将探测节点添加到内核中?

【问题讨论】:

  • 如果您不太了解 Linux,请避免修补内核。否则,敢于编写自己的内核模式。见kernelnewbies.org
  • @user3458454 见 KprobeJprobeopensourceforu.com/2011/04/…
  • 是否可以从内核发回时间戳??我不想将其存储在文件中。

标签: c linux tcp linux-kernel kernel


【解决方案1】:

你可以使用(例如)SystemTap,这个工具背后的主要思想是将探测节点放在某个地方:内核或用户空间程序。

如果你没有时间学习 SystemTap,你可以在内核中放一些printk,然后从dmesg 中读取。

在这两种情况下,由于打印,您都会在网络堆栈中引入很大的延迟。为了减少探测引入的延迟,我建议您使用 SystemTap,将所有时间样本存储在某个地方,并仅在采集结束时打印。

【讨论】:

  • 内核开始通过tcp/ip层调度新到达的数据时如何获取时间戳??我正在分析数据到达内核中的套接字以及开始在内核中调度时的中断延迟。
  • 这里是一个例子:sourceware.org/systemtap/SystemTap_Beginners_Guide/…。但是您必须根据自己的情况进行调整
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 2020-02-02
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多