问题标签 [linux-kernel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - 多个网卡的相同驱动程序——性能瓶颈?
我正在为多个英特尔网卡(英特尔 EXPI9402PT,基于 82571EB 芯片)使用驱动程序 e1000e。问题是当我尝试在多个接口上使用最大速度(1GB)时,每个接口的速度开始下降。
我在内核空间中有自己的驱动程序,旨在仅发送给定的数据包。它只是通过以下方式分配数据包:
他们通过以下方式发送它们:
每个接口都有自己的驱动程序实例。
对于一个接口,我得到:120435948 字节/秒。
对于两个接口,我得到:61080233 字节/秒和 60515294 字节/秒。
对于三个接口,我得到:28564020 字节/秒、27111184 字节/秒、27118907 字节/秒。
可能是什么原因?hard_start_xmit 函数是可重入的吗?
linux - 内核参数
内核是否需要从引导加载程序中获取任何内容。通常内核能够从头开始启动系统,那么为什么它需要引导加载程序中的任何内容呢?我见过这样的内核启动消息。
那么传递的变量到底是什么?另外,如何从引导加载程序传递变量?是通过堆栈吗?
java - 是否有可能知道进程是否在 Linux 上的 Receive() 调用中处于阻塞状态等待?
我的主要目的是以循环方式一个接一个地执行进程,直到一个调用 receive() 并被阻塞,以便执行切换到队列中的下一个进程。有一个用 Java 编码的控制器应用程序,它使用 Runtime.getRuntime().exec() 执行这些进程(也是 Java 应用程序)并保留作为 Process 对象的返回值。
为了达到这个目的,我需要捕获接收()调用(或它们的状态,被阻塞)并将它们告诉控制器(主)应用程序。
如果可能的话,我可以尽可能地低级。我的第一个想法是从驱动程序获取此信息,然后将其告诉我的控制器 Java 应用程序。我编写了一个 linux 内核网络模块来捕获发送和接收操作,但是 AFAIK 的 socket.receive() 函数并没有告诉网络驱动程序任何东西。
所以,我认为选项是从 JVM 获取这些信息,以某种方式从 linux 命令或其他获取它,或者可能通过 linux 内核模块?
你有什么建议?
linux-kernel - kvm vs. vmware 用于内核调试/USB驱动开发
我目前正在设置 vmware Server 2.0 以使用 gdb 进行内核调试(请参阅此设置指南),有人问我为什么不使用 kvm?
所以我问:内核调试/USB驱动开发的kvm vs. vmware
各自的优缺点是什么?
linux-kernel - 在 2.4 内核的多线程应用程序中等待失败
我有一个多线程的应用程序 - 一个线程负责用 wait() 收集死去的孩子,另一个线程根据请求用 fork 生成它们。
我发现在一个具有 2.4 内核和 LinuxThread 的平台上等待总是失败并出现 ECHILD。我发现问题可能出在 2.4 内核上不符合 POSIX 标准的 LinuxThreads 实现中,以下讨论表明无法解决此问题。
我仍然想确定没有人知道任何解决方案。甚至内核的补丁也是可以接受的。
当我考虑应用程序设计时,我认为不可能在单个线程中同时执行 fork() 和 wait() (或仅通过巨大的努力)
linux - linux:“真正的”分段错误处理程序在哪里?
如果我读/写/跳转到一个未映射的地址,即。
这会导致分段错误。
我想知道,拦截对未映射地址的读/写(如何?)并抛出“用户模式”信号的系统(内核)的实际部分是什么?
linux-kernel - 为什么在中断上下文中执行的内核代码/线程不能休眠?
我正在阅读 Robert Love 的以下文章
http://www.linuxjournal.com/article/6916
说的是
“......让我们讨论一下工作队列在进程上下文中运行的事实。这与其他所有在中断上下文中运行的下半部分机制形成对比。在中断上下文中运行的代码无法休眠或阻塞,因为中断上下文没有可重新调度的后备进程。因此,由于中断处理程序与进程无关,调度程序没有任何东西可以进入睡眠状态,更重要的是,调度程序没有任何东西可以唤醒......“
我不明白。AFAIK,内核中的调度程序是 O(1),这是通过位图实现的。那么是什么阻止调度程序将中断上下文置于睡眠状态并采取下一个可调度进程并将控制权传递给它呢?
build-process - 获取 Linux Kernel make 进程以重建修改后的文件
我正在构建一个自定义 Ubuntu 内核并修改了其中一个源文件。当我发出构建命令时:
它会重建 deb,但不会重建任何修改过的源文件。
这是怎么回事?每次修改源文件时都必须进行完全干净的重建吗?
这没有任何意义。
修改的文件是./init/main.c
.
注意 binary-insp8600 是我为我的 Inspiron 8600 笔记本电脑创建的自定义风格。
build-process - 来自 Linux 内核的奇怪构建消息
在修改了一些源文件后,我试图重建我的内核,并在构建输出中注意到以下消息:
II:新模块(你一直很忙,擦掉鼻子上的便便)
那应该是什么意思?
内核中还有什么奇怪的东西在等着我?
c - __udivdi3 undefined — 如何找到使用它的代码?
在 32 位 Linux 内核上编译内核模块会导致
在 64 位系统上一切正常。据我所知,原因是 32 位 Linux 内核不支持 64 位整数除法和取模。
如何找到发出 64 位操作的代码。它们很难手动找到,因为我无法轻松检查“/”是 32 位宽还是 64 位宽。如果“正常”函数未定义,我可以对它们进行 grep,但这在这里是不可能的。还有另一种搜索参考文献的好方法吗?某种“机器代码grep”?
该模块由数千行代码组成。我真的不能手动检查每一行。