Signal delivery time
Steve Grubb
sgrubb at redhat.com
Tue Feb 9 20:31:46 CET 2021
Hello,
There is something that I am puzzling over. I am measuring the time from when
a signal arrives until it gets delivered to the handler function using
ltrace.
1612897982.841251 --- SIGUSR2 (User defined signal 2) ---
1612897982.841384 __errno_location()
= 0x7fdd1c4be808
1612897982.842219 write(11, "\001", 8)
= 8
1612897982.843213 <... epoll_wait resumed> )
= 0xffffffff
1612897982.843330 __errno_location()
= 0x7fdd1c4be808
1612897982.844055 clock_gettime(1, 0x7ffe4d6fb370, 0, 0x7fdd1c9f3e9e)
= 0
1612897982.844738 gettimeofday(0x7ffe4d6fb370, nil)
= 0
1612897982.845328 clock_gettime(1, 0x7ffe4d6fb370, 0, 0)
= 0
1612897982.845954 epoll_wait(6, 0x5577def2a7c0, 64, 0xe95f)
= 1
1612897982.846651 clock_gettime(1, 0x7ffe4d6fb370, 0xffffffff, 16)
= 0
1612897982.846991 __errno_location()
= 0x7fdd1c4be808
1612897982.847174 read(11, "\001", 8)
= 8
1612897982.847397 audit_request_signal_info(3, 0x7ffe4d6fb250, 1024,
0x7ffe4d6fb250) = 5
If my math is correct, this is taking about 6.1 milliseconds to deliver. What
I'm puzzling over is why there are so many calls to gettimeofday &
clock_gettime? I do not use any timeouts or periodic timers. So, I'm
wondering why a program that has no cares about what time it is winds up
making so many calls about the current time? It would appear that around 2
milliseconds of the time is spent in those syscalls. (This is libev 4.31.)
Also, is there a faster way to get signal delivery? I'm using the
ev_default_loop and only passing EVFLAG_NOENV. Any advice/insights would be
greatly appreciated.
Best Regards,
-Steve
More information about the libev
mailing list