小编akp*_*akp的帖子

整个核心致力于单一流程

在Linux中是否有任何方法可以将一个CPU内核分配给特定的给定进程,并且不应该在此内核上安排任何其他进程或中断处理程序?

我已经阅读了Linux 绑定进程中使用taskset实用程序对CPU的进程关联,但这并没有解决我的问题,因为它只是试图将给定的进程关注到该核心,但是可能可以在此核心上安排其他进程,这是我想避免的.

我们应该更改内核代码以进行调度吗?

c linux cpu scheduling linux-kernel

49
推荐指数
4
解决办法
4万
查看次数

在linux内核中添加了一个新的网络协议

我知道在linux内核中我们可以在传输层添加自己的协议,类似于TCP,UDP等.

是否有任何钩子在网络层注册新协议,类似于IP,ARP,它可以将数据包传输到应用程序以及如何在Linux内核中添加此协议?

c linux networking kernel linux-kernel

11
推荐指数
1
解决办法
7135
查看次数

在内核崩溃后获取Linux内核调试信息

有没有办法在内核chrash发生后获取内核先前的调试信息.

我正在尝试开发一个内核模块,它基本上在内核网络堆栈内的ip层中捕获IP数据包,经过一些修改后,我必须将相同的数据包发送回NIC进行传输.在所有这些过程中,我在printk()的帮助下编写调试信息.但如果出现任何问题并且发生内核故障,那么我们必须重新启动系统.所以有没有办法得到我以前的调试信息,因为重新启动后调试信息不​​存在,因为我尝试通过dmesg命令获取它.

c linux debugging linux-kernel

5
推荐指数
2
解决办法
1万
查看次数

使用 linux-kernel 模块发送 UDP 数据包而不使用套接字

我正在编写一个创建 IP 数据包的内核模块。现在我想发送这个数据包,但还没有为它的传输创建任何套接字。

有什么方法可以在内核例程的帮助下直接发送它。

因为我已经跟踪了用于数据包传输的 linux 内核代码,所以在net/core/dev.c 中定义了一个名为dev_hard_start_xmit()的函数 。我们可以使用它吗?

其实我不想使用套接字。

c sockets linux kernel-module linux-kernel

5
推荐指数
1
解决办法
6004
查看次数

使用 TSC(时间戳计数器)计算时间

我正在尝试通过 Linux 内核模块以非常高的精度测量 Linux 内核中某些代码所花费的时间。

为此,我尝试了rdtscl(),它给出了代码中使用的时钟滴答数,如下所示:

unsigned long ini, end;
rdtscl(ini);
//some code...
rdtscl(end);
printk("time taken=%lu ticks",end-ini);
Run Code Online (Sandbox Code Playgroud)

正如我所提到的http://en.wikipedia.org/wiki/Time_Stamp_Counter,它说TSC 是自 Pentium 以来所有 x86 处理器上都存在的 64 位寄存器。那么,如果我有双核处理器,这个计数器会出现在两个内核中还是只有一个,因为它只有一个处理器但双核?

第二个问题是:我有英特尔至强 i3 处理器,它有 4 个处理器,每个处理器都有 2 个内核。然后,测量时钟滴答声,会给出单个处理器的滴答声还是所有 4 个处理器的添加?

c linux performance multiprocessing linux-kernel

5
推荐指数
1
解决办法
9997
查看次数

sk_buff copy&sk_buff clone

我正在为linux内核编写一个模块,它试图窃取数据包及其相关的sk_buff.这样做我想使用struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask)&然后在丢弃数据包时将返回类型传递给内核.

所以当内核获取有关数据包丢弃的信息时,它会尝试释放sk_buff.这里我的问题是否会影响我新复制的skb及其数据包的指向数据?或者现在我可以玩我的新sk_buff?

或者是否可以使用skb_clone()并使用分组数据部分而不删除旧sk_buff引用的数据,因为它将降低数据包的复制成本.

c linux kernel-module linux-device-driver linux-kernel

3
推荐指数
1
解决办法
5870
查看次数

在用户空间应用程序中使用自旋锁

我正在尝试创建一个具有结构的内核模块,我想在用户空间应用程序中使用相同的结构,并且该应用程序与给定的模块一起工作。

主要问题是这个结构包含一个名为spinlock_t type. 在内核中用于锁定但不知道如何在用户空间应用程序中使用它。

struct new_struct
{
  ...some variable...
  spinlock_t u_lock;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法在用户空间应用程序中使用自旋锁。

或者是否有任何其他锁定技术可以在内核和用户空间中使用,以便如果锁定由用户应用程序持有,内核模块应该无法获得它,反之亦然。

c linux locking linux-device-driver linux-kernel

3
推荐指数
1
解决办法
7535
查看次数