草庐IT

c - 如何在 Linux 内核中生成 "artificial"中断?

我在这里阅读了答案:TriggerKernelInterruptHandler:How?这是一个很好的,但不是我需要的。我正在对处理中断的RNG函数进行微基准测试,因此我需要一种人工且可重复生成中断的好方法。例如,我可以将某些内容重定向到生成300个中断或类似内容的Procfs接口(interface)。是否像在内核中运行某种生成中断的函数一样简单?是否有某种中断实际上不做“任何事情”,但仍然通过整个中断处理程序路径?我意识到我可以只键入键或类似的东西,但出于研究目的,这并不是真正可重复和编写脚本的。我正在使用x86架构。 最佳答案

c - Linux内核例程的时序测量

我向Linux内核(调度程序)添加了一些额外的代码现在我想知道这种修改的影响是什么。对于我一直使用的用户进程:clock_gettime(CLOCK_PROCESS_CPUTIME_ID,...);现在我想知道是否有一个内核等效例程我可以用来做类似的事情。非常感谢您的帮助,马丁 最佳答案 看看ftrace。Latencytop就是基于此。lwn(here、here和here)上有好文章测量调度器性能是出了名的困难,祝你好运:) 关于c-Linux内核例程的时序测量,我们在StackOve

c - Linux内核例程的时序测量

我向Linux内核(调度程序)添加了一些额外的代码现在我想知道这种修改的影响是什么。对于我一直使用的用户进程:clock_gettime(CLOCK_PROCESS_CPUTIME_ID,...);现在我想知道是否有一个内核等效例程我可以用来做类似的事情。非常感谢您的帮助,马丁 最佳答案 看看ftrace。Latencytop就是基于此。lwn(here、here和here)上有好文章测量调度器性能是出了名的困难,祝你好运:) 关于c-Linux内核例程的时序测量,我们在StackOve

linux - 关于 Linux 内核内部的问题

我在阅读“Linux设备驱动程序,第3版”时遇到了一些我不太了解的内核项目。希望本论坛的高手能帮帮我。1)Linux内核在内部使用虚拟地址还是物理地址进行操作?尤其让我感到困惑的是,有几种类型的地址(逻辑、虚拟、总线和物理),它们都是有效的并且可由内核操作。2)CPU指令不能直接寻址存储在外围设备中的数据,因此使用可寻址内存(即缓冲区)是否正确?4)当请求信号量(值为0)并且必须等待它时,进程是否可以休眠?4)原子操作——这些操作是否由特定的CPU指令保证? 最佳答案 一些特殊位(例如初始Bootstrap)在物理地址上以实模式运行

linux - 关于 Linux 内核内部的问题

我在阅读“Linux设备驱动程序,第3版”时遇到了一些我不太了解的内核项目。希望本论坛的高手能帮帮我。1)Linux内核在内部使用虚拟地址还是物理地址进行操作?尤其让我感到困惑的是,有几种类型的地址(逻辑、虚拟、总线和物理),它们都是有效的并且可由内核操作。2)CPU指令不能直接寻址存储在外围设备中的数据,因此使用可寻址内存(即缓冲区)是否正确?4)当请求信号量(值为0)并且必须等待它时,进程是否可以休眠?4)原子操作——这些操作是否由特定的CPU指令保证? 最佳答案 一些特殊位(例如初始Bootstrap)在物理地址上以实模式运行

linux - 定时器中断是否与系统处于内核模式或用户模式无关?

在Linux单处理器系统中,定时器中断是否与系统处于内核模式或用户模式无关?当系统处于内核模式时,定时器中断有什么不同的行为吗? 最佳答案 简单的回答是硬件时钟中断服务程序的执行和动态定时器处理程序的调度都不受硬件时钟中断前系统所处模式的影响。原因是时钟定时器中断是立即服务的硬件中断,无论执行是在内核还是用户上下文中(假设启用了定时器中断),以及时钟定时器中断的中断服务例程本身会引发运行动态定时器处理程序的软件中断。警告:1)我实际上并没有根据经验证明这一点。2)这不适用于无滴答内核或高分辨率定时器。Linux内核代码使用“计时器”

linux - 定时器中断是否与系统处于内核模式或用户模式无关?

在Linux单处理器系统中,定时器中断是否与系统处于内核模式或用户模式无关?当系统处于内核模式时,定时器中断有什么不同的行为吗? 最佳答案 简单的回答是硬件时钟中断服务程序的执行和动态定时器处理程序的调度都不受硬件时钟中断前系统所处模式的影响。原因是时钟定时器中断是立即服务的硬件中断,无论执行是在内核还是用户上下文中(假设启用了定时器中断),以及时钟定时器中断的中断服务例程本身会引发运行动态定时器处理程序的软件中断。警告:1)我实际上并没有根据经验证明这一点。2)这不适用于无滴答内核或高分辨率定时器。Linux内核代码使用“计时器”

Linux 内核在压力下有更好的响应时间

我有一个我无法理解的奇怪行为:出于性能测量目的,我使用“旧”并行端口接口(interface)在debian内核3.2.0-4-amd64上生成IRQ(我使用连接到ACK引脚的外部信号发生器)。我编写了自己的内核模块(仅上半部分)来处理中断并将外部信号发送回并行端口并在示波器上显示这两个信号,以便我可以测量内核响应时间。一切都按预期工作,我可以看到平均70µs的时间响应和一些20µs的“突发”。我在“Intel(R)Core(TM)i3-3240CPU@3.40GHz”上运行。现在,“无法解释”的部分。如果我使用“压力”程序加载CPU、内存和I/O,我预计平均时间会最差,但恰恰相反:我

Linux 内核在压力下有更好的响应时间

我有一个我无法理解的奇怪行为:出于性能测量目的,我使用“旧”并行端口接口(interface)在debian内核3.2.0-4-amd64上生成IRQ(我使用连接到ACK引脚的外部信号发生器)。我编写了自己的内核模块(仅上半部分)来处理中断并将外部信号发送回并行端口并在示波器上显示这两个信号,以便我可以测量内核响应时间。一切都按预期工作,我可以看到平均70µs的时间响应和一些20µs的“突发”。我在“Intel(R)Core(TM)i3-3240CPU@3.40GHz”上运行。现在,“无法解释”的部分。如果我使用“压力”程序加载CPU、内存和I/O,我预计平均时间会最差,但恰恰相反:我

linux - 如何使用 QEMU 和 KGDB 调试 Linux 内核?

我已经能够使用以下方式调用qemu(v1.7.0)来启动基于powerpc的系统(具体来说是MPC8544DS)qemu-system-ppc-Mmpc8544ds-m512-kernelzImage-s-nographic-initrdbusyboxfs.img-append"root=/dev/ramrdinit=/bin/shkgdboc=ttyS0,115200kgdbwait"其中zImage是自定义交叉编译的Linux内核(v2.6.32),它启用并编译了KGDB(用于启动代码调试),busyboxfs.img是基于busybox的根文件系统。因为我正在使用Qemu的-s标