我是这个领域的新手&我正在编写一个C ++ /汇编代码,用于在时钟周期中对代码的一部分进行基准测试(测量执行时间)。我需要通过我的代码禁用抢占和硬中断。我知道linux内核开发允许使用 preempt_disable(); & raw_local_irq_save(flags)用于执行相同的操作。
我的问题是我不是在编写内核模块,而是在用户空间编写普通的C / C ++程序。我可以通过我的C ++代码使用这些系统调用(即来自用户空间/没有内核模块吗?)我应该包含哪些头文件。如是。有人可以给我阅读参考或例子吗?
谢谢!
答案 0 :(得分:2)
您无法从用户态应用程序执行此操作,尤其是禁用硬件中断,这为许多基本内核功能(如计时)提供了基础。
你可以做的是使用sched_setscheduler(2)
来设置SCHED_FIFO
实时优先级,即要求内核在自愿释放CPU(通常是系统)之前不要抢占你的应用程序呼叫)。但请注意 - 您可以通过这种方式轻松锁定系统。
答案 1 :(得分:1)
通常这是不可能的。内核不会让你阻止中断。
但为自己指定一个非常高的prio通常是足够好的。另外,请确保基准测试代码运行时间足够长,例如通过循环运行10000次。这样,一些中断在整个循环计数中无关紧要。根据我的经验,1秒的代码运行时间足够好(假设您的系统没有受到重压),用于家庭酿造基准测试。