emper merge requestshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests2021-02-23T14:40:03Zhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/106[Runtime] Fix skipWakeupThreshold value2021-02-23T14:40:03ZFlorian Schmaus[Runtime] Fix skipWakeupThreshold valueAdjust to sem_getvalue() being allowed to return 0 if there are
waiting workers.Adjust to sem_getvalue() being allowed to return 0 if there are
waiting workers.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/105Fix build for systems with incomplete C++ standard library2021-02-22T17:31:08ZFlorian FischerFix build for systems with incomplete C++ standard libraryhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/104[Makefile] fix smoke-test/static-analysis target2021-02-20T14:10:44ZFlorian Schmaus[Makefile] fix smoke-test/static-analysis targetThis adds yet another target "smoke-test-suite", which just runs all
tests in the 'smoke' test suite. The static-analysis target was
changed to include *all* static analysis thingies we have, even 'doc'
as Doxygen does also do some check...This adds yet another target "smoke-test-suite", which just runs all
tests in the 'smoke' test suite. The static-analysis target was
changed to include *all* static analysis thingies we have, even 'doc'
as Doxygen does also do some checks that the documentation is
"correct".
The smoke-test target is also kept, as it allows developers to simply
run all smoke tests. Furthermore, this adds some missing PHONY
declarations in the Makefile.
The gitlab-ci now runs the smoke-test-suite and static-analysis
targets in two different jobs. Previously the smoke-test would also
run the static-analysis target, which was not intended.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/103Fix Actor::waitUntilIdle2021-02-20T14:21:29ZFlorian FischerFix Actor::waitUntilIdle`Actor::waitUntilIdle` is not sound because currently it busy loops may causing starvation of the Actor it is waiting for.
If emper is compiled with IO we use an `AlarmFuture` to wait for a second freeing the
worker and then check again...`Actor::waitUntilIdle` is not sound because currently it busy loops may causing starvation of the Actor it is waiting for.
If emper is compiled with IO we use an `AlarmFuture` to wait for a second freeing the
worker and then check again.
Otherwise we still busy loop but use the new `emper::yieldToAnywhere` to free the current worker.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/99[Runtime] use a semaphore to suspend/wakeup workers2021-02-22T18:03:34ZFlorian Fischer[Runtime] use a semaphore to suspend/wakeup workershttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/96[meson] fix version header custom target for meson >= 0.572021-02-18T17:08:09ZFlorian Fischer[meson] fix version header custom target for meson >= 0.57Apparently custom_target no longer supports the `@CURRENT_SOURCE_DIR@`
and `@SOURCE_DIR@` substitutions.
We now locate the script using `find_program()`.
Since `meson.project_source_dir()` is not available in older meson version
there ...Apparently custom_target no longer supports the `@CURRENT_SOURCE_DIR@`
and `@SOURCE_DIR@` substitutions.
We now locate the script using `find_program()`.
Since `meson.project_source_dir()` is not available in older meson version
there is a version check.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/95[IO] replace the std::mutex.try_lock with our own std::atomic based implement...2021-02-17T11:27:38ZFlorian Fischer[IO] replace the std::mutex.try_lock with our own std::atomic based implementationstd::mutex uses pthread_mutex which does a lot of stuff we don't need.
This change makes no gigantic difference but I is measureable therefore I think it is worth it.
Some test results from our echo server bennchamr big03->big02 [try_lo...std::mutex uses pthread_mutex which does a lot of stuff we don't need.
This change makes no gigantic difference but I is measureable therefore I think it is worth it.
Some test results from our echo server bennchamr big03->big02 [try_lock.pdf](/uploads/5612f6b0898de37788d3cc6b3f6e4a50/try_lock.pdf)https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/94[IO] add option to use a common async backend for all io_urings2021-02-10T12:24:53ZFlorian Fischer[IO] add option to use a common async backend for all io_uringsSharing a common async backend may reduce the overhead needed in the kernel but may introduce contention.
My previous investigation showed that the influence of a shared async backend is negligible but I am willing to give it a second try.Sharing a common async backend may reduce the overhead needed in the kernel but may introduce contention.
My previous investigation showed that the influence of a shared async backend is negligible but I am willing to give it a second try.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/93[EchoServerCallback] report error value passed to callback not errno2021-02-08T11:55:24ZFlorian Fischer[EchoServerCallback] report error value passed to callback not errnohttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/92[IO/Stats] make sure only Future's with a buffer have a completion expectation2021-02-07T18:20:36ZFlorian Fischer[IO/Stats] make sure only Future's with a buffer have a completion expectationCurrently future.len if set is used as completion expectation.
This does not make any sense for Futures using the len field for different
values than a buffer length.
For example the OpenatFuture uses future.len for the flags passed to o...Currently future.len if set is used as completion expectation.
This does not make any sense for Futures using the len field for different
values than a buffer length.
For example the OpenatFuture uses future.len for the flags passed to openat.
Those flags should not be interpreted as an expectation about the completion
value (a file descriptor).https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/91[IO] add FutureError and throw it when wait is called on a Future with callback2021-02-07T18:12:37ZFlorian Fischer[IO] add FutureError and throw it when wait is called on a Future with callbackThe wait() call on a Future with callback currently will never return
therefore calling wait() is disallowed.The wait() call on a Future with callback currently will never return
therefore calling wait() is disallowed.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/90[IO] add output file support to echoclient2021-02-07T18:11:07ZFlorian Fischer[IO] add output file support to echoclientThis is useful for my evaluation. Because with an output file I
just have to check if it exists to see if an echoclient execution was
successful.This is useful for my evaluation. Because with an output file I
just have to check if it exists to see if an echoclient execution was
successful.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/89Improved dying2021-02-06T11:57:26ZFlorian FischerImproved dying* Write death message to stderr
* Add stream formatting support to `DIE_MSG` and `DIE_MSG_ERRNO`* Write death message to stderr
* Add stream formatting support to `DIE_MSG` and `DIE_MSG_ERRNO`https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/88[test] use gtest meson wrap if gtest is not found2021-02-05T17:38:38ZFlorian Fischer[test] use gtest meson wrap if gtest is not foundThe gtest wrap can be updated with the meson wrap commandThe gtest wrap can be updated with the meson wrap commandhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/87[IO] add callback support2021-02-05T20:13:49ZFlorian Fischer[IO] add callback supportFutures can have a registered Callback of type
std::function<void(const uint32_t&)> which gets called in a new
Fiber with the result of the IO Request.
Note the first completion will cause the execution of a callback and
partial completi...Futures can have a registered Callback of type
std::function<void(const uint32_t&)> which gets called in a new
Fiber with the result of the IO Request.
Note the first completion will cause the execution of a callback and
partial completion support must be implemented manually in the callback.
Callbacks are stored in a heap allocated std::function on registration
and are freed by the new Fiber after the callback returned;
The Future with a registered Callback is not referenced in any way in
the IO subsystem and therefore can be dropped after being submitted.
This also means that a Future with a registered callback will not be
signaled by the IO subsystem on completion.
If signaling is desired one must implement it manually in the registered
callback.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/85[tests] Run tests in parallel if io_uring is disabled2021-02-05T12:50:08ZFlorian Schmaus[tests] Run tests in parallel if io_uring is disabledhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/84Towards fixing modernize-avoid-c-arrays, add template_util::getSize()2021-02-05T16:03:44ZFlorian SchmausTowards fixing modernize-avoid-c-arrays, add template_util::getSize()https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/83[IO] fail hard if the globalCompleter would drop a Future2021-02-03T18:40:38ZFlorian Fischer[IO] fail hard if the globalCompleter would drop a FutureCurrently the globalCompleter would drop Futures which he is
not able to submit to its SQ because io_uring_submit returned -EBUSY,
signalizing a full CQ.
Additional small code changes:
* don't wrap assert in if constexpr(DEBUG)
* annota...Currently the globalCompleter would drop Futures which he is
not able to submit to its SQ because io_uring_submit returned -EBUSY,
signalizing a full CQ.
Additional small code changes:
* don't wrap assert in if constexpr(DEBUG)
* annotate Future completion in globalCompleter as unlikely
* use prepared Future count as unsigned
* remove redundant parenthesis
* introduce helper function for IoCOntext* tagging
For now we fail hard if this hopefully unlikely case occurs.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/82Improve networking code2021-02-03T18:38:39ZFlorian FischerImprove networking code* Use getaddrinfo everywhere to get the sockaddr as well as the socktype instead of always creating a IPv4 socket
* Implement backlog awareness in echoclient
* Don't exit the echoserver when a connection is dropped* Use getaddrinfo everywhere to get the sockaddr as well as the socktype instead of always creating a IPv4 socket
* Implement backlog awareness in echoclient
* Don't exit the echoserver when a connection is droppedhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/81[Makefile][CI] Add static-analysis Make target, and gitlab-ci stage2021-02-02T12:41:51ZFlorian Schmaus[Makefile][CI] Add static-analysis Make target, and gitlab-ci stageThe 'static-analysis' Make target runs all static analysis we
currently have. This allows to run at least static analysis, in cases
where we are able build a particular EMPER configuration, but no able
to execute it (e.g. because the ker...The 'static-analysis' Make target runs all static analysis we
currently have. This allows to run at least static analysis, in cases
where we are able build a particular EMPER configuration, but no able
to execute it (e.g. because the kernel lacks io_uring support).