- Feb 27, 2022
-
-
Florian Schmaus authored
fix lockless io-stealing See merge request !357
-
- Feb 26, 2022
-
-
Florian Fischer authored
The uninitialized continuation pointer may be returned without being written resulting in dispatching a not valid fiber pointer. If a CQE is stolen but no fiber is blocked on the corresponding future IoContext::getContinuationsFromCompletions will call future->completeAndGetContinuation which will set the future's completion but will not return a continuation. If no continuation is returned from Future::completeAndGetContinuation the continuation buffer is not advanced by IoContext::getContinuationsFromCompletions (emper/io/IoContext.hpp:259). IoContext::reapSingleCompletion does not check if a continuation was created and assumed that continuation contains a valid Fiber* if a CQE was successfully stolen. Initialize continuation with nullptr, which is a valid Fiber*.
-
Florian Fischer authored
-
Florian Schmaus authored
Minor changes of top-level files See merge request !356
-
Florian Schmaus authored
-
Florian Schmaus authored
-
Florian Schmaus authored
Extend emper::printInfo() See merge request !355
-
Florian Schmaus authored
Add more CL Queue implementations See merge request i4/manycore/emper!354
-
Florian Schmaus authored
Work-Stealing queue fill-size stats See merge request i4/manycore/emper!353
-
- Feb 25, 2022
-
-
Florian Schmaus authored
-
Florian Schmaus authored
-
Florian Schmaus authored
-
Florian Schmaus authored
The calculation was previously done using integers, this lead to MEMORY_MANAGER_VICTIM_PERCENTAGE to become 0.
-
Florian Schmaus authored
The MemoryManager uses lib::adt::wsqueue::Default as work-stealing queue implementation. The reference to WsClQueue would break if e.g., ws_queue_default=cl4, since the type would not exist.
-
- Feb 24, 2022
-
-
Florian Schmaus authored
-
Florian Schmaus authored
In case pushing to the local work-stealing queue fails because the queue is full, and that failure is not fatal as it is in Fibril, emit a warning once.
-
Florian Schmaus authored
-
Florian Schmaus authored
This result also contains the observed queue size at the moment of the push.
-
- Feb 23, 2022
-
-
Florian Fischer authored
Fix fsearch by using a sharded file buffer See merge request i4/manycore/emper!352
-
- Feb 22, 2022
-
-
Florian Schmaus authored
Also rename 'res' to 'pushed' and only notify about new work if there was work pushed.
-
Florian Schmaus authored
-
Florian Schmaus authored
-
Florian Fischer authored
Each worker thread has it own stringstream per ShardedFileBuffer. All streams are joined and flushed to the file when a ShardedFileBuffer is destructed. Flushing a ShardedFileBuffer is not thread-safe and must not be called concurrently to any modifications to the ShardedFileBuffer. Use a ShardedFileBuffer to accumulate and print all paths during fsearch.
-
- Feb 21, 2022
-
-
Florian Fischer authored
-
Florian Schmaus authored
[StealingResult] Improve docstring See merge request !349
-
Florian Fischer authored
fsearch: write only found files to stdout and use implicit file offset See merge request i4/manycore/emper!350
-
Florian Schmaus authored
-
Florian Schmaus authored
Use std::function based factory See merge request i4/manycore/emper!71
-
Florian Fischer authored
In the emper-fs-eval I would like to validate the output of the fsearch variants against a list of known files. Not writing any log messages to stdout make that easier. Use -1 as the offset of the write to stdout. Passing offset -1 means to use the file's implicit offset just like write(2). When using a tty as stdout offset 0 is fine but when redirecting stdout to a file 0 will cause that previously found paths will always be overwritten.
-
Florian Schmaus authored
-
- Feb 19, 2022
-
-
Florian Fischer authored
[LinuxVersion] Use "Construct on first use" idiom and add mutex See merge request i4/manycore/emper!348
-
Florian Schmaus authored
Use the "Construct on first use" idom for UTS Release (aka Linux version) initialization. The previous implementation was fragle and could lead to segfaults like __s2=0x7fffffffe480 "5.16.10-arch1-1", __s1=<optimized out>) at /usr/include/c++/11.2.0/bits/char_traits.h:409 __n=<optimized out>, __s=0x7fffffffe480 "5.16.10-arch1-1", __d=<optimized out>) at /usr/include/c++/11.2.0/bits/basic_string.h:359 __n=<optimized out>, __s=0x7fffffffe480 "5.16.10-arch1-1", __d=<optimized out>) at /usr/include/c++/11.2.0/bits/basic_string.h:354 __str=..., this=0x7ffff7fbd2a0 <emper::lib::LinuxVersion::globalVersion[abi:cxx11]>) at /usr/include/c++/11.2.0/bits/basic_string.h:739 at ../emper/lib/LinuxVersion.cpp:46 at /usr/include/c++/11.2.0/ext/new_allocator.h:79 if globalVersion's constructor was not yet called. This is the so called "static initialization order fiasco" in C++. While the mutex may not be strictly requires, as we do not call LinuxVersion's non-argument constructor nor getUtsRelease() concurrently, it can not hurt to have one.
-
Florian Fischer authored
do not define futex_waitv if already done in linux/futex.h See merge request !345
-
Florian Fischer authored
-
Florian Schmaus authored
Make the implementations of the work-stealing queue(s) selectable See merge request i4/manycore/emper!343
-
Florian Schmaus authored
Make subprojects See merge request !344
-
Florian Schmaus authored
-
Florian Schmaus authored
-
- Feb 18, 2022
-
-
Florian Schmaus authored
io: make max unbounded io worker configurable See merge request !340
-
Florian Fischer authored
Since Linux 5.15 io_uring can limit the number of iow threads created using IORING_REGISTER_IOWQ_MAX_WORKERS. Bump liburing wrap to version 2.1 to use io_uring_register_iowq_max_workers. Expose this via the meson variable io_unbounded_iow_max and the environment variable EMPER_IO_UNBOUNDED_IOW_MAX. See for an detailed explanation: https://blog.cloudflare.com/missing-manuals-io_uring-worker-pool
-