Multithreaded latency too random.
Andrey Smagin
samspeed at mail.ru
Sun Apr 19 01:03:58 UTC 2020
I wrote simple multithreaded example :
main.cpp:
#include <thread>
#include <unistd.h>
#include <time.h>
int dTimeMax = 0;
int dTimeMin = 0x7FFFFFFF;
int Nanosec;
bool ThreadExit = false;
void Thread()
{
timespec T1,T2;
for( ; !ThreadExit ; )
{
clock_gettime( CLOCK_REALTIME_PRECISE, &T1 );
clock_gettime( CLOCK_REALTIME_PRECISE, &T2 );
Nanosec = ( T2.tv_sec - T1.tv_sec )*1000000000 + T2.tv_nsec - T1.tv_nsec ;
if ( Nanosec > dTimeMax ) dTimeMax = Nanosec;
if ( Nanosec < dTimeMin ) dTimeMin = Nanosec;
}
}
int main( int argc, char *argv[] )
{
std::thread Thr( Thread );
for( int N=0; N<100000; ++N )
printf("%d \t%d \t%d\n", dTimeMax, dTimeMin, Nanosec );
ThreadExit=true;
Thr.join();
}
On my PC
dTimeMax — dTimeMin < 8000 in console over ssh.
dTimeMax — dTimeMin < 5000 in tmpfs file output.
On my Orange-Pi Zero board it produce very random values:
dTimeMax — dTimeMin > 2 000 000 in console over ssh .
dTimeMax — dTimeMin > 15 000 in tmpfs file output.
What can help disable interrupt of thread ?
Set kern.hz=250000 not change result.
FreeBSD orangepi-zero 13.0-CURRENT FreeBSD 13.0-CURRENT #0 r359929: Thu Apr 16 06:10:42 MSK 2020 /usr/src/arm.armv7/sys/GENERIC-NODEBUG arm
to compile: c++ main.cpp -lthr
--
Andrey Smagin
More information about the freebsd-arm
mailing list