From patchwork Tue Apr 19 20:31:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 12819408 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 4676BC433EF for ; Tue, 19 Apr 2022 20:32:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A12D76B0072; Tue, 19 Apr 2022 16:32:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 99B886B0073; Tue, 19 Apr 2022 16:32:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 814AC6B0074; Tue, 19 Apr 2022 16:32:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.25]) by kanga.kvack.org (Postfix) with ESMTP id 6C6396B0072 for ; Tue, 19 Apr 2022 16:32:12 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay13.hostedemail.com (Postfix) with ESMTP id 339BF609FF for ; Tue, 19 Apr 2022 20:32:12 +0000 (UTC) X-FDA: 79374775704.01.AEF4C37 Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by imf23.hostedemail.com (Postfix) with ESMTP id 70DE8140010 for ; Tue, 19 Apr 2022 20:32:10 +0000 (UTC) Received: by mail-qk1-f178.google.com with SMTP id 204so8417139qkg.5 for ; Tue, 19 Apr 2022 13:32:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ko8zqzAqB5d7Fp7/0nrVZqCAzIhr0lHUR/A88GtSC5Y=; b=hxxc3aXDI1szfhMi/u4O7o6ofPImpu0MGdJNdtkvoouyMZHSreIgkWcr6xha3MM/eB B7b75LCgIPkwvhryS0UoU5RAP8oj56g5A+SJKyHAC9Qv7guscyQQY5ge1RFu1pkZihQu uvGQNZHSClE9EQYgAR+lcbpGADr/JfghO88Evj5cQbWdjaLLDWlaVQb5+fX3hVS+Au7l Rk/aN9fl1Yk6cptw+KsyACYtrZ/xY10X7mwyPTladyl6lIPNCVoapu6n2ANZAxAer6Jb cxfPp7GmZe4/v+kBmlj1lAIWij/rXjYtLnjw6Z1SaIf/8LrK7E5CyePzy3wqV4Sz4uYt ZcVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ko8zqzAqB5d7Fp7/0nrVZqCAzIhr0lHUR/A88GtSC5Y=; b=UtepHcw7XVgKxKlt/r5OyvjSiLv+1dvj69h2k+n1eOdgUItQWJogkwH0rmaidVxZ2C C2qK8ASVuNMwslc87ss5HCEwtZUo64gf2aYtWH6xST9vnCt9d2wkGCNo8tQ27ZKYWbFW Zny4IVLkI3zuVZW6/OMSwOjh03TeNQw4CDrBvh6rdWKhy0g97chBTPzc9Hzl4V4YoS/a sr67PdTaiOqeCtkiGTVlIWgn+u1OPuz8hoxh6IeQA4WUkwjgvoOV+cxGKl40J522fqga a04qtbyBj17soGnKLIL8W372yHM4GQet9G+Bd8HjFlQE4AOeoCdbKO1kShN92l+PphTl I3GA== X-Gm-Message-State: AOAM531ybo/8C7eV1IO+0w8h8AcT816dPxwJ0/jlnbWbC8B5/MYbhQvk DmaOaC9nFmevew4uKIiEMA8UtPsIjmmU X-Google-Smtp-Source: ABdhPJyxqQvJSU2BAXCqksNbmRp+iJ3c6ty/AqIcDXt7a31XO4Ee/I3Vl7wFKwADBpD0yIXu2C7tbg== X-Received: by 2002:a05:620a:b92:b0:67e:b7a2:dabd with SMTP id k18-20020a05620a0b9200b0067eb7a2dabdmr10941225qkh.106.1650400330998; Tue, 19 Apr 2022 13:32:10 -0700 (PDT) Received: from moria.home.lan (c-73-219-103-14.hsd1.vt.comcast.net. [73.219.103.14]) by smtp.gmail.com with ESMTPSA id e9-20020ac84e49000000b002f1fcda1ac7sm611180qtw.82.2022.04.19.13.32.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Apr 2022 13:32:10 -0700 (PDT) From: Kent Overstreet To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Cc: Kent Overstreet , roman.gushchin@linux.dev, hannes@cmpxchg.org Subject: [PATCH 0/4] Printbufs & shrinker OOM reporting Date: Tue, 19 Apr 2022 16:31:58 -0400 Message-Id: <20220419203202.2670193-1-kent.overstreet@gmail.com> X-Mailer: git-send-email 2.35.2 MIME-Version: 1.0 Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=hxxc3aXD; spf=pass (imf23.hostedemail.com: domain of kent.overstreet@gmail.com designates 209.85.222.178 as permitted sender) smtp.mailfrom=kent.overstreet@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Stat-Signature: hzk5fq6mgrkpx1nwfqmnz1wb55nqes8c X-Rspamd-Queue-Id: 70DE8140010 X-Rspamd-Server: rspam04 X-Rspam-User: X-HE-Tag: 1650400330-135663 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: Debugging OOMs has been one of my sources of frustration, so this patch series is an attempt to do something about it. The first patch in the series is something I've been slowly evolving in bcachefs for years: simple heap allocated strings meant for appending to and building up structured log/error messages. They make it easy and straightforward to write pretty-printers for everything, which in turn makes good logging and error messages something that just happens naturally. We want it here because that means the reporting I'm adding to shrinkers can be used by both OOM reporting, and for the sysfs (or is it debugfs now) interface that Roman is adding. This patch series also: - adds OOM reporting on shrinkers, reporting on top 10 shrinkers (in sorted order!) - changes slab reporting to be always-on, also reporting top 10 slabs in sorted order - starts centralizing OOM reporting in mm/show_mem.c The last patch in the series is only a demonstration of how to implement the shrinker .to_text() method, since bcachefs isn't upstream yet. Kent Overstreet (4): lib/printbuf: New data structure for heap-allocated strings mm: Add a .to_text() method for shrinkers mm: Centralize & improve oom reporting in show_mem.c bcachefs: shrinker.to_text() methods fs/bcachefs/btree_cache.c | 18 ++- fs/bcachefs/btree_key_cache.c | 18 ++- include/linux/printbuf.h | 140 ++++++++++++++++++ include/linux/shrinker.h | 5 + lib/Makefile | 4 +- lib/printbuf.c | 271 ++++++++++++++++++++++++++++++++++ mm/Makefile | 2 +- mm/oom_kill.c | 23 --- {lib => mm}/show_mem.c | 14 ++ mm/slab.h | 6 +- mm/slab_common.c | 53 ++++++- mm/vmscan.c | 75 ++++++++++ 12 files changed, 587 insertions(+), 42 deletions(-) create mode 100644 include/linux/printbuf.h create mode 100644 lib/printbuf.c rename {lib => mm}/show_mem.c (78%)