emper merge requestshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests2021-08-19T08:56:12Zhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/235[IoContext] Add missing error handling in submitPreparedSqesAndWait()2021-08-19T08:56:12ZFlorian Schmaus[IoContext] Add missing error handling in submitPreparedSqesAndWait()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 w...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.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/234Draft: Completer strategies2021-08-25T14:13:43ZFlorian SchmausDraft: Completer strategieshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/233[IoContext] Remove duplicate CQE_BATCH_COUNT delcaration and definition2021-08-19T08:55:59ZFlorian Schmaus[IoContext] Remove duplicate CQE_BATCH_COUNT delcaration and definitionhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/232Move all definitions from emper.hpp in compilation unit2021-08-18T09:53:51ZFlorian SchmausMove all definitions from emper.hpp in compilation unithttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/231Move emper::sleep() implemention from header in compilation unit2021-08-18T09:10:39ZFlorian SchmausMove emper::sleep() implemention from header in compilation unithttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/230[IO] Implement configurable "simple architecture"2021-08-18T10:04:37ZFlorian Fischer[IO] Implement configurable "simple architecture"Introduce a new meson option io_single_uring which causes EMPER
to only use the GlobalIoContexts for all IO.
To submit SQEs to the io_uring SQ SubmitActor is used.
Futures can be in a new state where they are submitted to the SubmitAct...Introduce a new meson option io_single_uring which causes EMPER
to only use the GlobalIoContexts for all IO.
To submit SQEs to the io_uring SQ SubmitActor is used.
Futures can be in a new state where they are submitted to the SubmitActor
but not to the io_uring yet.
In this state isSubmitted && !isPrepared th Future must not be destroyed
to ensure this we yield when forgetting a Future until it is prepared
and thus it is safe to destroy it.
This commit contains no optimizations (no batching, no try non blocking
syscall first, ...)https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/229[AbstractWorkStealingScheduler] Get rid of "rand() % workerCount"2021-08-11T14:30:56ZFlorian Schmaus[AbstractWorkStealingScheduler] Get rid of "rand() % workerCount"The "rand() % workerCount" constructed used in the work-stealing
scheduler is flawed. It has a bias toward lower worker IDs due the
modulo operation. This is something I always wanted to get rid of, but
never found the time to do it. Unt...The "rand() % workerCount" constructed used in the work-stealing
scheduler is flawed. It has a bias toward lower worker IDs due the
modulo operation. This is something I always wanted to get rid of, but
never found the time to do it. Until know.
Get rid of it and replace it with
std::uniform_int_distribution<workerid_t> (as field the Worker
instance).
The changes in AbstractWorkStealingScheduler.cpp look more than they
are actually. I had to introduce a new scope since to the goto
instruction would otherwise skip the initialization of currentWorker.
The main changes in AbstractWorkStealingScheduler are
- use currentWorker->nextRandomWorkerId() (instead of the flawed construct)
- currentWorker->getWorkerId() (instead of Runtime::getWorkerId())https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/228Support distributing multiple echoclient over the network2021-08-09T16:15:11ZFlorian FischerSupport distributing multiple echoclient over the networkWe archive synchronization through an external coordinator process awaiting n
connections and a message on each connection.
After receiving all messages it sends "Go" back on each connection and terminates.
The echo clients synchronize ...We archive synchronization through an external coordinator process awaiting n
connections and a message on each connection.
After receiving all messages it sends "Go" back on each connection and terminates.
The echo clients synchronize using the coordinator after establishing all TCP
connections.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/227[IO] add FutureSelector to multiplex waiting on multiple Futures2021-09-13T13:48:39ZFlorian Fischer[IO] add FutureSelector to multiplex waiting on multiple FuturesA FutureSelector is internally implemented as a Sempahore and a
vector of monitored Futures.
All Futures monitored by the selector know the selector
and signal its semaphore on completion.
When the FutureSelector's Semaphore is released ...A FutureSelector is internally implemented as a Sempahore and a
vector of monitored Futures.
All Futures monitored by the selector know the selector
and signal its semaphore on completion.
When the FutureSelector's Semaphore is released the select
unblocks and searches for the first ready Future in its list.
NOTE: The FutureSelector is except its Semaphore not thread-safe
and must not be used in parallel.
This means no Futures can be retrieved from or passed to other Fibers
which would possibly result in parallel modification of the selector
during Future destruction.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/226[io.hpp] add blocking functions using timeouts2021-08-02T14:52:13ZFlorian Fischer[io.hpp] add blocking functions using timeoutshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/225[echoclient] print a short description of parameters2021-07-29T11:59:25ZFlorian Fischer[echoclient] print a short description of parametershttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/224[stats] blocked contexts2021-08-10T10:42:18ZFlorian Schmaus[stats] blocked contextshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/223[stats] Add max-queue-length stats to AbstractWorkStealingScheduler2021-08-02T13:01:40ZFlorian Schmaus[stats] Add max-queue-length stats to AbstractWorkStealingSchedulerhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/222[fsearch] gracefully terminate the runtime to print the collected stats2021-07-26T14:25:07ZFlorian Fischer[fsearch] gracefully terminate the runtime to print the collected statshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/221[meson] allow building EMPER on systems whithout <filesystem>2021-08-02T19:38:53ZFlorian Fischer[meson] allow building EMPER on systems whithout <filesystem>Check if `std::filesystem::recursive_directory_iterator` and `std::filesystem::path`
are available before using those in EMPER code.
Allow `meson.build` files in `emper/` subdirectories to add configuration options
by consuming the `con...Check if `std::filesystem::recursive_directory_iterator` and `std::filesystem::path`
are available before using those in EMPER code.
Allow `meson.build` files in `emper/` subdirectories to add configuration options
by consuming the `conf_data` object after all subdirectories were visited.
Introduce a quasi naming standard for cpp feature flags in meson code:
`cpp_has_<namespace>_<feature>`
Examples:
`cpp_has_fs_path`https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/220[PipeSleepStrategy] use C++ smart ptrs instead of manual memory management2021-07-26T12:18:48ZFlorian Fischer[PipeSleepStrategy] use C++ smart ptrs instead of manual memory managementThe destructor of PipeSleepStrategy caused segmentation faults when
running optimized. Because the stats pointer is not initialized it was
possibly to pass a garbage pointer to delete. Now we use a well defined
C++ smart pointer which fi...The destructor of PipeSleepStrategy caused segmentation faults when
running optimized. Because the stats pointer is not initialized it was
possibly to pass a garbage pointer to delete. Now we use a well defined
C++ smart pointer which fixes the problem and is more idiomatic anyway.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/219Add docker tooling2021-07-27T09:02:22ZFlorian FischerAdd docker toolingUsage run "docker.sh <your command>" to execute <your command> in the
docker image extracted from .gitlab-ci.yml in the emper root directory
Example: `docker.sh make test`Usage run "docker.sh <your command>" to execute <your command> in the
docker image extracted from .gitlab-ci.yml in the emper root directory
Example: `docker.sh make test`https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/218[IoContext] wrap CQ locking in if constexpr2021-07-26T09:05:10ZFlorian Fischer[IoContext] wrap CQ locking in if constexprWe don't need to pay the overhead of the atomic operations on each
dispatch loop if there is no concurrent access to worker CQs.We don't need to pay the overhead of the atomic operations on each
dispatch loop if there is no concurrent access to worker CQs.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/217Further improve fsearch2021-07-23T08:39:31ZFlorian FischerFurther improve fsearch1. Use emper::io to write results to stdout
2. Iterate the file tree in parallel1. Use emper::io to write results to stdout
2. Iterate the file tree in parallelhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/216[Debug] prefix log messages from the I/O completer thread with "IOC"2021-07-21T12:08:53ZFlorian Fischer[Debug] prefix log messages from the I/O completer thread with "IOC"