- Dec 22, 2021
-
-
Florian Schmaus authored
[Common] introduce a CACHE_LINE_SIZE define See merge request !299
-
Florian Schmaus authored
[SpuriousFutexSemaphore] futex are 32 bits on all platforms See merge request !300
-
Florian Fischer authored
-
Florian Fischer authored
This define will be used in future patches.
-
Florian Fischer authored
Make Scheduler within Runtime public API See merge request !298
-
Florian Schmaus authored
-
Florian Schmaus authored
The Runtime class was never a good place for inRuntime(): due its central role in EMPER's architecture, it causes easily include cycles. Furthermore, the API was not ideal, once we would move Runtime into emper::, it would become emper::Runtime::inRuntime(). We declare emper::Emper::inRuntime and emper::Emper::assertInRuntime() as static struct functions to avoid multiple definitions, and then use a constexpr function "alias" to have those functions available in the emper:: namespace.
-
- Dec 17, 2021
-
-
Florian Schmaus authored
[IO] overhaul SQPOLL support See merge request !210
-
Florian Schmaus authored
[CI] print the number of available CPUs See merge request !290
-
Florian Schmaus authored
[qsort] fix implicit widening clang-tidy error See merge request !292
-
Florian Schmaus authored
[ConcurrentNetworkEchoTest] add optional computation per echo See merge request !293
-
- Dec 16, 2021
-
-
Florian Fischer authored
This makes the test closer to our echoserver.
-
- Dec 14, 2021
-
-
Florian Fischer authored
-
Florian Fischer authored
-
Florian Fischer authored
Two meson options control the io_uring sqpoll feature: * io_uring_sqpoll - enable sq polling * io_uring_shared_poller - share the polling thread between all io_urings Since 5.12 the IORING_SETUP_ATTACH_WQ only causes sharing of poller threads not the work queues. See: https://github.com/axboe/liburing/issues/349 When using SQPOLL the userspace has no good way to know how many sqes the kernel has consumed therefore we wait for available sqes using io_uring_sqring_wait if there was no usable sqe. Remove the GlobalIoContext::registerLock and register all worker io_uring eventfd reads at the beginning of the completer function. Also register all the worker io_uring eventfds since they never change and it hopefully reduces overhead in the global io_uring.
-
Florian Fischer authored
-
- Dec 13, 2021
-
-
Florian Fischer authored
fix {RwLocked,SharedMutex}UnboundedQueues See merge request !291
-
Florian Fischer authored
A "fast check" consists of our smoke tests and the fast static analysis this ensures that the emper variants even build successfully and are not totally broken.
-
Florian Fischer authored
-
Florian Fischer authored
Previous RwLockUnboundedQueue versions did not drop their rw lock before trying to grab the wr lock which may result in a deadlock. Also wrap the noisy POSIX functions names in cleaner helper functions.
-
- Dec 10, 2021
-
-
Florian Schmaus authored
Introduce waitfree work/io-stealing See merge request !289
-
Florian Fischer authored
-
Florian Fischer authored
Waitfree IO-stealing can be enabled with the meson option -Dio_waitfree_stealing.
-
Florian Fischer authored
-
Florian Fischer authored
Waitfree work stealing is configured with the meson option 'waitfree_work_stealing'. The retry logic is intentionally left in the Queues and not lifted to the scheduler to reuse the load of an unsuccessful CAS. Consider the following pseudo code examples: steal() -> bool: steal() -> res load load loop: if empty return EMPTY if empty return EMPTY cas cas return cas ? STOLEN : LOST_RACE if not WAITFREE and not cas: goto loop outer(): return cas ? STOLEN : LOST_RACE loop: res = steal() outer(): if not WAITFREE and res == LOST_RACE: steal() goto loop In the right example the value loaded by a possible unsuccessful CAS can not be reused. And a loop of unsuccessful CAS' will result in double loads. The retries are configurable through a template variable maxRetries. * maxRetries < 0: indefinitely retries * maxRetries >= 0: maxRetries
-
- Dec 09, 2021
-
-
Florian Fischer authored
-
Florian Schmaus authored
Multiple changes to improve IO stealing See merge request !288
-
- Dec 08, 2021
-
-
Florian Fischer authored
This has the benefit of adequat sized intermediate arrays reducing the needed stack size.
-
Florian Schmaus authored
[gitlab-ci] Cache subprojects/packagecache See merge request !287
-
Florian Fischer authored
-
Florian Fischer authored
-
Florian Fischer authored
This removes the rather expensive (reported by perf) initialization of the std::arrays.
-
Florian Fischer authored
To distinguish the outcomes of the waitfree reap attempt a new enum StealingResult::{Empty, LostRace, Stolen} is introduced.
-
Florian Schmaus authored
Fix includes (as reported by IWYU 0.17) and update CI container image See merge request !285
-
Florian Schmaus authored
-
- Dec 06, 2021
-
-
Florian Schmaus authored
[meson] set check_anywhere_queue_while_steal automatic See merge request !286
-
Florian Fischer authored
We introduced the check_anywhere_queue_while_steal configuration as an optimization to get the IO completions reaped by the completer faster into the normal WSQ. But now the emper has configurations where we don't use a completer thus making this optimization useless or rather harmful. By default automatically decide the value of check_anywhere_queue_while_stealing based on the value of io_completer_behavior.
-
Florian Schmaus authored
[io/Stats] do not record steal attempts See merge request !284
-
Florian Schmaus authored
-
Florian Schmaus authored
-