Skip to content
Snippets Groups Projects
  1. Dec 06, 2021
  2. Dec 03, 2021
  3. Dec 02, 2021
  4. Nov 29, 2021
  5. Nov 24, 2021
  6. Nov 23, 2021
    • Florian Fischer's avatar
      127f6296
    • Florian Fischer's avatar
      add concurrent BPS test · 65a593bc
      Florian Fischer authored
      The test introduces multiple cycles of Semaphores and
      a Fiber for each semaphore blocking and signaling the next.
      Through work-stealing the fibers from a cycle should be spread
      across different workers and thus test concurrent use of
      BinaryPrivateSemaphores.
      
      Cycle of length 3: Sem A -> Sem B -> Sem C -> Sem A -> ...
      Algorithm:
      	if isFirstInCycle
      		signal next
      
      	wait
      
      	if not isFirstInCycle
      		signal next
      65a593bc
  7. Nov 15, 2021
    • Florian Schmaus's avatar
      Merge branch 'fix_pipe_sleep_notifyFromAnywhere' into 'master' · cc63bd70
      Florian Schmaus authored
      [PipeSleepStrategy] fix notifyFromAnywhere
      
      See merge request !277
      cc63bd70
    • Florian Fischer's avatar
      [PipeSleepStrategy] fix notifyFromAnywhere · d31442ad
      Florian Fischer authored
      Don't decrease the sleeper count in the CAS loop further than
      -count, which is the threshold we need to ensure that the notification
      will be observed.
      Decreasing it further than our threshold is not faulty it just results
      in unnecessary skipped sleeps.
      
      Don't call writeNotifications with a negative count.
      Which will be interpreted as an unsigned value and thus results
      in writing way to much hints to the pipe, jamming it.
      If the original value before a successfully CAS is already negative
      we called writeNotifications with this negative value.
      This is fixed by using max(toWakeup, 0).
      d31442ad
  8. Nov 11, 2021
  9. Nov 10, 2021
  10. Oct 29, 2021
  11. Oct 28, 2021
  12. Oct 13, 2021
  13. Oct 12, 2021
  14. Oct 11, 2021
    • Florian Fischer's avatar
      [IoContext] document and fix possible scenario resulting in lost wakeup · 1e647338
      Florian Fischer authored
      This is fixed by using a normal lock instead of the try lock in the OWNER
      case.
      1e647338
    • Florian Fischer's avatar
      [IoContext] implement lockless CQ reaping · d9d350d9
      Florian Fischer authored
      TODO: think about stats and possible ring buffer pointers overflow and ABA.
      d9d350d9
    • Florian Fischer's avatar
      implement IO stealing · 0abc29ad
      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.
      0abc29ad
    • Florian Fischer's avatar
      [CallerEnvironment] Add a new OWNER caller environment · 69e73b98
      Florian Fischer authored
      The OWNER caller environment can be used when the executed algorithm
      should be different if the current worker owns the objects it touches.
      For example a worker reaping completions on a foreign IoContext may
      use the EMPER callerEnvironment and the worker of the IoContext OWNER.
      
      Also implement the stream operator to print caller environments.
      69e73b98
    • Florian Schmaus's avatar
      Merge branch 'write-stats-to-file' into 'master' · e677b305
      Florian Schmaus authored
      print runtime stats to the environment variable EMPER_STATS_FILE
      
      See merge request !269
      e677b305
    • Florian Fischer's avatar
      print runtime stats to the environment variable EMPER_STATS_FILE · a757eb0e
      Florian Fischer authored
      * Make all stats print methods accept a std::ostream as output.
      * Move the printing of runtime component stats into Runtime::printStats.
      * Use Runtime::printStats instead of Runtime::printLastRuntimeStats in
        ~Runtime, because we are already in a runtime which may differ from
        Runtime::currentRuntime.
      * Write the stats in ~Runtime to a possible file passed in the
        environment variable EMPER_STATS_FILE
      a757eb0e
    • Florian Schmaus's avatar
      Merge branch 'remove-useless-private-stats-members' into 'master' · 8160f360
      Florian Schmaus authored
      [sleep_strategy/Stats] remove old obsolete stats member
      
      See merge request !270
      8160f360
    • Florian Schmaus's avatar
      Merge branch 'fix-cache-line-exclusive-macro' into 'master' · 8c6aceca
      Florian Schmaus authored
      [Common.hpp] fix CACHE_LINE_EXCLUSIVE macro
      
      See merge request !268
      8c6aceca
Loading