Skip to content
Snippets Groups Projects
  1. Oct 04, 2021
    • Florian Fischer's avatar
      [WakeupStrategy] fix the throttle algorithm for notifiaction from anywhere · baedc874
      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.
      baedc874
  2. Sep 27, 2021
    • Florian Fischer's avatar
      [log] improve timestamp scalability and increase LogBuffer size · 442ead84
      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.
      442ead84
  3. Sep 24, 2021
  4. Sep 21, 2021
  5. Sep 13, 2021
    • Florian Fischer's avatar
      [Debug] implement logging to a memory-mapped log file · ad10eb3a
      Florian Fischer authored
      
      When setting the environment variable EMPER_LOG_FILE=<logfile> EMPER
      will write its log messages to <logfile> instead of stderr.
      This removes the need for the mutex protecting std::cerr as well as
      multiple write calls to flush std:cerr.
      
      To efficiently write log messages to the log file the algorithm uses
      three memory 1MiB mapped views into <logfile> to store the log messages.
      One buffer is active, one is new, and one is old.
      The next buffer ensures that threads can write log messages even if the
      active buffer would overflows.
      The old buffer allows slower threads to still write safely while everyone
      else uses the active buffer.
      When a thread changes from the active buffer to the new buffer it
      is responsible to renew the current old buffer and changing the semantic
      of the buffers:
      
      * active -> old
      * next -> active
      * old -> next
      
      This buffer scheme allows wait-free logging.
      But the approach is NOT sound because delayed thread may still use the
      old buffer which gets renewed by the first thread touching the next buffer.
      But the likeliness for this situation decreases with bigger sizes of the
      buffers.
      
      ATTENTION: Using SCHED_IDLE for the completer may break this likeliness
      assumption.
      
      Add new CI test job with mmaped log files.
      
      This contains code cleanups
      Suggested-By: default avatarFlorian Schmaus <flow@cs.fau.de>
      ad10eb3a
  6. Jul 26, 2021
  7. May 28, 2021
  8. May 20, 2021
  9. May 05, 2021
  10. Apr 12, 2021
  11. Mar 22, 2021
  12. Mar 01, 2021
  13. Feb 25, 2021
  14. Feb 23, 2021
    • Florian Fischer's avatar
      [WorkerWakeupSemaphore] add three possible implementations · 3cde3e16
      Florian Fischer authored
      LockedSemaphore is the already existening Semaphore using
      a mutex and a condition variable.
      PosixMutex is a thin wrapper around a POSIX semaphore.
      SpuriousFutexSemaphore is a atomic/futex based implementation
      prune to spurious wakeups which is fine for the worker wakeup usecase.
      3cde3e16
  15. Feb 20, 2021
    • Florian Schmaus's avatar
      [Makefile] fix smoke-test/static-analysis target · 1b39754b
      Florian Schmaus authored
      This adds yet another target "smoke-test-suite", which just runs all
      tests in the 'smoke' test suite. The static-analysis target was
      changed to include *all* static analysis thingies we have, even 'doc'
      as Doxygen does also do some checks that the documentation is
      "correct".
      
      The smoke-test target is also kept, as it allows developers to simply
      run all smoke tests. Furthermore, this adds some missing PHONY
      declarations in the Makefile.
      
      The gitlab-ci now runs the smoke-test-suite and static-analysis
      targets in two different jobs. Previously the smoke-test would also
      run the static-analysis target, which was not intended.
      1b39754b
  16. Feb 02, 2021
  17. Feb 01, 2021
  18. Jan 26, 2021
  19. Jan 14, 2021
  20. Jan 13, 2021
  21. Jan 11, 2021
  22. Dec 17, 2020
  23. Dec 05, 2020
  24. Dec 02, 2020
  25. Nov 30, 2020
  26. Nov 27, 2020
  27. Nov 17, 2020
  28. Nov 10, 2020
  29. Nov 05, 2020
Loading