- Jan 11, 2022
-
-
Florian Schmaus authored
[UnblockOnMainActorTest] adjust workload to log level See merge request !303
-
Florian Fischer authored
The UnblockOnMainActorTest regularly timeout in our CI which looks to be a regular timeout because I could easily reproduce the timeout on fauibig03. Hopefully this change fixes regular timeouts like https://gitlab.cs.fau.de/aj46ezos/emper/-/jobs/506757 in the CI and only leaves real faulty timeouts.
-
Florian Schmaus authored
[meson] add boost as dependency See merge request !301
-
Florian Fischer authored
I setup a new development environment and emper did not compile because emper::io::Stats use the circular_buffer provided by boost. Boost was not installed and our build-system failed to detect it. This change adds the header-only boost dependency to emper. https://mesonbuild.com/Dependencies.html#boost The header-only dependency is enough to build emper default configuration. When linking against boost is required we use the 'modules' karg.
-
- Jan 10, 2022
-
-
Florian Schmaus authored
[Dispatcher] replace deprecated pthread_yield with sched_yield See merge request !302
-
Florian Fischer authored
Compilation with gcc on ubuntu 21.10 fails because pthread_yield is apparently deprecated and should be replaced with sched_yield. gcc --version gcc (Ubuntu 11.2.0-7ubuntu2) 11.2.0
-
- Dec 27, 2021
-
-
Florian Schmaus authored
properly cancel future callbacks See merge request !297
-
- Dec 25, 2021
-
-
Florian Fischer authored
* Document data races of a future's state. * Get and set a Future's state only through methods. This helps to add possibly needed atomic operations. * Use atomics to get/set cancel and prepare state in IO_SINGLE_URING vaiant * Add more IO debug messages * Use the BPS of Futures with callbacks similar to those of forgotten ones to signal their preparation. The preparation mark the last moment where the Future is used in EMPER and after that the memory can be dropped. ATTENTION: This means not that the used resources of the IO request can be dropped. The kernel may still use a supplied buffer for example. * Fix Future chain cancellation in SubmitActor
-
- Dec 24, 2021
-
-
Florian Fischer authored
Currently canceling Futures would never happen because we issued the cancel request only with the pointer of the future. This works more by coincidence than by design because the PointerTags::Future tagged onto the submitted future pointer is 0. This does not work for callbacks because they are tagged with a PointerTags != 0 and they don't use their callback pointer rather than the future pointer. Fix this by exporting the tagging from IoContext::prepareFutureChain into IoContext::createFutureTag and use this when submitting a cancel sqe. Warn the user that they have to manually take care of the memory safety of the callback because we can not await the callback in Future::cancel. Add a test case to CancelFutureTest.
-
- 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
-