- Sep 14, 2021
-
-
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 !248
-
Florian Schmaus authored
[apps/Coordinator] return SUCCESS when exiting successful not FAILURE See merge request !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 !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 !244
-
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 !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 !247
-
Florian Schmaus authored
[meson/liburing] switch to the official liburing wrap from meson wrapdb See merge request !246
-
Florian Schmaus authored
[IoContext] die when the completer threads reaps new work notifications See merge request !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 !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 !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 !240
-
Florian Schmaus authored
[build] Emit a message if liburing subproject is used See merge request !239
-
Florian Schmaus authored
The ninja 'iwyu' target does not depend nor generates compile_commands_wo_subprojects/compile_commands.json. Hence iwyu would fail if the database is not yet generated or run with an outdated compile_commands.json. Instead of iwyu being added to STATIC_ANALYSIS_NINJA_TARGETS, we now have the static-analysis make target depend on iwyu. This ensures that compile_commands_wo_subprojects/compile_commands.json is generated or updated (if required) before iwyu is run.p
-
- Aug 19, 2021
-
-
Florian Schmaus authored
-
Florian Schmaus authored
[IO] add shutdown(3) support See merge request !190
-
Florian Fischer authored
-
Florian Schmaus authored
Consume liburing as meson wrap if native is not recent enough See merge request !238
-
Florian Schmaus authored
[Future] Also log 'res' in LOGD of setCompletion(int32_t res) See merge request !237
-
Florian Schmaus authored
[GlobalIoContext] Add CompleterSchedParam option See merge request !236
-
Florian Fischer authored
Generate a new compile_commands database in compile_commands_wo_subprojects/ without the files in subprojects/. This new compile_commands database is than consumed by iwyu and clang-tidy. Co-Authored-By:
Florian Schmaus <schmaus@cs.fau.de> Suggested--By:
Florian Schmaus <schmaus@cs.fau.de>
-
Florian Fischer authored
-
Florian Fischer authored
-
Florian Schmaus authored
It can't hurt to provide more information in log messages, especially 'res' is a good candidate in this case.
-
Florian Schmaus authored
[IoContext] Add missing error handling in submitPreparedSqesAndWait() See merge request !235
-
Florian Schmaus authored
[IoContext] Remove duplicate CQE_BATCH_COUNT delcaration and definition See merge request !233
-
Florian Schmaus authored
This adds an option to make the scheduling parameters of the completer thread configurable via a meson option.
-
- Aug 18, 2021
-
-
Florian Schmaus authored
Within the do { reapAndScheduleCompletions() } while (io_uring_submit() == -EBUSY) loop, the return value of io_uring_submit could be a negative value other than EBUSY. In that case, we did not DIE. Looking at the SubmitActor, where we have a very similar loop, the error handling is correct. This changes the error handling in IoContext to match the one of SubmitActor, even though it has a little bit more overhead.
-
Florian Schmaus authored
-