Hi Simon,
OK, I have some strace results! Please see the attached archive and pasted excerpts below!
The
commands used to generate the traces are in the shell script in the
archive. I did this with 0 universes configured in OLA. The archive
contains traces for running at different intervals, numbers of universes
(1, 2, 24, 240), oscillating vs. fixed data, and both APIs.
Here is one frame from the streaming client with 24 universes (strace_ola_throughput_multi_u24_s20000.txt):
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=0, tv_nsec=20000000}, NULL) = 0
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\207\3\32\rStreamDmxData\"\207\4\10\1\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\210\3\32\rStreamDmxData\"\207\4\10\2\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\211\3\32\rStreamDmxData\"\207\4\10\3\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\212\3\32\rStreamDmxData\"\207\4\10\4\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\213\3\32\rStreamDmxData\"\207\4\10\5\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\214\3\32\rStreamDmxData\"\207\4\10\6\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\215\3\32\rStreamDmxData\"\207\4\10\7\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\216\3\32\rStreamDmxData\"\207\4\10\10\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\217\3\32\rStreamDmxData\"\207\4\10\t\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\220\3\32\rStreamDmxData\"\207\4\10\n\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\221\3\32\rStreamDmxData\"\207\4\10\v\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\222\3\32\rStreamDmxData\"\207\4\10\f\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\223\3\32\rStreamDmxData\"\207\4\10\r\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\224\3\32\rStreamDmxData\"\207\4\10\16\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\225\3\32\rStreamDmxData\"\207\4\10\17\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\226\3\32\rStreamDmxData\"\207\4\10\20\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\227\3\32\rStreamDmxData\"\207\4\10\21\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\230\3\32\rStreamDmxData\"\207\4\10\22\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\231\3\32\rStreamDmxData\"\207\4\10\23\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\232\3\32\rStreamDmxData\"\207\4\10\24\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\233\3\32\rStreamDmxData\"\207\4\10\25\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\234\3\32\rStreamDmxData\"\207\4\10\26\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
epoll_wait(7, [], 10, 1) = 0
sendto(6, "\36\2\0\20\10\n\20\235\3\32\rStreamDmxData\"\207\4\10\27\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
write(1, "frame time: 0040 ms\n", 20) = 20
And for comparison this is the same configuration but with the advanced client (strace_ola_throughput_multi_u24_s20000_a.txt):
epoll_wait(3, [], 10, 15) = 0
sendto(6, "\36\2\0\20\10\n\20\204\5\32\rStreamDmxData\"\207\4\10\1\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\205\5\32\rStreamDmxData\"\207\4\10\2\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\206\5\32\rStreamDmxData\"\207\4\10\3\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\207\5\32\rStreamDmxData\"\207\4\10\4\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\210\5\32\rStreamDmxData\"\207\4\10\5\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\211\5\32\rStreamDmxData\"\207\4\10\6\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\212\5\32\rStreamDmxData\"\207\4\10\7\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\213\5\32\rStreamDmxData\"\207\4\10\10\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\214\5\32\rStreamDmxData\"\207\4\10\t\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\215\5\32\rStreamDmxData\"\207\4\10\n\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\216\5\32\rStreamDmxData\"\207\4\10\v\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\217\5\32\rStreamDmxData\"\207\4\10\f\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\220\5\32\rStreamDmxData\"\207\4\10\r\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\221\5\32\rStreamDmxData\"\207\4\10\16\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\222\5\32\rStreamDmxData\"\207\4\10\17\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\223\5\32\rStreamDmxData\"\207\4\10\20\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\224\5\32\rStreamDmxData\"\207\4\10\21\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\225\5\32\rStreamDmxData\"\207\4\10\22\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\226\5\32\rStreamDmxData\"\207\4\10\23\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\227\5\32\rStreamDmxData\"\207\4\10\24\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\230\5\32\rStreamDmxData\"\207\4\10\25\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\231\5\32\rStreamDmxData\"\207\4\10\26\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
sendto(6, "\36\2\0\20\10\n\20\232\5\32\rStreamDmxData\"\207\4\10\27\22\200\4"..., 546, MSG_NOSIGNAL, NULL, 0) = 546
write(1, "frame time: 0004 ms\n", 20) = 20
The example and OLA were built from
DaAwesomeP/ola branch
DaAwesomeP-StreamingClientThroughput commit
2140930. The only change in this branch is to add the additional multi throughput example. I built with:
autoreconf -i && ./configure --disable-python-libs --disable-doxygen-doc && make -j4 and ran OLA with LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/vm/GitHub/ola-multi3/olad/.libs/ ./olad/olad -c ~/ola -d /home/vm/GitHub/ola-multi3/olad/www -p 9090.
Best,
Perry