有没有人用gettimeofday时遇到问题的?
本来用gettimeofday函数测其他函数的运行时间。(Linux下)
但在反复多次测试过程中,总有偶尔产生偏差极大的结果
比如95%的时间都是8ms,结果偶尔蹦出来100ms,200ms,甚至1s的。。。
开始怀疑是待测函数有问题,就又分段测,看那段拖延了时间
结果发现各个段几乎都有一定概率突然变慢。。。
后来干脆把gettimeofday函数拿来测,发现99%的时间都是1us,其他有10us 20us 50us以及最大一次1000+ us
难道是系统进程调用占去了这些时间?
No.1 code used 96761 us <===
No.2-1 code used 9 us
No.2-1 code used 4251 us
No.2-1 code used 4090 us
No.2-1 code used 10766 us
No.2-2 code used 3821 us
No.3-1 code used 260 us
No.3-2 code used 52 us
used 120905 us this time
No.1 code used 133 us
No.2-1 code used 6 us
No.2-1 code used 23898 us
No.2-1 code used 3972 us
No.2-1 code used 3723 us
No.2-2 code used 3890 us
No.3-1 code used 66188 us <===
No.3-2 code used 245 us
used 102321 us this time
No.1 code used 97 us
No.2-1 code used 4 us
No.2-1 code used 73485 us <===
No.2-1 code used 3666 us
No.2-1 code used 3647 us
No.2-2 code used 3885 us
No.3-1 code used 538 us
No.3-2 code used 61 us
used 162639 us this time
No.1 code used 97 us
No.2-1 code used 4 us
No.2-1 code used 4027 us
No.2-1 code used 3764 us
No.2-1 code used 3529 us
No.2-2 code used 125457 us <===
No.3-1 code used 613 us
No.3-2 code used 294 us
used 138559 us this time
No.1 code used 102 us
No.2-1 code used 5 us
No.2-1 code used 18824 us
No.2-1 code used 3459 us
No.2-1 code used 12950 us
No.2-2 code used 3720 us
No.3-1 code used 1017431 us <===
No.3-2 code used 367 us
used 1057245 us this time
No.1 code used 386 us
No.2-1 code used 8 us
No.2-1 code used 4183 us
No.2-1 code used 4026 us
No.2-1 code used 3956 us
No.2-2 code used 3785 us
No.3-1 code used 263 us
No.3-2 code used 53 us
used 245389 us this time <=== 时间哪去了?
测试的语句都是挨着写的,一条时间结束立即printf结果接着马上开始下一个计时开始,有时候就会像最后一个这种,总时间跟各个分项时间加和不等!!
(总时间是这样计算的:
gettimeofday(&tstart,NULL);
store();
gettimeofday(&tend,NULL);
然后做差打印,应该没有问题啊)
[解决办法]
进程调度,有很多的随机性.
------解决方案--------------------
强制CPU只运行这个程序不行的
但是你同样也可以提高优先级
man 2 nice
[解决办法]
不是实时操作系统,定时是不会准的.