Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

next/199/20231121/v1 #9859

Merged
merged 4 commits into from
Nov 22, 2023
Merged

Commits on Nov 21, 2023

  1. Configuration menu
    Copy the full SHA
    193e0ea View commit details
    Browse the repository at this point in the history
  2. calloc: Use nmemb with SCCalloc

    This commit modifies calls to SCCalloc that had a member count of 1 and
    a size count calculated as: element_count * sizeof(element).
    jlucovsky committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    ec1482c View commit details
    Browse the repository at this point in the history
  3. packetpool: dynamic return threshold

    Problem:
    
    In pcap autofp mode, there is one threads reading packets (RX). These packets
    are then passed on to worker threads. When these workers are done with a
    packet, they return packets to the pcap reader threads packet pool, which is
    the owner of the packets. Since this requires expensive synchronization between
    threads, there is logic in place to batch this operation.
    
    When the reader thread depletes its pool, it notifies the other threads that
    it is starving and that a sync needs to happen asap. Then the reader enters
    a wait state. During this time no new packets are read.
    
    However, there is a problem with this approach. When the reader encountered
    an empty pool, it would set an atomic flag that it needed a sync. The first
    worker to return a packet to the pool would then set this flag, sync, and
    unset the flag. This forced sync could result in just a single packet being
    synchronized, or several. So if unlucky, the reader would just get a single
    packet before hitting the same condition again.
    
    Solution:
    
    This patch updates the logic to use a new approach. Instead of using a
    binary flag approach where the behavior only changes when the reader is
    already starved, it uses a dynamic sync threshold that is controlled by
    the reader. The reader keeps a running count of packets it its pool,
    and calculates the percentage of available packets. This percentage is
    then used to set the sync threshold.
    
    When the pool is starved, it sets the threshold to 1 (sync for each packet).
    After each successful get/sync the threshold is adjusted.
    victorjulien committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    edc89ce View commit details
    Browse the repository at this point in the history
  4. packetpool: signal condition within lock

    Completes: dc40a13 ("packetpool: signal waiter within lock")
    victorjulien committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    41c0526 View commit details
    Browse the repository at this point in the history