From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85232C47422 for ; Sat, 27 Jan 2024 01:51:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB45C6B007E; Fri, 26 Jan 2024 20:51:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B64076B0080; Fri, 26 Jan 2024 20:51:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A04D66B0081; Fri, 26 Jan 2024 20:51:00 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 882FF6B007E for ; Fri, 26 Jan 2024 20:51:00 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 460978086A for ; Sat, 27 Jan 2024 01:51:00 +0000 (UTC) X-FDA: 81723412680.02.213273B Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by imf03.hostedemail.com (Postfix) with ESMTP id 7517420002 for ; Sat, 27 Jan 2024 01:50:58 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=XA5xw2G2; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf03.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.45 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706320258; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=j3KL7omzR2YR5H0m3wzbipCveRvJiJv/pASMUWh3gAY=; b=I8OyW3hqMUAiiSZDKrlGj7q34dDE1lPGEt+PkxKvjg12i1yF8o8VxkE4CKs9L+agTfXxE7 zY51jOsNmzqq8CKt0iGMk7QZiEuYxo6+iqjchaCKEMhTRqI2vT+bF/0bo19ffnIgoYKdmX VnApDUGBWzwYuOVahpXMSjen8F508ug= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=XA5xw2G2; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf03.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.45 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706320258; a=rsa-sha256; cv=none; b=0SLz3SqRtISkKzFgjzKXn8NAeuD5Drj2JIMT5IcyJ4QtnNdLc9+4gq5wIk8VcQG19/c7nn oRlfZhjWRmtxd7EkicK6uNr1H6epio0pbO+Bg8CI9ln8apJ6aU2LP/79r9ZnD6x2oGqmAS 50JcD4ij8MOsv0HGqgw/AHvB209V5Ss= Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-337d5480a6aso1170509f8f.1 for ; Fri, 26 Jan 2024 17:50:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706320257; x=1706925057; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=j3KL7omzR2YR5H0m3wzbipCveRvJiJv/pASMUWh3gAY=; b=XA5xw2G2kyT9Nue4ks11BL+kreZrY1XIkviVmuq5p+8mZoolLGuJH6hezjf892/rlv OJkIM3vPAFvgiayfQn5jf2fOxCPxMB1nSix0gjEYWLZ7NIvsEbJ+I+EquBCyJIVfweDY 7k+OqV7WePw+E1bikqLLCsQ6BZiKItDxg76TMnH6fzogFcu/2WeIyXhyHun9QBENPDM2 m1eXsg6YgRdEYTGt111n2Y2SJd1pp9IwGgQMiKVXldQB9jFz0iVdrji4nmSXkhKNfMhO Zq42/6u8vaRSVnZfS024nd7/ceExH5JWbdV7hEW8e0iI55YQST/GNi0SDBE7eFlMxxDo PcvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706320257; x=1706925057; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=j3KL7omzR2YR5H0m3wzbipCveRvJiJv/pASMUWh3gAY=; b=V7RHOj5FN8GJz+tVtOX8jZL+eUgdf6rTAZ2GpPHq/PMHtCQHkynTaa3UWPt4XVlOQ9 4TN/PKr/xg216BUQWoBzCj+qMG03ryj2+A1QsLBNMf9e5sg8Vq0d6+ktgaEFmoSQ980U 66BsL6D0++aEYSslv8rX4hUbv/ajtO4QL0MkhcPBrTXz8jEbyigGjbLN0MpQCFCYufWC RS9MV6ElmoZ7vv5mq/WUNUJ+fPRgjAnzKOwj1mEjHMzKV4YQj8GoxbvqBCWSrWnIfmUi W0VBnGXvRF9goEiuwAPD+FIJGPuPYxI0cR2PDxWT6EDD/nOiwTRI2l3OW0bs4KTd36VL FMZg== X-Gm-Message-State: AOJu0YwHDKpjwzWhM3xgAiyQ3yTQNGtru0vxdEp3tzA3fIpLUaTWEm67 vZB8jWTsOIoTR8vcyIrtwIuilkON5lNToxL7xNR02ERgBcriTvAAWMqIIMl/Hb6xI/BdgCeeUkk eylTmRVgwj8XStK5f3Q5wiXZ7iLI= X-Google-Smtp-Source: AGHT+IF6EA1uHHXa9SQzgottx81xTzWh22Lm6Qzcn2k1JqhAXulDIjCqtrzFoKMaNwIXTXd1psxtsOcvSmftc4z3UtQ= X-Received: by 2002:adf:e34e:0:b0:337:a81a:a92 with SMTP id n14-20020adfe34e000000b00337a81a0a92mr381731wrj.16.1706320256834; Fri, 26 Jan 2024 17:50:56 -0800 (PST) MIME-Version: 1.0 References: <20240125094815.2041933-1-elver@google.com> In-Reply-To: From: Andrey Konovalov Date: Sat, 27 Jan 2024 02:50:46 +0100 Message-ID: Subject: Re: [PATCH 1/2] stackdepot: use variable size records for non-evictable entries To: Marco Elver Cc: Andrew Morton , Alexander Potapenko , Dmitry Vyukov , Vlastimil Babka , Andrey Ryabinin , Vincenzo Frascino , linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 7517420002 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 6ab1bhxnmnf7wn6di7efey79twdu85qu X-HE-Tag: 1706320258-612616 X-HE-Meta: U2FsdGVkX1+IIPw4RnyyfA4fz8oYZhbcTZylIj/LXonFmexQHm4iCs4vaG8j4k6F9jjSzKlMCi5wMv/8WxJnzliENBiEZunpkktxdP33vX3wXFVmBjIIyICxSxTTeeeJlwAwGrvlWUJ1MvyB155sVnnVVKkHVwM9+dJItc+ny04hYtzQa53IUxezp5rCA0Y7+GKWreB1LI+bHKVmEyQLOYmwiWxDrIbM7y85D6TtLB9i0JV4oi+mf4Box72NWMZvmD3fF0smWFdmDw8ysbDjjE9FNO18JZJgDCsGpKg0XhLj6E/BhQn0gfRs9lYaD/YYfSr0CIqDR2mrXuR+aLZQFhSLivhsoHtPJpLQoeAs0kzJc50EgFg4WIaCUBswyyxI1gZ0MSB2uVur/v5Hijz3zbh6x8gGOKIiX9PSMR4rCCWKthNhQHxOtvnVcxLTFi0SWr7QecY8nRtoobawqiCRMLFndIPz1160fWX0guRyzQMZbCPe3rydsBVG+DySTWJ7mSpKeHiCwcCr4XX+rqgoQiPTM3JMFN1P7mxafRyG/49PjPLKBl568qE2oPG7xBx8Wcp5FBLeX/J9i8B8OTQeBwJQaCovjfcIRs0osUVX7Fe0jEb6VE247+9IkZVQ9DcURB6z5ZQzJp1OPnEbZoJ8GEpGVjkmj82xmlaIFTAg4V9Nh1/uT6PbZ7iVnWI01BphFSHAhJNuSeIPT8Nh81S0aEVoljfANvfFLmLEHUNwffS49e+PIKLekAzR9gT/cbPmNUHvJxJBGATknXDEDuIuZdT+Qdn3yA0EkjB2k1+G7vSx2td/WilupZMps2UhBaCPELrxDlHs9uPlCAhKlu7aPhQRruV25yjtFIgq4pXQUed0seWjWuqtNqvwz1uiytnzRVlwCSHP9tXjpbOX1QkW3ZIVoc8lRUqP4ZtGwXR8A8qj+6qc0G/MTGWqVmtJSy9IaObbfCPgDfSbnCaexuX kVSNckJM LcYTD2tQPnEquOs1jVlcqDekk1QPJdqgO47s/JOs1gYbHO/IDxveJkFQi68SoxpmCiiZ06J/LDXkS7c7I8S5+Z3/ohIzaZMh+QdVN+A6akmUVqzEMVYKvzIjVrCJ/mjPku7/YWVjXLbmkZBOGM4Gol601Fwf2Fryl1ySsvKx+p4BtYvkLdRl6KlR5+WJoSOe7FfvJeR8LgIRI4ouGHAdOdpVAuQSSdOIGLpcg9ZR311ydEibHamgmrgrKrZ+ldOCbFhLrHzCRy4Fjp0/VKVYyeBrFfz45x64K260WDeOzb92m7TBCI163VVSONU8mN4jWDCMIPnOj7lfM0dTBICq2IhnThIT/OEVeJ7x+mtI6jdLMJj1HSZMVBrEt6OX5LwfiR7qxmnRKQvLEKQmykhpf57G0veNN4S/pK03mcEm0R8LGHYTGr3XnhuFdzogGUiNunQwX7G1aBghMr4MjQYuBRihPzg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, Jan 26, 2024 at 3:08=E2=80=AFPM Marco Elver wrot= e: > > On Thu, Jan 25, 2024 at 11:35PM +0100, Andrey Konovalov wrote: > [...] > > I wonder if we should separate the stat counters for > > evictable/non-evictable cases. For non-evictable, we could count the > > amount of consumed memory. > [...] > > > > We can also now drop the special case for DEPOT_POOLS_CAP for KMSAN. > > > > Otherwise, looks good to me. > > > > Reviewed-by: Andrey Konovalov > > > > Thank you for cleaning this up! > > Thanks - probably will add this change for v2: > > diff --git a/lib/stackdepot.c b/lib/stackdepot.c > index 1b0d948a053c..8f3b2c84ec2d 100644 > --- a/lib/stackdepot.c > +++ b/lib/stackdepot.c > @@ -44,17 +44,7 @@ > #define DEPOT_OFFSET_BITS (DEPOT_POOL_ORDER + PAGE_SHIFT - DEPOT_STACK_A= LIGN) > #define DEPOT_POOL_INDEX_BITS (DEPOT_HANDLE_BITS - DEPOT_OFFSET_BITS - \ > STACK_DEPOT_EXTRA_BITS) > -#if IS_ENABLED(CONFIG_KMSAN) && CONFIG_STACKDEPOT_MAX_FRAMES >=3D 32 > -/* > - * KMSAN is frequently used in fuzzing scenarios and thus saves a lot of= stack > - * traces. As KMSAN does not support evicting stack traces from the stac= k > - * depot, the stack depot capacity might be reached quickly with large s= tack > - * records. Adjust the maximum number of stack depot pools for this case= . > - */ > -#define DEPOT_POOLS_CAP (8192 * (CONFIG_STACKDEPOT_MAX_FRAMES / 16)) > -#else > #define DEPOT_POOLS_CAP 8192 > -#endif > #define DEPOT_MAX_POOLS \ > (((1LL << (DEPOT_POOL_INDEX_BITS)) < DEPOT_POOLS_CAP) ? \ > (1LL << (DEPOT_POOL_INDEX_BITS)) : DEPOT_POOLS_CAP) > @@ -128,18 +118,22 @@ static DEFINE_RAW_SPINLOCK(pool_lock); > > /* Statistics counters for debugfs. */ > enum depot_counter_id { > - DEPOT_COUNTER_ALLOCS, > - DEPOT_COUNTER_FREES, > - DEPOT_COUNTER_INUSE, > + DEPOT_COUNTER_REFD_ALLOCS, > + DEPOT_COUNTER_REFD_FREES, > + DEPOT_COUNTER_REFD_INUSE, > DEPOT_COUNTER_FREELIST_SIZE, > + DEPOT_COUNTER_PERSIST_COUNT, > + DEPOT_COUNTER_PERSIST_BYTES, > DEPOT_COUNTER_COUNT, > }; > static long counters[DEPOT_COUNTER_COUNT]; > static const char *const counter_names[] =3D { > - [DEPOT_COUNTER_ALLOCS] =3D "allocations", > - [DEPOT_COUNTER_FREES] =3D "frees", > - [DEPOT_COUNTER_INUSE] =3D "in_use", > + [DEPOT_COUNTER_REFD_ALLOCS] =3D "refcounted_allocations", > + [DEPOT_COUNTER_REFD_FREES] =3D "refcounted_frees", > + [DEPOT_COUNTER_REFD_INUSE] =3D "refcounted_in_use", > [DEPOT_COUNTER_FREELIST_SIZE] =3D "freelist_size", > + [DEPOT_COUNTER_PERSIST_COUNT] =3D "persistent_count", > + [DEPOT_COUNTER_PERSIST_BYTES] =3D "persistent_bytes", > }; > static_assert(ARRAY_SIZE(counter_names) =3D=3D DEPOT_COUNTER_COUNT); > > @@ -388,7 +382,7 @@ static struct stack_record *depot_pop_free_pool(void = **prealloc, size_t size) > return stack; > } > > -/* Try to find next free usable entry. */ > +/* Try to find next free usable entry from the freelist. */ > static struct stack_record *depot_pop_free(void) > { > struct stack_record *stack; > @@ -466,9 +460,13 @@ depot_alloc_stack(unsigned long *entries, int nr_ent= ries, u32 hash, depot_flags_ > > if (flags & STACK_DEPOT_FLAG_GET) { > refcount_set(&stack->count, 1); > + counters[DEPOT_COUNTER_REFD_ALLOCS]++; > + counters[DEPOT_COUNTER_REFD_INUSE]++; > } else { > /* Warn on attempts to switch to refcounting this entry. = */ > refcount_set(&stack->count, REFCOUNT_SATURATED); > + counters[DEPOT_COUNTER_PERSIST_COUNT]++; > + counters[DEPOT_COUNTER_PERSIST_BYTES] +=3D record_size; > } > > /* > @@ -477,8 +475,6 @@ depot_alloc_stack(unsigned long *entries, int nr_entr= ies, u32 hash, depot_flags_ > */ > kmsan_unpoison_memory(stack, record_size); > > - counters[DEPOT_COUNTER_ALLOCS]++; > - counters[DEPOT_COUNTER_INUSE]++; > return stack; > } > > @@ -546,8 +542,8 @@ static void depot_free_stack(struct stack_record *sta= ck) > list_add_tail(&stack->free_list, &free_stacks); > > counters[DEPOT_COUNTER_FREELIST_SIZE]++; > - counters[DEPOT_COUNTER_FREES]++; > - counters[DEPOT_COUNTER_INUSE]--; > + counters[DEPOT_COUNTER_REFD_FREES]++; > + counters[DEPOT_COUNTER_REFD_INUSE]--; > > printk_deferred_exit(); > raw_spin_unlock_irqrestore(&pool_lock, flags); Looks good to me, thanks!