- Nov 15, 2024
-
-
Florian Schmaus authored
-
- Mar 26, 2024
-
-
Florian Schmaus authored
-
Florian Schmaus authored
-
- Dec 16, 2022
-
-
Florian Schmaus authored
-
- Nov 23, 2022
-
-
Florian Schmaus authored
-
- Sep 16, 2022
-
-
Florian Schmaus authored
-
- Jul 19, 2022
-
-
Florian Schmaus authored
-
- Jun 09, 2022
-
-
Florian Schmaus authored
-
- May 30, 2022
-
-
Florian Schmaus authored
-
- Apr 10, 2022
-
-
Florian Fischer authored
-
- Mar 24, 2022
-
-
Florian Schmaus authored
-
- Feb 28, 2022
-
-
Florian Schmaus authored
This further split up the stats machinery into smaller parts.
-
- Feb 26, 2022
-
-
Florian Fischer authored
-
- Feb 24, 2022
-
-
Florian Schmaus authored
-
- Feb 18, 2022
-
-
Florian Schmaus authored
This required to break an include cycle between Fibril and LockedQueue.
-
- Feb 11, 2022
-
-
Florian Schmaus authored
-
- Feb 07, 2022
-
-
Florian Schmaus authored
Thanks to Nicolas Pfeiffer for writing the initial prototypical implementation of continuation stealing and the cactus stack mechanism, on which this is based. Co-authored-by:
Nicolas Pfeiffer <pfeiffer@cs.fau.de>
-
- Jan 27, 2022
-
-
Florian Schmaus authored
-
Florian Schmaus authored
-
- Jan 22, 2022
-
-
Florian Fischer authored
-
- Jan 21, 2022
-
-
Florian Fischer authored
-
Florian Fischer authored
The SpuriousFutex2Semaphore is able to notify a specific worker by using two futexes two wait on. One working like a normal semaphore used for global non specific notifications via notify() and notify_many(). And a second one per worker which is based on a SleeperState. To notify a specific worker we change its SleeperState to Notified and call FUTEX_WAKE if needed.
-
- Jan 15, 2022
-
-
Florian Schmaus authored
-
- Dec 14, 2021
-
-
Florian Fischer authored
-
- Dec 13, 2021
-
-
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.
-
- Dec 10, 2021
-
-
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 08, 2021
-
-
Florian Schmaus authored
-
- Dec 06, 2021
-
-
Florian Schmaus authored
-
- Oct 28, 2021
-
-
Florian Schmaus authored
-
- Oct 13, 2021
-
-
Florian Fischer authored
The lockless algorithm can now be configured by setting -Dio_lockless_cq=true and the used memory ordering by setting -Dio_lockless_memory_order={weak,strong}. io_lockless_memory_order=weak: read with acquire write with release io_lockless_memory_order=strong: read with seq_cst write with seq_cst
-
- Oct 11, 2021
-
-
Florian Fischer authored
TODO: think about stats and possible ring buffer pointers overflow and ABA.
-
Florian Fischer authored
IO stealing is analog to work-stealing and means that worker thread without work will try to steal IO completions (CQEs) from other worker's IoContexts. The work stealing algorithm is modified to check a victims CQ after findig their work queue empty. This approach in combination with future additions (global notifications on IO completions, and lock free CQE consumption) are a realistic candidate to replace the completer thread without loosing its benefits. To allow IO stealing the CQ must be synchronized which is already the case with the IoContext::cq_lock. Currently stealing workers always try to pop a single CQE (this could be configurable). Steal attempts are recorded in the IoContext's Stats object and successfully stolen IO continuations in the AbstractWorkStealingWorkerStats. I moved the code transforming CQEs into continuation Fibers from reapCompletions into a seperate function to make the rather complicated function more readable and thus easier to understand. Remove the default CallerEnvironment template arguments to make the code more explicit and prevent easy errors (not propagating the caller environment or forgetting the function takes a caller environment). io::Stats now need to use atomics because multiple thread may increment them in parallel from EMPER and the OWNER. And since using std::atomic<T*> in std::map is not easily possible we use the compiler __atomic_* builtins. Add, adjust and fix some comments.
-
- Oct 04, 2021
-
-
Florian Fischer authored
The throttle algorithm had the same problem like our sleep algorithms where notifications from anywhere may race with a worker going to sleep resulting in lost wakeups. In the sleep strategy we prevent those races by preventing sleep attempts when notifing from anywhere. The throttle algorithm also does now exactly this. A notifier from anywhere will now always set the WakeupStrategy state to notified. If the state was previously pending this new approach does not differ from the previous behavior and a sleeping worker will be notified. If the state was waking the waking worker skips its sleep if it observes the WakeupStrategy state as notified.
-
- Sep 27, 2021
-
-
Florian Fischer authored
std::localtime takes a global lock and is therefore not scalable and inapplicable for analyzing timing sensible bugs. Introduce a new option to add UTC timestamps. This allows on my system to double the CPU load while using mmapped logging. Also increase the LogBuffer size from 1MB to 1GB because I had some crashes where a renewed buffer was still used.
-
- Sep 24, 2021
-
-
Florian Fischer authored
-
- Sep 21, 2021
-
-
Florian Fischer authored
-
Florian Fischer authored
* single io_uring * pipe sleep strategy * pipe sleep strategy without completer
-
Florian Fischer authored
-
Florian Fischer authored
-