- Sep 23, 2021
-
-
Florian Fischer authored
The successSem was a hack used to ensure tests succeed even if the runtime does not terminate. But our runtime now properly terminates and thus the successSem can be replaces with a Runtime::initiateTermination and Runtime::waitUntilFinished pair. This seams more correct, fixes that the SimpleDiskAndNetwork test hangs on its successSem in release builds and makes RuntimeDestroyTest obsolete.
-
- Sep 21, 2021
-
-
Florian Schmaus authored
[CI] enable IO in the now buster based CI See merge request i4/manycore/emper!256
-
Florian Schmaus authored
[tools/prepare-build-dir] fail if unknown meson option is set See merge request i4/manycore/emper!257
-
Florian Fischer authored
-
Florian Fischer authored
* single io_uring * pipe sleep strategy * pipe sleep strategy without completer
-
Florian Fischer authored
-
Florian Fischer authored
* Use more emper io functions * Split the separate test cases into two functions * Use C++ arrays where sensible
-
Florian Fischer authored
-
Florian Fischer authored
-
Florian Fischer authored
-
- Sep 20, 2021
-
-
Florian Schmaus authored
Fix repeated ConcurrentNetworkEchoTest and SimpleNetworkTest See merge request i4/manycore/emper!255
-
Florian Schmaus authored
introduce generic thread_local sleep strategy stats See merge request i4/manycore/emper!243
-
- Sep 16, 2021
-
-
Florian Fischer authored
The tests may fail when repeated because the listener may bind to fast to the tcp tuple again. This is fixed by using SO_REUSEPORT instead of SO_REUSEADDR. TIL: SO_REUSEADDR is about address wildcards and SO_REUSEPORT allows binding to the same tcp tuple. https://stackoverflow.com/questions/14388706/how-do-so-reuseaddr-and-so-reuseport-differ Add a generic way to specify socket options when creating a listen socket with tcp_listener.
-
- Sep 15, 2021
-
-
Florian Schmaus authored
[apps/qsort] implement quicksort benchmark used by kprotty See merge request i4/manycore/emper!253
-
Florian Schmaus authored
[lib/LinuxVersion] multiple fixes See merge request i4/manycore/emper!252
-
- Sep 14, 2021
-
-
Florian Fischer authored
-
Florian Fischer authored
* remove fancy but broken static LinuxVersion object. This means each usage of a EMPER_LINUX_* macro results in a syscall. But I think this is worth it when the result is a sound program. Users of those macros should store the result of the comparison anyway. * fix that we skipped parsing the last part of a version string * add a test for LinuxVersion * IO_MUST_INVALIDATE_BROKEN_CHAIN can still be const
-
Florian Schmaus authored
Deprecate IoContext submit broken chain logic See merge request i4/manycore/emper!248
-
Florian Schmaus authored
[apps/Coordinator] return SUCCESS when exiting successful not FAILURE See merge request i4/manycore/emper!250
-
- Sep 13, 2021
-
-
Florian Fischer authored
-
Florian Schmaus authored
[io/tests] use our own ASSERT macro unaffected by NDEBUG Closes #11 See merge request i4/manycore/emper!251
-
Florian Fischer authored
This allows use to remove the current hack that the test are always build without NDEBUG regardless of the meson buildtype. Which is fact fixes the failing io tests in release builds. Because Future.hpp and Future.cpp see the same version of NDEBUG.
-
Florian Fischer authored
-
Florian Fischer authored
-
Florian Schmaus authored
[Debug] implement logging to a memory-mapped log file See merge request i4/manycore/emper!244
-
Florian Fischer authored
-
Florian Fischer authored
When setting the environment variable EMPER_LOG_FILE=<logfile> EMPER will write its log messages to <logfile> instead of stderr. This removes the need for the mutex protecting std::cerr as well as multiple write calls to flush std:cerr. To efficiently write log messages to the log file the algorithm uses three memory 1MiB mapped views into <logfile> to store the log messages. One buffer is active, one is new, and one is old. The next buffer ensures that threads can write log messages even if the active buffer would overflows. The old buffer allows slower threads to still write safely while everyone else uses the active buffer. When a thread changes from the active buffer to the new buffer it is responsible to renew the current old buffer and changing the semantic of the buffers: * active -> old * next -> active * old -> next This buffer scheme allows wait-free logging. But the approach is NOT sound because delayed thread may still use the old buffer which gets renewed by the first thread touching the next buffer. But the likeliness for this situation decreases with bigger sizes of the buffers. ATTENTION: Using SCHED_IDLE for the completer may break this likeliness assumption. Add new CI test job with mmaped log files. This contains code cleanups Suggested-By:
Florian Schmaus <flow@cs.fau.de>
-
Florian Schmaus authored
[PipeSleepStrategy] prevent the still present race to cqes with the completer See merge request i4/manycore/emper!249
-
Florian Fischer authored
The previous race which I tried but in fact can not be fixed alone with waitInflight flag is now described in the code comment in PipeSleepStrategy::sleep(). To completely prevent the completer and the worker racing to the new work notifications cqes we repurpose the cq_lock to ensure the completer is always observing and honoring the waitInflight flag. Also add an onNewWorkNotification callback to keep most sleep related code and logic in PipeSleepStrategy.
-
- Sep 07, 2021
-
-
Florian Schmaus authored
[Make] use tidy make target instead of the meson generated clang-tidy target See merge request i4/manycore/emper!247
-
Florian Schmaus authored
[meson/liburing] switch to the official liburing wrap from meson wrapdb See merge request i4/manycore/emper!246
-
Florian Schmaus authored
[IoContext] die when the completer threads reaps new work notifications See merge request i4/manycore/emper!245
-
- Aug 27, 2021
-
-
Florian Fischer authored
The meson generated clang-tidy target uses compile_commands including all code from subprojects and therefore fails due to code not in our control. The gitlab CI also uses the tidy make target.
-
Florian Fischer authored
-
- Aug 26, 2021
-
-
Florian Fischer authored
The PipeSleepStrategy uses the invariant that the completer thread is not reaping IoContext of workers which have a read of the sleep/notification pipe in flight. This means that it can not reap CQEs resulting from such reads. To esnure this invariant we DIE if the completer encounters completions for such notifications.
-
- Aug 24, 2021
-
-
Florian Schmaus authored
[Debug] fix nanos in log timestamp See merge request i4/manycore/emper!242
-
Florian Fischer authored
The timestamp consists of <hour><minutes>.<nanos> but the calculation of the nanos in the current minute was broken. A minute are 60 * 10^9 nanoseconds and not 10^9.
-
- Aug 23, 2021
-
-
Florian Schmaus authored
[liburing] bump the used wrap See merge request i4/manycore/emper!241
-
Florian Fischer authored
Now EMPER builds using the liburing wrap succeed because they no longer include liburing/src which contains a custom syscall header.
-
- Aug 20, 2021
-
-
Florian Schmaus authored
[Makefile] Make static-analysis depend on iwyu See merge request i4/manycore/emper!240
-