- Sep 24, 2021
-
-
Florian Fischer authored
Before 05dc56ed the two test cases testDiskAndNetwork, testIov where combined in one function which was terminating the runtime after the client closed its socketafter the test was done. This was already broken before 05dc56ed but after the separation of the two use cases the race between the Runtime terminating and the execution of the last parts of the test-runner's alphaFiber became bigger. When the Runtime terminates because the last worker running the testIoV code has outstanding IO the test-runner's successSem is never notified.
-
Florian Schmaus authored
disable throttle test in CI and add more debug messages. See merge request i4/manycore/emper!263
-
Florian Schmaus authored
[IoContext] replace fancy CQ locking with a mutex and CQ emptiness check See merge request i4/manycore/emper!258
-
Florian Fischer authored
-
Florian Fischer authored
Also pass getWakeupCount the CallerEnvironment because this is the place were we must change something to prevent lost wakeups when notifying from anywhere.
-
- Sep 23, 2021
-
-
Florian Schmaus authored
[WakeupStrategy] introduce a new class to model our wakeup strategies See merge request i4/manycore/emper!254
-
- Sep 22, 2021
-
-
Florian Fischer authored
-
Florian Fischer authored
The macro uses std::aligned_storage to ensure the symbol is properly cache line aligned and cache line sized. This prevents cache line sharing with another symbol. The actual symbol is initialized with the placement new operator and for now must have a constructor without arguments.
-
- 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
-
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 Fischer authored
Add new 'throttle' wakeup strategy inspired by the algorithm used by zap, go and tokio. This tries to prevent a possible thundering herd problem and reduce contention on the scheduler by only waking a single worker at a time. It further ensures that the next worker is only notified if the previous successfully found work.
-
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
-