Very slow SYS_io_destroy()

From: Alex Richman
Date: Fri Jul 20 2018 - 16:09:48 EST


Hi,

I'm seeing some weirdness with AIO, specifically SYS_io_destroy() is taking upwards of ~100000 microseconds (~100 miliseconds) per call.
How long is that call expected to take? I can see from the source that it's waiting e.g. for requests to finish but at the time of my call all requests are already finished (and SYS_io_getevent()'d)...

Here's some logs for example (<annotations for clarity>):
1532115053.520016 > hook_1(1073741824, 94766015790162, 14, 100, 139919450371008, 15) -> 0x7ffe9e505770
<3 IOCBs prepared, CMD_PWRITEV IOVs, 1 IOV per write, 14 bytes per write>
1532115053.520035 = {prep(0 - fd: 4, o: 0, b: 0x7ffe9e504658, n: 1, p: 0, fl: 0)}
1532115053.520037 = {prep(1 - fd: 5, o: 0, b: 0x7ffe9e504658, n: 1, p: 0, fl: 0)}
1532115053.520038 = {prep(2 - fd: 6, o: 0, b: 0x7ffe9e504658, n: 1, p: 0, fl: 0)}
<IOCBs submitted>
1532115053.520415 = {submit(-1978707968, 3) -> 3}
<io_events retreived>
1532115053.520417 = {done(0 - r: 14)}
1532115053.520418 = {done(1 - r: 14)}
1532115053.520419 = {done(2 - r: 14)}
1532115053.520420 = {complete(3) -> 14}
<io_cxt destroyed>
1532115053.639594 = {destroy(-1978707968) -> 0}
1532115053.639601 = (0x7ffe9e505770 = 0)

Between the complete(3) line and destroy(-etc) line only SYS_io_destroy() is being called. It's the only possible source of that lost ~100 miliseconds...

Any ideas?

Many thanks,
- Alex.

--
Alex Richman
alex.r@xxxxxxxxxxxx
Engineering
Tel:+44 (0)118 455 5000
www.gblabs.com