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 107D0C4829E for ; Mon, 12 Feb 2024 19:11:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 841EA6B0071; Mon, 12 Feb 2024 14:11:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F12D6B0075; Mon, 12 Feb 2024 14:11:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6B9436B007B; Mon, 12 Feb 2024 14:11:43 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 587EF6B0075 for ; Mon, 12 Feb 2024 14:11:43 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 212461C0FEE for ; Mon, 12 Feb 2024 19:11:43 +0000 (UTC) X-FDA: 81784096086.27.BCE93BC Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) by imf23.hostedemail.com (Postfix) with ESMTP id 52B7A14001D for ; Mon, 12 Feb 2024 19:11:40 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jVYGMMLK; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.181 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707765100; 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=zUD0wC9KyENgwYKaRGo4h2B/QZ9QTMhsPhKclpkb0Ns=; b=JKi6gf5HE/e50EJHjUNHoWmdhdc3o0D7mftiyfRhiPqBXQVqROXQrKZwD1TKJDwUIdtmhs aM2cQNn31OzKEI2orrj6b5Gq0aWftTegu0IaxhWqSOLCnb1cS3n1HS+OwrdEBhEzybCrFB b/o+9/vX9np+Z6OAmgN0vzLIZGzpOHE= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jVYGMMLK; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf23.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.181 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707765100; a=rsa-sha256; cv=none; b=6f0LcRGM4Jw3bUXvAknXsCqm87WC+L3ZKrGrloP48gI7iRZGVwKYmM2JkgHMlRMfUJJwM1 xtPYnCi4JfIUdCQw/yz2hb1IbECYbZ35tIGq3uV5hDky2TCXLKymeqWhJWfp7mA9TWFZYS 4He1sDwPHy7ktzNa9371PyKb/i55eQY= Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-5ceb3fe708eso2482831a12.3 for ; Mon, 12 Feb 2024 11:11:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707765099; x=1708369899; 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=zUD0wC9KyENgwYKaRGo4h2B/QZ9QTMhsPhKclpkb0Ns=; b=jVYGMMLKl7dg2Re2J/nK9fIgnMyCjKMyXCEibmdbEqePUqLKRIMqlScO5BB+hZhSEU F2bDdFvDqbXxijnL9uIgDt5b4FP1VGeZ3tHFdAWMb2WnXKMht6ES/IJQsPA8KesPfVpg BP87SNxB9Wmv8Mc4xIfsop45xRnpf4ECPJuaJ3QV7Mm11LwcsYNX44Bhi9aW2qOXaYW4 MK0HbWIZAidy45ZwoUVJ9YiqvtdI1uIM5S+cGdMDqCbYoUviwN7f5fdW59Pl06z3v18q iuoJTIQIPOM3QBZcXqpQ2TJn9o1VoRlDeOgS6RhjIXDVWogjZdI7KVyDq4j5/fjLMq98 0fgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707765099; x=1708369899; 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=zUD0wC9KyENgwYKaRGo4h2B/QZ9QTMhsPhKclpkb0Ns=; b=IgkJ3z2tnVjki0JD4bN3f6JGfp10+wzoj1ZSXaQ653kAToOvizwgnehJO8JHntxr98 bWUmeB5MH47XtSloNJidLZALbkRnu4DQKwvuo+pz5bJvStzrBXbsAqQSPTAdqtYmARmW ArgOklVauTsHqkZm1JlnQNPGJw4uboQjCkGBUrK70IXM41IDathjxrKHzsfdzfEVAIwQ qHS1dKomxrB1ooIvNaN333TTZqpj4T4iqYb1Z2aTqlnpDsU9RtIywciUIxHde+EFGgvH n2rQ26AIgPiXL6xSvF6cQMZZ/Jkx60qgK60LWDs8j9vcYChSYZDZKU5GopLMIlgdAwUK QtOg== X-Forwarded-Encrypted: i=1; AJvYcCW88LFkH07/Sj5J2EnpXMLITIr3ruHDSeFWNxsnYa6pbHVTD+IKm+WhtF9gdgvxNohD0C994JA1guVgeuO8x9dNnXw= X-Gm-Message-State: AOJu0Ywx/mA14pLLTn7+1/UVlSOn3xnVd93/j3V8cvHUFRZ+LUNDzFCW AtafIJzKVQwt4ZNrfKK/xiWORmmZV+CrRQR8mVnsfiT3kD3SeeRe9VvN4jh6S3dUFcYwM90oYYH Vd1f1rmDAXjfaCrPhN+UM3IH9Itc= X-Google-Smtp-Source: AGHT+IGNiw+DUyIDHERvScrza7oc6iEntlqOOfnknQgYeMWs6zMwCrObVgEuyc334tRqHNiDvuFjcvsNdUxxav3Hmr8= X-Received: by 2002:a17:90b:380e:b0:296:43a:932e with SMTP id mq14-20020a17090b380e00b00296043a932emr5025578pjb.7.1707765098951; Mon, 12 Feb 2024 11:11:38 -0800 (PST) MIME-Version: 1.0 References: <20240209040608.98927-1-alexei.starovoitov@gmail.com> <20240209040608.98927-13-alexei.starovoitov@gmail.com> In-Reply-To: From: Andrii Nakryiko Date: Mon, 12 Feb 2024 11:11:27 -0800 Message-ID: Subject: Re: [PATCH v2 bpf-next 12/20] libbpf: Add support for bpf_arena. To: Kumar Kartikeya Dwivedi Cc: Alexei Starovoitov , bpf@vger.kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, tj@kernel.org, brho@google.com, hannes@cmpxchg.org, lstoakes@gmail.com, akpm@linux-foundation.org, urezki@gmail.com, hch@infradead.org, linux-mm@kvack.org, kernel-team@fb.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 52B7A14001D X-Stat-Signature: gz4ker8uan8nyb43aad7rw8yea11j1zj X-HE-Tag: 1707765100-333709 X-HE-Meta: U2FsdGVkX1+J/GU5KnguEWwdUwjz/UOmik3N/xE4JYppxCIoBqvltX4JoGXBluB/e39LntbWyUaofhNt5h4ZffhENNVpfJzqa2PyMx2Z2cXr6u0LXOshYYyR6wWRmYiKCSyW6lxF7gE/nUqO2aGp0GwJO1HoTDrNX7LPCzIwEIyN/OrSyFtdua+zSFdxHLJgwn0r31A0Z6r6c0QATV14Q8UxnZwWtcmbDNzDwFC/BB6G2F2diMB2ngWfCbfuLd/QB5IbUBmUEhGy2Di9mUa0IqnxJnVbjextuo12NDZvKIp58eosTsptBQWFX7x4clPT8lyPye0SxtL+gxspfIycYnRFJHm74DS9lvOWbM0XMTA5JFsLIYrFCRXd95uRb6EsvWzMGwactjoY5OB2o0WyNPo0UN0tYVwg6GmKSUyzouzzSdk8eRNrpASRs9avO3LIi1/SuS+RrHeXYBtdUO9tzVMIOokjOucxMyh2r+KOKb7D10WNFIskx8cp66NyOT2iwcyuR2MN6MWzrzscUiP5qloXJgjPm7/PtnnR/JO77VBocba1XLsg+NERVVTsA4ku8SuZMDf8fLbM1wbOAdww0zBis4px1fjRmytNs5Dor5FtX3nWGwPyb5+4v45ruWzlMCd3O2v2EjgcLSTeJbxMn6sSGHkAgfnAuiQuaB50mKLCDaei+M5p/Zl4NUwoczj9FdTp7inYkNSNVptNlX/l7h+fxz3a9MAqRzwEsszVpnCTEj4wRUeiIrAHBZi0PWzzsTXCsCaFBp35X4YrGZHqvBbW9bZneLfcY9gl0pgl7S5bRhB6AB5Hc5UN8Urvgu81MdsGOWy8rfb+wsfU0QwI7qxfbkl9rDeQZ0QlfdoQ95RvlJyxPbSK3YC+PtNqlwzYAAtC0Oc/xq4PhvZrsDcp7j3l+38v+fLvjvyIAlCnEJPDyn8Jbsplg1DcE3OKUT5yHqTdpuVFRzSFk53i9aA tA/ta7jS FU6UTI6J6YDDa6G8Ofy0bRGlAS//31DzRKWK6isHe3NRRe3ogi1JpxXIMpfpZkcfRtiP+BIStEnDNtnSDy32ZLKEeK9yz/+5UMEoMWdGZBtURZtv66sSH/KRuBAlP6yxQ52KVUW3ODEgQ+OpjZMpbkUdLvRVQJm6yXg3Cn9LI8GGyXCbFYzijsIuW7fTgI/kOv9jGIVlaHGBRrPL8eqLTRrjtvKcCqoj+owWA5/jeU/ohLE/2zSyft15sZOfRnZN05fDMWr17k/+Qok5PjC2Vu331gkMTr5cmj+c1PP5a6cmSYBpyCsRfGZe3jsQfSx+1JW+ucv2dUNDNz6C/HsZm2KmYfz91BLlrpWFmqaTWoIrr0/i73DVRtUqqhirfdV4sR6FR9I407ZqDdQcyZ14d+6YNu8THkkYggQR3lPhi92iKPqRVdWbHxrSPPcvbRItDcpnG2sCVrDtJdaiXKPnZIYbo6ywNCEpca6C9OstQGSnAfO2eL+/pLVWeSgCMFbZ1oolW5d9JLNiOZfVp1lbwNc4UUzq2SkDWQnUhaWIvmtNrvMZK+cKgp2YREcsihQ26LW9INA/aAU+G06UsUz/2JkQm3g== 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, Feb 9, 2024 at 11:17=E2=80=AFPM Kumar Kartikeya Dwivedi wrote: > > On Fri, 9 Feb 2024 at 05:07, Alexei Starovoitov > wrote: > > > > From: Alexei Starovoitov > > > > mmap() bpf_arena right after creation, since the kernel needs to > > remember the address returned from mmap. This is user_vm_start. > > LLVM will generate bpf_arena_cast_user() instructions where > > necessary and JIT will add upper 32-bit of user_vm_start > > to such pointers. > > > > Fix up bpf_map_mmap_sz() to compute mmap size as > > map->value_size * map->max_entries for arrays and > > PAGE_SIZE * map->max_entries for arena. > > > > Don't set BTF at arena creation time, since it doesn't support it. > > > > Signed-off-by: Alexei Starovoitov > > --- > > tools/lib/bpf/libbpf.c | 43 ++++++++++++++++++++++++++++++----- > > tools/lib/bpf/libbpf_probes.c | 7 ++++++ > > 2 files changed, 44 insertions(+), 6 deletions(-) > > > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > > index 01f407591a92..4880d623098d 100644 > > --- a/tools/lib/bpf/libbpf.c > > +++ b/tools/lib/bpf/libbpf.c > > @@ -185,6 +185,7 @@ static const char * const map_type_name[] =3D { > > [BPF_MAP_TYPE_BLOOM_FILTER] =3D "bloom_filter", > > [BPF_MAP_TYPE_USER_RINGBUF] =3D "user_ringbuf", > > [BPF_MAP_TYPE_CGRP_STORAGE] =3D "cgrp_storage", > > + [BPF_MAP_TYPE_ARENA] =3D "arena", > > }; > > > > static const char * const prog_type_name[] =3D { > > @@ -1577,7 +1578,7 @@ static struct bpf_map *bpf_object__add_map(struct= bpf_object *obj) > > return map; > > } > > > > -static size_t bpf_map_mmap_sz(unsigned int value_sz, unsigned int max_= entries) > > +static size_t __bpf_map_mmap_sz(unsigned int value_sz, unsigned int ma= x_entries) > > { > > const long page_sz =3D sysconf(_SC_PAGE_SIZE); > > size_t map_sz; > > @@ -1587,6 +1588,20 @@ static size_t bpf_map_mmap_sz(unsigned int value= _sz, unsigned int max_entries) > > return map_sz; > > } > > > > +static size_t bpf_map_mmap_sz(const struct bpf_map *map) > > +{ > > + const long page_sz =3D sysconf(_SC_PAGE_SIZE); > > + > > + switch (map->def.type) { > > + case BPF_MAP_TYPE_ARRAY: > > + return __bpf_map_mmap_sz(map->def.value_size, map->def.= max_entries); > > + case BPF_MAP_TYPE_ARENA: > > + return page_sz * map->def.max_entries; > > + default: > > + return 0; /* not supported */ > > + } > > +} > > + > > static int bpf_map_mmap_resize(struct bpf_map *map, size_t old_sz, siz= e_t new_sz) > > { > > void *mmaped; > > @@ -1740,7 +1755,7 @@ bpf_object__init_internal_map(struct bpf_object *= obj, enum libbpf_map_type type, > > pr_debug("map '%s' (global data): at sec_idx %d, offset %zu, fl= ags %x.\n", > > map->name, map->sec_idx, map->sec_offset, def->map_fla= gs); > > > > - mmap_sz =3D bpf_map_mmap_sz(map->def.value_size, map->def.max_e= ntries); > > + mmap_sz =3D bpf_map_mmap_sz(map); > > map->mmaped =3D mmap(NULL, mmap_sz, PROT_READ | PROT_WRITE, > > MAP_SHARED | MAP_ANONYMOUS, -1, 0); > > if (map->mmaped =3D=3D MAP_FAILED) { > > @@ -4852,6 +4867,7 @@ static int bpf_object__create_map(struct bpf_obje= ct *obj, struct bpf_map *map, b > > case BPF_MAP_TYPE_SOCKHASH: > > case BPF_MAP_TYPE_QUEUE: > > case BPF_MAP_TYPE_STACK: > > + case BPF_MAP_TYPE_ARENA: > > create_attr.btf_fd =3D 0; > > create_attr.btf_key_type_id =3D 0; > > create_attr.btf_value_type_id =3D 0; > > @@ -4908,6 +4924,21 @@ static int bpf_object__create_map(struct bpf_obj= ect *obj, struct bpf_map *map, b > > if (map->fd =3D=3D map_fd) > > return 0; > > > > + if (def->type =3D=3D BPF_MAP_TYPE_ARENA) { > > + map->mmaped =3D mmap((void *)map->map_extra, bpf_map_mm= ap_sz(map), > > + PROT_READ | PROT_WRITE, > > + map->map_extra ? MAP_SHARED | MAP_FI= XED : MAP_SHARED, > > + map_fd, 0); > > + if (map->mmaped =3D=3D MAP_FAILED) { > > + err =3D -errno; > > + map->mmaped =3D NULL; > > + close(map_fd); > > + pr_warn("map '%s': failed to mmap bpf_arena: %d= \n", > > + bpf_map__name(map), err); > > + return err; > > + } > > + } > > + > > Would it be possible to introduce a public API accessor for getting > the value of map->mmaped? That would be bpf_map__initial_value(), no? > Otherwise one would have to parse through /proc/self/maps in case > map_extra is 0. > > The use case is to be able to use the arena as a backing store for > userspace malloc arenas, so that > we can pass through malloc/mallocx calls (or class specific operator > new) directly to malloc arena using the BPF arena. > In such a case a lot of the burden of converting existing data > structures or code can be avoided by making much of the process > transparent. > Userspace malloced objects can also be easily shared to BPF progs as a > pool through bpf_ma style per-CPU allocator. > > > [...]