From nobody Thu Dec 7 14:12:26 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4SmGSB5SQ0z533HY; Thu, 7 Dec 2023 14:12:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4SmGSB4zr6z3gNG; Thu, 7 Dec 2023 14:12:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701958346; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8hIvIXsbg+qhXeYq7stU24cUq4ngIqyOpDU5AtWkdzM=; b=c28O4tRYvJe+TTlTiZR6J/xmNwvTYsMFQZT6QTOZ4UpT69GtkWgMeKsyneu7wbZ1wpu7LH v+k2dpHGCQtYaSRxqmxF/oQRLCbU1u6W7jeqco+TcffhfOdZ1Mu6ykvfVdbqhzjllnvdKD fi7VY5yWxKR83Zo5gX1m2afBKF3mZykKhmf8EHoyInanNeLScKBPJ8F2lyjrrs6rIAho56 iQghcnSd6LUXKf7bjK+mewTFfUhW606BTGng5XMtxBhWNBTqgpHkOamGRlTPo5fPzG6urn Qc3EGr0dHsf7VCi9LZDaDFQYXcuh2y06bEOlRJkW/pFO1oLfj4nWrjRTgkpJCA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1701958346; a=rsa-sha256; cv=none; b=KxyJBbD8VnLxPMKJdA1n+ry1l4ll1P5DZ1Cz7KEIIKiXjeWa8tyw5kHpFjuvb2U2cRLcVM R2XyxtBdVsSSLYDv6kdCkVPdkPpuGd5QX3nIUQLDGVaZ11JpA/ucdviscVBeVz+zib78Hl bjDulEvtihth7pWyrLCWV0AbgKnvt/Pti0SsqxSbO8Ex8dIthCYOyMifGPHWfZkrsurltL /FveiNpWbFoN5oCgGd2QFHAl8Y2NluLDK0kyZdnCPlBMtB8P3cr/C2j7Q7rtXqSLLWHukq qHr2o0bKv5dfm4w0dRMUJpXQALyaP2AIXJAVRqjOJVdb4WrANQvkKD0PTXXCLA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701958346; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8hIvIXsbg+qhXeYq7stU24cUq4ngIqyOpDU5AtWkdzM=; b=rjkky19axtiz1TpDOajL+lM0hDP8UFjkZWHxFqhfMW8e7fPu1vQ8wOuoH5dFC8SX/TQV6+ G5uRYdR4EZwlcQ0lGRPunudRhXr/+Dqr4jiAnM7J7a2LnIwgw8hmXUvkQxB/9bPFvNRJIu P954M6a6S37FCIVjHfDsuBXtPEstDsj9fH0gVTLYBgiAJ74c8mpYUCykJ498hvzWpI4T5v P2QFgk7HVdbarmkFjT/vZDpmGlQZfYPcHozfZiHCjeqjvG07dvSYPuBTyiBElCZCUAQdAC Sv5z/NGbZ72h+qmCy/Yvu/w9Cdd1EmE9R0SclBobCw2HJiO733SUQEhLhFzmDg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4SmGSB42mPzgYm; Thu, 7 Dec 2023 14:12:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3B7ECQQb016172; Thu, 7 Dec 2023 14:12:26 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3B7ECQq9016169; Thu, 7 Dec 2023 14:12:26 GMT (envelope-from git) Date: Thu, 7 Dec 2023 14:12:26 GMT Message-Id: <202312071412.3B7ECQq9016169@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Richard Scheffenegger Subject: git: a95cd6e4870b - main - siftr: refactor batch log processing List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rscheff X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a95cd6e4870b79178860e03366c4327e533ecf1e Auto-Submitted: auto-generated The branch main has been updated by rscheff: URL: https://cgit.FreeBSD.org/src/commit/?id=a95cd6e4870b79178860e03366c4327e533ecf1e commit a95cd6e4870b79178860e03366c4327e533ecf1e Author: Richard Scheffenegger AuthorDate: 2023-12-07 13:43:03 +0000 Commit: Richard Scheffenegger CommitDate: 2023-12-07 13:48:44 +0000 siftr: refactor batch log processing Refactoring to perform the batch processing of log messaged in two phases. First cycling through a limited number of collected packets, and only thereafter freeing the processed packets. This prevents any chance of calling free while in a critical / spinlocked section. Reviewed By: tuexen Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D42949 --- sys/netinet/siftr.c | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/sys/netinet/siftr.c b/sys/netinet/siftr.c index 216d0fb6920e..bf0cdc2ac4cc 100644 --- a/sys/netinet/siftr.c +++ b/sys/netinet/siftr.c @@ -134,6 +134,7 @@ * data fields such that the line length could exceed the below value. */ #define MAX_LOG_MSG_LEN 300 +#define MAX_LOG_BATCH_SIZE 3 /* XXX: Make this a sysctl tunable. */ #define SIFTR_ALQ_BUFLEN (1000*MAX_LOG_MSG_LEN) @@ -445,10 +446,10 @@ siftr_pkt_manager_thread(void *arg) { STAILQ_HEAD(pkthead, pkt_node) tmp_pkt_queue = STAILQ_HEAD_INITIALIZER(tmp_pkt_queue); - struct pkt_node *pkt_node, *pkt_node_temp; + struct pkt_node *pkt_node; uint8_t draining; struct ale *log_buf; - int ret_sz, cnt; + int ret_sz, cnt = 0; char *bufp; draining = 2; @@ -485,17 +486,12 @@ siftr_pkt_manager_thread(void *arg) */ mtx_unlock(&siftr_pkt_mgr_mtx); -try_again: - pkt_node = STAILQ_FIRST(&tmp_pkt_queue); - if (pkt_node != NULL) { - if (STAILQ_NEXT(pkt_node, nodes) != NULL) { - cnt = 3; - } else { - cnt = 1; - } + while ((pkt_node = STAILQ_FIRST(&tmp_pkt_queue)) != NULL) { - log_buf = alq_getn(siftr_alq, MAX_LOG_MSG_LEN * cnt, - ALQ_WAITOK); + log_buf = alq_getn(siftr_alq, MAX_LOG_MSG_LEN * + ((STAILQ_NEXT(pkt_node, nodes) != NULL) ? + MAX_LOG_BATCH_SIZE : 1), + ALQ_WAITOK); if (log_buf != NULL) { log_buf->ae_bytesused = 0; @@ -509,27 +505,24 @@ try_again: } /* Flush all pkt_nodes to the log file. */ - STAILQ_FOREACH_SAFE(pkt_node, &tmp_pkt_queue, nodes, - pkt_node_temp) { + STAILQ_FOREACH(pkt_node, &tmp_pkt_queue, nodes) { if (log_buf != NULL) { ret_sz = siftr_process_pkt(pkt_node, bufp); bufp += ret_sz; log_buf->ae_bytesused += ret_sz; - cnt--; - } - - STAILQ_REMOVE_HEAD(&tmp_pkt_queue, nodes); - free(pkt_node, M_SIFTR_PKTNODE); - - if (cnt <= 0 && !STAILQ_EMPTY(&tmp_pkt_queue)) { - alq_post_flags(siftr_alq, log_buf, 0); - goto try_again; } + if (++cnt >= MAX_LOG_BATCH_SIZE) + break; } if (log_buf != NULL) { alq_post_flags(siftr_alq, log_buf, 0); } + for (;cnt > 0; cnt--) { + pkt_node = STAILQ_FIRST(&tmp_pkt_queue); + STAILQ_REMOVE_HEAD(&tmp_pkt_queue, nodes); + free(pkt_node, M_SIFTR_PKTNODE); + } } KASSERT(STAILQ_EMPTY(&tmp_pkt_queue),