ioctl和执行时间
我有一个运行两个线程的程序——它们使用消息队列进行通信 在一个线程中,我调用ioctl()来访问硬件解密程序。代码如下所示:ioctl和执行时间,c,linux,multithreading,embedded,linux-kernel,C,Linux,Multithreading,Embedded,Linux Kernel,我有一个运行两个线程的程序——它们使用消息队列进行通信 在一个线程中,我调用ioctl()来访问硬件解密程序。代码如下所示: void Decrypt { ... .. ... if(<condition 1>) {. ... ... retVal = ioctl(...); comesInHere1++; } if(<condition 2>) { ... ... retVal = ioctl(...); comesInHere2++; } void解密 { .
void Decrypt
{
...
..
...
if(<condition 1>)
{.
...
...
retVal = ioctl(...);
comesInHere1++;
}
if(<condition 2>)
{
...
...
retVal = ioctl(...);
comesInHere2++;
}
void解密
{
...
..
...
if()
{.
...
...
retVal=ioctl(…);
comesInHere1++;
}
if()
{
...
...
retVal=ioctl(…);
comesInHere2++;
}
comesInHere1和comesInHere2用于计算它在特定if循环中经过的次数
整个程序需要80毫秒来执行。但是如果我注释掉测试变量(在if循环中comesInHere1,comesInHere2),执行时间将增加8毫秒到88毫秒
这怎么可能?我现在不能注释掉变量,因为它会增加所需的时间,也不能保留它们-将在代码审阅中被杀死:)
请让我知道
感谢缓存?通过添加更多的数据,您可能会将代码移动到不同的缓存线,这些缓存线以某种方式放置在一起,从而导致抖动。您可以在不同的系统上运行,并在每个线程中专门使用的变量之间添加填充数据
如果将处理序列化到单个内核上会发生什么情况?您执行了多少次测试运行?这可能是一个观察错误。如果不是,您必须查看编译器生成的汇编代码以找出错误所在。在任何情况下,这里不需要后增量,请使用前增量以避免复制。我大约运行了20次mes确保观察结果是正确的。是否“延迟”在执行额外一行代码的过程中添加了一些帮助ioctl调用的代码?听起来不太符合逻辑…但计时测量令人费解。顺便说一句,我使用硬件注册表读取调用来计算时间。我尝试将变量设置为易失性-仍然没有Luckar您使用优化编译了吗?我想您没有…打开它并再次测量。我尝试了氧气和臭氧-没有运气,需要更多时间