1

我是该领域的新手,并且正在编写 C++/汇编代码来对时钟周期中的一段代码进行基准测试(测量执行时间)。我需要通过我的代码禁用抢占和硬中断。我知道 linux 内核开发允许使用preempt_disable();&raw_local_irq_save(flags) 函数来做同样的事情。

我的问题是我不是在编写内核模块,而是在用户空间中编写普通的 C/C++ 程序。我可以通过我的 C++ 代码(即来自用户空间/无内核模块)使用这些系统调用吗?我应该包含哪些头文件。如果是。有人可以给我阅读参考资料或例子吗?

谢谢!!

4

2 回答 2

2

您不能从用户级应用程序中执行此操作,尤其是禁用硬件中断,这为许多基本内核功能(如计时)提供了基础。

相反,您可以做的是sched_setscheduler(2)设置SCHED_FIFO实时优先级,即要求内核不要抢占您的应用程序,直到它自愿释放 CPU(通常是系统调用)。不过要小心 - 您可以通过这种方式轻松锁定系统。

于 2012-12-02T18:12:40.013 回答
1

Usually that is impossible. The kernel will not let you block interrupts.

But assigning yourself a very high prio is usally good enough. Plus, make sure the benchmarked code runs long enough, e.g. by running it 10000 times in a loop. That way, some interrupts don't matter in the overall cycle counting. In my experience a code run time of 1 second is good enough (provided your system is not under heave stress) for home-brewn benchmarking.

于 2012-12-02T18:06:35.113 回答