Received: by 2002:a25:d80d:0:0:0:0:0 with SMTP id p13csp267445ybg; Sat, 23 May 2020 13:41:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyFPeDmf/UnFpNw1XJMRaNh3MP+3AmHlWNmEPZpr3RPPnLW2h+I9gp/86hZTnLo7XL9VuFO X-Received: by 2002:a17:906:a0c2:: with SMTP id bh2mr13043627ejb.406.1590266459868; Sat, 23 May 2020 13:40:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590266459; cv=none; d=google.com; s=arc-20160816; b=Be6jn5picUciD3yy7NFwU1hWQvd0EMjyZaxnflxTX08XUJdGSChG1IMJGLA2Sy3auC SG9hp27XYmIKtNvm9x0A4n28eMnuz2IlqQVH3Xmf/UiXmDfXGOHpbwCQ/j18uIUgtQ5j yTOQ7T9Wby5To4VoQ29Ee9fLsjBeI/7bNfpFo8j9GXRh/tZirY34W9MYHOVFGW2bmCr/ d5iPYLSpLknTVFNfZ1wB7dzb8GZi5PhcnJrS8T3eQL+cEhqioeRuvLihm1INvuYAs7bh OoIDl2lba9zFP+g7GJu0C3bhivvMScbIdxo1BDNiMvWhZdiLKpjpBl3bj90vnD0Rqz0y BWNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding:mime-version :message-id:date:subject:cc:from:dkim-signature; bh=wEmUEirF5tfAd7Gq1m77iRwi3DBT03ajwm/+Kim4iFg=; b=donf0DTqcwG+9Fl8cSdp0tnryYcSxWiQyqAlXWq9h+F0zXMP/9I7Y1zx0+eziAKzK0 zjiA71OLtPKKW9O3lVLyYaT4jWNxH0r6gQUiru1CFmS4Pwfj7axCKSm2S2vDqAQiCUtt 6E+wZWL6m03ZPEVcGZer97bFZIpU9fXkfIOLi+5/ueseBzt50pt6YOMxILdRZ7iEDwbG 2kIMxZnQTBRRae0OgRH2yo22Oy9rz+WS641iOjwpEtoqzWv3siBw/ys9EY8pMTB5371R h5rKhERxBmDhr0vH4ToWb4EjE7qpYF6r64DXh7Vfj18yZ5DG9HLslF2UcwIrxt9onvWY 0ZXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=EM8o2YVy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z7si6255508edr.172.2020.05.23.13.40.21; Sat, 23 May 2020 13:40:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=EM8o2YVy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387938AbgEWUfT (ORCPT + 99 others); Sat, 23 May 2020 16:35:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387883AbgEWUfS (ORCPT ); Sat, 23 May 2020 16:35:18 -0400 Received: from mail-lf1-x143.google.com (mail-lf1-x143.google.com [IPv6:2a00:1450:4864:20::143]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4BC35C061A0E for ; Sat, 23 May 2020 13:35:18 -0700 (PDT) Received: by mail-lf1-x143.google.com with SMTP id x27so8458092lfg.9 for ; Sat, 23 May 2020 13:35:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wEmUEirF5tfAd7Gq1m77iRwi3DBT03ajwm/+Kim4iFg=; b=EM8o2YVyEwUqzdJ+R97QdRyWik29nXrHHi1lSu3IWudNr6YhRjDeYEqE1PGfsOTj2I 9j7+PO+0hkKWWaN4XLgb6UqHEVFqud2NqlkV6EnExAdOEtBjmiEv1BYrmomCptcIYKAY n8QU2rzLgSp42zNfG9cgvQ9G/TfrGAoWrEQQBXpjvIxcHcN6rMsRXCZrRGml7GnuaXq1 XjwcwxmCzzg06PPf7rV3Cw/TwvGFzhJ161B5qnm41M8RPNlnB84OUXUPBtxqI/+NgKe5 RALeoVV1qdXz8Wef9U8WMCe16bGYIg1f+rG+BNJM0eQxj8OFiL8gUjLmK8WvEwebATwr Pa8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=wEmUEirF5tfAd7Gq1m77iRwi3DBT03ajwm/+Kim4iFg=; b=HZZPjMFU905lRct+prreZv3BGijOcxZp0JH4dfDPMdQYUNcSND+jEExln/RKcnEBxA MxoqfVDSQXQFlJLIaKmurig12rrAlNMC7HgF2zdQ4uOzbvP9VHN3+7ZMoeDx2YPjI8Zv jqYfW1XYyP8cvrDrCnzaLncaXO7KjmTVOc568oLD4JvGTtd/3uEZ9DcoyVJzhelOPQI6 J8akqZUAEHnZutqtaoUFYhbjVgwum+Lm2NtawVOnFTJyF6hzOIw0f1aOcXVE+53+WK4E qrK2PtGknRzKefyPfn4zjGjikvI6AqzVLRFrqn/CS47BtTRVnpgw/l402DngFY5BNttd v1Bw== X-Gm-Message-State: AOAM531HLlWXZrrsGOWkZH2i4VoVQfm+pK8TEKAbI6pI3lBV9rVG/F4X NPIjXRIcuw9LgF1rmdc8Uuc= X-Received: by 2002:a19:c187:: with SMTP id r129mr10765647lff.35.1590266116799; Sat, 23 May 2020 13:35:16 -0700 (PDT) Received: from localhost.localdomain ([85.249.97.232]) by smtp.googlemail.com with ESMTPSA id l20sm3342354lfj.10.2020.05.23.13.35.15 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 May 2020 13:35:16 -0700 (PDT) From: Artur Barsegyan Cc: a.barsegyan96@gmail.com, skutepov@gmail.com, Andrew Morton , Lu Shuaibing , Manfred Spraul , Nathan Chancellor , linux-kernel@vger.kernel.org Subject: [PATCH] ipc/msg.c: wake up senders until there is a queue empty capacity Date: Sat, 23 May 2020 23:34:44 +0300 Message-Id: <20200523203448.84235-1-a.barsegyan96@gmail.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Take into account the total size of the already enqueued messages of previously handled senders before another one. Otherwise, we have serious degradation of receiver throughput for case with multiple senders because another sender wakes up, checks the queue capacity and falls into sleep again. Each round-trip wastes CPU time a lot and leads to perceptible throughput degradation. Source code of: - sender/receiver - benchmark script - ready graphics of before/after results is located here: https://github.com/artur-barsegyan/systemv_queue_research Signed-off-by: Artur Barsegyan --- ipc/msg.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ipc/msg.c b/ipc/msg.c index caca67368cb5..52d634b0a65a 100644 --- a/ipc/msg.c +++ b/ipc/msg.c @@ -214,6 +214,7 @@ static void ss_wakeup(struct msg_queue *msq, struct msg_sender *mss, *t; struct task_struct *stop_tsk = NULL; struct list_head *h = &msq->q_senders; + size_t msq_quota_used = 0; list_for_each_entry_safe(mss, t, h, list) { if (kill) @@ -233,7 +234,7 @@ static void ss_wakeup(struct msg_queue *msq, * move the sender to the tail on behalf of the * blocked task. */ - else if (!msg_fits_inqueue(msq, mss->msgsz)) { + else if (!msg_fits_inqueue(msq, msq_quota_used + mss->msgsz)) { if (!stop_tsk) stop_tsk = mss->tsk; @@ -241,6 +242,7 @@ static void ss_wakeup(struct msg_queue *msq, continue; } + msq_quota_used += mss->msgsz; wake_q_add(wake_q, mss->tsk); } } -- 2.19.1