Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp4047190pxf; Mon, 29 Mar 2021 20:02:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx97s3S2od9G76jNRTVbnRMWZTYAocKWIS7Fh2t+fCWRPgfALeWc5aW5CAyFfmbE/2WPBtS X-Received: by 2002:a17:906:8583:: with SMTP id v3mr31876386ejx.361.1617073329151; Mon, 29 Mar 2021 20:02:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617073329; cv=none; d=google.com; s=arc-20160816; b=u116qeN531R22PFDnKKsToy5Q5yS/48ZN4h964V6sKBB6KcBiiH/qq0NWLs3x9iNpf rl87ID4w8TgJsjaOI/MYyy3PNGUjnr2Y6Dn4wG+eVomBlhV0DXD9+aNPXxpWyue8yOzr LGsoP9vZhx2XUrVSViLqavsw1s1bi4K4SI9ziLf0+kH7kBkLI+gSOzH7JSsmYPVWQ+bD 3p3p4euYKB5+yPyDvCmML/bRm3YxKTh6/AUZqjKk8gGrHvRwk8KWdlJhpGUKAtGOLrV4 efHgr1+E8fTtPAXb/g6ngZtVE6Vk/52+wb6A1dty/U0Gk+XQtBLH+4pTPk3rs3rp/28i /c9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:in-reply-to:date:subject :cc:to:from:user-agent:references:dkim-signature; bh=F1eg+XqN3U64/MzNNY6mrcxM6snLAQXok6zRnEH6i5A=; b=S93Qt6p06uVZ8CTiv1K8JD/Sh+yuxmCX1QP86LfGG+XJNyFe58deNNKKjJC4Ji0AxM I6KHjUhG8nExCKzDvcVlJ9fB/l4GDptBejS9kdyf6tGPg0EBWsgSJd9IEgzrcUTkOcFt Rq2VQwGdWYk2R/75mqEHaelaDryQdwBJ3Gk2Q9LsR2zapnunKbjxm3i/lP3KPccpHuNO Z+IwJsdpRsHMWMw5PC/v1Y/MpHWXzwH62/KczyG4ojIDCtmQcxlQkwYdRs0nr1UIp6XL Ij3WACNbTTLaXihx47/9hEHck5G+z0NzH6eJM26pKP9LySC1C6RQgL8L266fkd3Qd8hv wvlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@inbox.eu header.s=20140211 header.b=eZxWwkTm; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id eb10si13854177ejc.273.2021.03.29.20.01.45; Mon, 29 Mar 2021 20:02:09 -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=pass header.i=@inbox.eu header.s=20140211 header.b=eZxWwkTm; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229689AbhC3DAr (ORCPT + 99 others); Mon, 29 Mar 2021 23:00:47 -0400 Received: from eu-shark1.inbox.eu ([195.216.236.81]:58600 "EHLO eu-shark1.inbox.eu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229483AbhC3DAV (ORCPT ); Mon, 29 Mar 2021 23:00:21 -0400 Received: from eu-shark1.inbox.eu (localhost [127.0.0.1]) by eu-shark1-out.inbox.eu (Postfix) with ESMTP id 19AEA6C0174C; Tue, 30 Mar 2021 06:00:18 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=inbox.eu; s=20140211; t=1617073218; bh=TnXIbCBSN+HC1OG8+CsGEcBQ5zNKgqtLlrc9DB8j5FE=; h=References:From:To:Cc:Subject:Date:In-reply-to; b=eZxWwkTmjox5VLw5WSkG7U2Jje8/1SVRJh20EAoA5bF3GfD3mK8+jZ5Q3o10434mD MV7mP9yuxvPPUdYiSvjABchkZv69rVtQLzjTapnnrnaIcjJFXtHYHkBZB/BiyBF+Tb EI7RpvDFJwWOdMhk4iM3bGBs5CYNITn//6O3O4TE= Received: from localhost (localhost [127.0.0.1]) by eu-shark1-in.inbox.eu (Postfix) with ESMTP id 0AAFE6C0170A; Tue, 30 Mar 2021 06:00:18 +0300 (EEST) Received: from eu-shark1.inbox.eu ([127.0.0.1]) by localhost (eu-shark1.inbox.eu [127.0.0.1]) (spamfilter, port 35) with ESMTP id Lvnhz8UdmVtE; Tue, 30 Mar 2021 06:00:17 +0300 (EEST) Received: from mail.inbox.eu (eu-pop1 [127.0.0.1]) by eu-shark1-in.inbox.eu (Postfix) with ESMTP id 9631D6C00C15; Tue, 30 Mar 2021 06:00:17 +0300 (EEST) Received: from nas (unknown [45.87.95.48]) (Authenticated sender: l@damenly.su) by mail.inbox.eu (Postfix) with ESMTPA id 71A771BE0038; Tue, 30 Mar 2021 06:00:14 +0300 (EEST) References: <20210323081440.81343-1-ming.lei@redhat.com> <20210323081440.81343-3-ming.lei@redhat.com> User-agent: mu4e 1.5.8; emacs 27.1 From: Su Yue To: Ming Lei Cc: Jens Axboe , linux-block@vger.kernel.org, Christoph Hellwig , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] blktrace: limit allowed total trace buffer size Date: Tue, 30 Mar 2021 10:57:04 +0800 In-reply-to: <20210323081440.81343-3-ming.lei@redhat.com> Message-ID: MIME-Version: 1.0 Content-Type: text/plain; format=flowed X-Virus-Scanned: OK X-ESPOL: 6NpmlYxOGzysiV+lRWenZQszqjRBW/Ps/vm+2AEq4na6bm6YDTsAKnCr/x97SGA= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue 23 Mar 2021 at 16:14, Ming Lei wrote: > On some ARCHs, such as aarch64, page size may be 64K, meantime > there may > be lots of CPU cores. relay_open() needs to allocate pages on > each CPU > blktrace, so easily too many pages are taken by blktrace. For > example, > on one ARM64 server: 224 CPU cores, 16G RAM, blktrace finally > got > allocated 7GB in case of 'blktrace -b 8192' which is used by > device-mapper > test suite[1]. This way could cause OOM easily. > > Fix the issue by limiting max allowed pages to be 1/8 of > totalram_pages(). > > [1] https://github.com/jthornber/device-mapper-test-suite.git > > Signed-off-by: Ming Lei > --- > kernel/trace/blktrace.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c > index c221e4c3f625..8403ff19d533 100644 > --- a/kernel/trace/blktrace.c > +++ b/kernel/trace/blktrace.c > @@ -466,6 +466,35 @@ static void blk_trace_setup_lba(struct > blk_trace *bt, > } > } > > +/* limit total allocated buffer size is <= 1/8 of total pages > */ > +static void validate_and_adjust_buf(struct blk_user_trace_setup > *buts) > +{ > + unsigned buf_size = buts->buf_size; > + unsigned buf_nr = buts->buf_nr; > + unsigned long max_allowed_pages = totalram_pages() >> 3; > + unsigned long req_pages = PAGE_ALIGN(buf_size * buf_nr) >> > PAGE_SHIFT; > + > + if (req_pages * num_online_cpus() <= max_allowed_pages) > + return; > + > + req_pages = DIV_ROUND_UP(max_allowed_pages, > num_online_cpus()); > + > + if (req_pages == 0) { > + buf_size = PAGE_SIZE; > + buf_nr = 1; > + } else { > + buf_size = req_pages << PAGE_SHIFT / buf_nr; > Should it be: buf_size = (req_pages << PAGE_SHIFT) / buf_nr; ? The priority of '<<' is lower than '/', right? :) -- Su > + if (buf_size < PAGE_SIZE) > + buf_size = PAGE_SIZE; > + buf_nr = req_pages << PAGE_SHIFT / buf_size; > + if (buf_nr == 0) > + buf_nr = 1; > + } > + > + buts->buf_size = min_t(unsigned, buf_size, buts->buf_size); > + buts->buf_nr = min_t(unsigned, buf_nr, buts->buf_nr); > +} > + > /* > * Setup everything required to start tracing > */ > @@ -482,6 +511,9 @@ static int do_blk_trace_setup(struct > request_queue *q, char *name, dev_t dev, > if (!buts->buf_size || !buts->buf_nr) > return -EINVAL; > > + /* make sure not allocate too much for userspace */ > + validate_and_adjust_buf(buts); > + > strncpy(buts->name, name, BLKTRACE_BDEV_SIZE); > buts->name[BLKTRACE_BDEV_SIZE - 1] = '\0';