在Linux中是否有任何方法可以将一个CPU内核分配给特定的给定进程,并且不应该在此内核上安排任何其他进程或中断处理程序?
我已经阅读了Linux 绑定进程中使用taskset实用程序对CPU的进程关联,但这并没有解决我的问题,因为它只是试图将给定的进程关注到该核心,但是可能可以在此核心上安排其他进程,这是我想避免的.
我们应该更改内核代码以进行调度吗?
我知道在linux内核中我们可以在传输层添加自己的协议,类似于TCP,UDP等.
是否有任何钩子在网络层注册新协议,类似于IP,ARP,它可以将数据包传输到应用程序以及如何在Linux内核中添加此协议?
有没有办法在内核chrash发生后获取内核先前的调试信息.
我正在尝试开发一个内核模块,它基本上在内核网络堆栈内的ip层中捕获IP数据包,经过一些修改后,我必须将相同的数据包发送回NIC进行传输.在所有这些过程中,我在printk()的帮助下编写调试信息.但如果出现任何问题并且发生内核故障,那么我们必须重新启动系统.所以有没有办法得到我以前的调试信息,因为重新启动后调试信息不存在,因为我尝试通过dmesg命令获取它.
我正在编写一个创建 IP 数据包的内核模块。现在我想发送这个数据包,但还没有为它的传输创建任何套接字。
有什么方法可以在内核例程的帮助下直接发送它。
因为我已经跟踪了用于数据包传输的 linux 内核代码,所以在net/core/dev.c 中定义了一个名为dev_hard_start_xmit()的函数 。我们可以使用它吗?
其实我不想使用套接字。
我正在尝试通过 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 个处理器的添加?
我正在为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引用的数据,因为它将降低数据包的复制成本.
我正在尝试创建一个具有结构的内核模块,我想在用户空间应用程序中使用相同的结构,并且该应用程序与给定的模块一起工作。
主要问题是这个结构包含一个名为spinlock_t type. 在内核中用于锁定但不知道如何在用户空间应用程序中使用它。
struct new_struct
{
...some variable...
spinlock_t u_lock;
};
Run Code Online (Sandbox Code Playgroud)
有没有办法在用户空间应用程序中使用自旋锁。
或者是否有任何其他锁定技术可以在内核和用户空间中使用,以便如果锁定由用户应用程序持有,内核模块应该无法获得它,反之亦然。
c ×7
linux ×7
linux-kernel ×7
cpu ×1
debugging ×1
kernel ×1
locking ×1
networking ×1
performance ×1
scheduling ×1
sockets ×1