emper merge requestshttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests2020-09-10T11:55:49Zhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/3Use meson configuration2020-09-10T11:55:49ZFlorian FischerUse meson configurationThis commit populates the conf_data with the options from `meson_options.txt` and includes the corresponding config header wherever the config defines are usedThis commit populates the conf_data with the options from `meson_options.txt` and includes the corresponding config header wherever the config defines are usedhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/4WIP: Add Burak's async I/O library as standalone commit2020-10-14T13:20:54ZFlorian FischerWIP: Add Burak's async I/O library as standalone commithttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/5make log() thread-safe by dropping the log level map2020-11-16T10:07:33ZFlorian Fischermake log() thread-safe by dropping the log level mapConcurrently using the `std::map LOG_CONFIG` can result in a segmentation fault.
To prevent concurrent access to LOG_CONFIG a new constexpr getLevelFor
is introduces analogue to getTagFor.Concurrently using the `std::map LOG_CONFIG` can result in a segmentation fault.
To prevent concurrent access to LOG_CONFIG a new constexpr getLevelFor
is introduces analogue to getTagFor.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/30[gitlab-ci] Update flowdalic/debian-dev container image to 1.142020-11-30T09:22:35ZFlorian Schmaus[gitlab-ci] Update flowdalic/debian-dev container image to 1.14https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/46[SimpleActorTest] s/memory_order_acquire/acquire/2020-12-09T18:29:45ZFlorian Schmaus[SimpleActorTest] s/memory_order_acquire/acquire/https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/56Add meson option for scheduling strategy and according CI jobs2020-12-17T18:45:08ZFlorian FischerAdd meson option for scheduling strategy and according CI jobsSupersedes !53.Supersedes !53.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/6WIP: IO support using io_uring2021-01-03T20:48:02ZFlorian FischerWIP: IO support using io_uringAdd AsyncLibrary providing IO operations which avoid the thread-blocking anomaly using the linux io_uring API.
This MR makes !4 obsolete.
Fixes #2.
TODO:
- [x] Use a dedicated thread instead of the main thread maybe?
- [x] Overhaul Sim...Add AsyncLibrary providing IO operations which avoid the thread-blocking anomaly using the linux io_uring API.
This MR makes !4 obsolete.
Fixes #2.
TODO:
- [x] Use a dedicated thread instead of the main thread maybe?
- [x] Overhaul SimpleDiskAndNetworkTest
- [x] Find and fix the memory leak
- [x] be competetive with burak's epoll implementation. Use !54 for a high performance IO implementation
- [x] Make API really asynchronous and return a future
- [x] Handle IO requests issued after IO subsystem is terminated
- [x] figure out how to gracefully shutdown
- [x] Don't unblock fibers on partial IO completion (what IO functions are feasable, `recv(..., MSG_WAITALL)`)
- [x] Document exported functions
- [x] ~~introduce timeouts to prevent denial-of-service by opening more connections than there are entries in the io_uring~~ This is nonsense and not how io_uring works.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/86[IoContext] Add castIfIoFuture() helper function2021-02-05T20:14:19ZFlorian Schmaus[IoContext] Add castIfIoFuture() helper functionhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/98Wakeup worker per eventfd2021-02-19T16:19:12ZFlorian FischerWakeup worker per eventfdhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/97Wakeup worker per signal2021-02-22T17:33:44ZFlorian FischerWakeup worker per signalhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/100[LockedUnboundedQueue] use a std::shared_mutex instead of std::mutex2021-02-27T15:11:16ZFlorian Fischer[LockedUnboundedQueue] use a std::shared_mutex instead of std::mutexThis allows multiple readers to peek and bail out without taking
an exclusive lock.This allows multiple readers to peek and bail out without taking
an exclusive lock.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/101Synchronize LockedUnboundedQueue with pthread_rwlock2021-02-27T15:11:18ZFlorian FischerSynchronize LockedUnboundedQueue with pthread_rwlockhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/102Synchronize LockedUnboundedQueue with a boost::shared_mutex2021-02-27T15:11:20ZFlorian FischerSynchronize LockedUnboundedQueue with a boost::shared_mutexhttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/123[io] make the lock implementation protecting a IoContext's cq configurable2021-03-09T13:01:11ZFlorian Fischer[io] make the lock implementation protecting a IoContext's cq configurableoptions:
* spin_lock - naive CAS spin lock
* mutex - std::mutex
* counting_try_lock (default) - our own lightweight special
purpose synchronization primitiveoptions:
* spin_lock - naive CAS spin lock
* mutex - std::mutex
* counting_try_lock (default) - our own lightweight special
purpose synchronization primitivehttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/119Change automatic log levels to Warning if release, and Info otherwise2021-03-16T13:03:55ZFlorian SchmausChange automatic log levels to Warning if release, and Info otherwisehttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/166Draft: [EchoClient] retry echos when the connection was reset2021-04-14T13:29:20ZFlorian FischerDraft: [EchoClient] retry echos when the connection was resethttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/186Tweak scheduling so the IO completer can use the laws priorityQueues2021-05-04T11:16:08ZFlorian FischerTweak scheduling so the IO completer can use the laws priorityQueues1. Switch from the STL iterator based to a C-style array batched schedule interface
`template<class Iterator> schedule(Iterator begin, Iterator finish) -> schedule(Fiber** fibers, unsigned count)`
2. Schedule Fibers from anywhere w...1. Switch from the STL iterator based to a C-style array batched schedule interface
`template<class Iterator> schedule(Iterator begin, Iterator finish) -> schedule(Fiber** fibers, unsigned count)`
2. Schedule Fibers from anywhere with set affinity to the AnywhereQueue and the hinted priorityQueue
3. Introduce worker hints to the scheduleFromAnywhere functions to allow the completer to hint the origin IoContext
I want this to experiment with the IO completer and laws. To see if scheduling completions
reaped by the completer also to the worker priorityQueue is beneficial.
Maybe the benefit of faster dispatch from priorityQueue vs AnywhereQueue is worth the laws overhead
especially in scenarios where the completer reaps a significant chunk of all completions (20 Worker eval).https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/164Draft: add new WakeupSemaphore flavor using the worker's IoContext2021-07-27T11:49:02ZFlorian FischerDraft: add new WakeupSemaphore flavor using the worker's IoContexthttps://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/259[test-runner] gracefully terminate the runtime2021-09-23T16:11:36ZFlorian Fischer[test-runner] gracefully terminate the runtimeThe `successSem` was a hack used to ensure tests succeed even if the
runtime does not terminate. But our runtime now poperly terminates
and thus the `successSem` can be replaces with a `Runtime::initiateTermination`
and `Runtime::waitUnt...The `successSem` was a hack used to ensure tests succeed even if the
runtime does not terminate. But our runtime now poperly terminates
and thus the `successSem` can be replaces with a `Runtime::initiateTermination`
and `Runtime::waitUntilFinished` pair.
This seams more correct, fixes that the `SimpleDiskAndNetwork` test hangs
on its `successSem` in release builds and makes `RuntimeDestroyTest` obsolete.
Fixes #25. Even if I don't know why #25 happens.https://gitlab.cs.fau.de/i4/manycore/emper/-/merge_requests/283[io/Stats] only record steal attempts if stats are enabled2021-12-05T12:49:01ZFlorian Fischer[io/Stats] only record steal attempts if stats are enabled