[Bug 1988151] New: Review Request: atomic-queue - C++ lockless queue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



https://bugzilla.redhat.com/show_bug.cgi?id=1988151

            Bug ID: 1988151
           Summary: Review Request: atomic-queue - C++ lockless queue
           Product: Fedora
           Version: rawhide
          Hardware: All
                OS: Linux
            Status: NEW
         Component: Package Review
          Severity: medium
          Priority: medium
          Assignee: nobody@xxxxxxxxxxxxxxxxx
          Reporter: code@xxxxxxxxxxxxxxxxxx
        QA Contact: extras-qa@xxxxxxxxxxxxxxxxx
                CC: package-review@xxxxxxxxxxxxxxxxxxxxxxx
  Target Milestone: ---
    Classification: Fedora



Spec URL: https://music.fedorapeople.org/atomic-queue.spec
SRPM URL:
https://music.fedorapeople.org/atomic-queue-0-0.1.20210729git8fec762.fc34.src.rpm
Description:

C++14 multiple-producer-multiple-consumer lockless queues based on circular
buffer with std::atomic.

The main design principle these queues follow is minimalism: the bare minimum
of atomic operations, fixed size buffer, value semantics.

These qualities are also limitations:

  • The maximum queue size must be set at compile time or construction time.
    The circular buffer side-steps the memory reclamation problem inherent in
    linked-list based queues for the price of fixed buffer size. See Effective
    memory reclamation for lock-free data structures in C++ for more details.
    Fixed buffer size may not be that much of a limitation, since once the
    queue gets larger than the maximum expected size that indicates a problem
    that elements aren’t processed fast enough, and if the queue keeps growing
    it may eventually consume all available memory which may affect the entire
    system, rather than the problematic process only. The only apparent
    inconvenience is that one has to do an upfront back-of-the-envelope
    calculation on what would be the largest expected/acceptable queue size.
  • There are no OS-blocking push/pop functions. This queue is designed for
    ultra-low-latency scenarios and using an OS blocking primitive would be
    sacrificing push-to-pop latency. For lowest possible latency one cannot
    afford blocking in the OS kernel because the wake-up latency of a blocked
    thread is about 1-3 microseconds, whereas this queue’s round-trip time can
    be as low as 150 nanoseconds.

Ultra-low-latency applications need just that and nothing more. The minimalism
pays off, see the throughput and latency benchmarks.

Available containers are:

  • AtomicQueue - a fixed size ring-buffer for atomic elements.
  • OptimistAtomicQueue - a faster fixed size ring-buffer for atomic elements
    which busy-waits when empty or full.
  • AtomicQueue2 - a fixed size ring-buffer for non-atomic elements.
  • OptimistAtomicQueue2 - a faster fixed size ring-buffer for non-atomic
    elements which busy-waits when empty or full.

These containers have corresponding AtomicQueueB, OptimistAtomicQueueB,
AtomicQueueB2, OptimistAtomicQueueB2 versions where the buffer size is
specified as an argument to the constructor.

Totally ordered mode is supported. In this mode consumers receive messages in
the same FIFO order the messages were posted. This mode is supported for push
and pop functions, but for not the try_ versions. On Intel x86 the totally
ordered mode has 0 cost, as of 2019.

Single-producer-single-consumer mode is supported. In this mode, no
read-modify-write instructions are necessary, only the atomic loads and stores.
That improves queue throughput significantly.

Fedora Account System Username: music

Koji builds:

F35: https://koji.fedoraproject.org/koji/taskinfo?taskID=72932278
F34: https://koji.fedoraproject.org/koji/taskinfo?taskID=72932294
F33: https://koji.fedoraproject.org/koji/taskinfo?taskID=72932296

I am aware of
https://docs.fedoraproject.org/en-US/packaging-guidelines/#_architecture_build_failures
and will file bugs blocking PPCTracker and F-ExcludeArch-s390x after import.


-- 
You are receiving this mail because:
You are on the CC list for the bug.
You are always notified about changes to this product and component
_______________________________________________
package-review mailing list -- package-review@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to package-review-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/package-review@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure




[Index of Archives]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite Conditions]     [KDE Users]

  Powered by Linux