Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp929475ybc; Tue, 19 Nov 2019 11:34:25 -0800 (PST) X-Google-Smtp-Source: APXvYqzgcOs2CpfZHhF9Xknz+4ZIslGNtw/jtoc3iMEm9x0OqPSOwjrEvzIJFtNYE8zPgK/P4Ybo X-Received: by 2002:a17:906:7812:: with SMTP id u18mr5805615ejm.6.1574192065357; Tue, 19 Nov 2019 11:34:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574192065; cv=none; d=google.com; s=arc-20160816; b=mjzfcjfpCXdWn3hfJPa0ehUMZaDUZ1Y6EDtKaLWYZOlvSIXx3yUUhVNEIaKwkUzX3q tml45WNCaIL9QihaT4SSUNtih+B2Fmn7R7eGDkK3hY1dLhUA0sFIuDRYTMb2V7gjdZ0a HUDBpiejyMk4WoYDhM43l6IHmkBTKVYe7zuYueyoVgKZGL8tcbFLonLhD4X37ScF/Aq3 ZJxCIikyjR99Xlf8ceiGpshPpwwZQeR3TNHKGIgJ2bW4u22xDJa9Rx6ji3gBTthsIyJ2 1bSklZTT2nH66ciPlQ/Hd6M2ncqL5Zkrqkn0lOwtD/3iSKicZt/SQGctMXRP0IgapZrO TehA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:mime-version :message-id:date:dkim-signature; bh=C47Ki3HabBbaxKIHhsS43LGLmAjUHPP9alFct2tZKio=; b=pjeF8HiWuHu4I2fQeAF7gEtdWZbhwZoVANevBxRzx1xIdicvonlJHkulK/bdvCyD5W d8okdAjHkEI/gno0XzeKRsaX0DyUuyZtWfHQlCD5r/JzkfFaAuSniH6IOItiA+96KTcA bqsZEMh6+dTTSq4G6nmDwQgBMc6ODYmEafu2HEGiNv31wGfgt5vo1Xpq5xwUxEEAyvuv vhR4bOxMFZOtTVuvGLN7LiXouhJIgowFJAHCbiP/CYvbVkCaaLuXIBG+xVNZ03GmguT4 3Ij1K8KHDSJggzmhTpfWsyg8AffpkdjbMP4GJW6hmQUUZyByMhkNYxx5CJzltXt8zFN6 G+oQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=AQhhVmFW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a25si13945820ejt.323.2019.11.19.11.34.01; Tue, 19 Nov 2019 11:34:25 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=AQhhVmFW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727148AbfKSTap (ORCPT + 99 others); Tue, 19 Nov 2019 14:30:45 -0500 Received: from mail-pf1-f201.google.com ([209.85.210.201]:53832 "EHLO mail-pf1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726620AbfKSTap (ORCPT ); Tue, 19 Nov 2019 14:30:45 -0500 Received: by mail-pf1-f201.google.com with SMTP id h2so17479901pfr.20 for ; Tue, 19 Nov 2019 11:30:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=C47Ki3HabBbaxKIHhsS43LGLmAjUHPP9alFct2tZKio=; b=AQhhVmFWnFPcXgEc/Fk9f4e4x5ge44nDIJoAhq06dkr8uxhVWVodJBcAw6jHJBnHSv XVLDjEH6hlcjYJCj8rmlXhSI/MzVybNW+HRETZq0VCQE23W/K10hRk2FBE0iUcwF4eF9 pocSqz04vLq6s74RaiVdieK/1p1PXI3RWfzPnp2NwquFVjrOT0w/+XdF+FmKOFzDDZfy nVFpwnL1fjbAmDA3yMmCu6c0GSj2cuTtbUtJhIZPof7fXdPVAkhiXCYs5FAvRIja2vNE y/33W28eNuTi/lhOFQG1DbNU/ICiItg7jIV1B243hN15HdPLDo6YW7tXTQXzBdHtFWrU /q2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=C47Ki3HabBbaxKIHhsS43LGLmAjUHPP9alFct2tZKio=; b=aQzhIKdxtQTUW2dwtL3lOagEjWdOoyEFbqaLvHGN3ILnMKad99clrhZwRa7Hbu5cTw BXxAq60kUHC1MfMf+dCnmhEavEy7VJFJBu3G0Sq8TBp8z4uO+DnRj69awMw2H/+mCC6i BJNGQqy37Y3Mwq/t+9nVGruJdnyM+3aMeqZ0Q404rnzn4vQyuYqoZVPPhrbwSSaSARhr OllP/gkde66Hqtbzb3ZdvGfgNi1sFYHUNhdYTlgNCTXtqzm2sZlHDFGcLo8lUp6DjBq7 td2hn/ybAk7UMUtCxtg6TLukoHZwbJURLpWsefi5auELbyziAiiYVyA8vjwJpVWnRJl5 dWGA== X-Gm-Message-State: APjAAAU8h8MUy/RDTZqtio6IJfBBZnOW1bgKXM4EljKzlRxqONn9Gw5G dFYt9BYQYsaiF6JzVU+XtW1ZR1q+QMiR X-Received: by 2002:a63:a34e:: with SMTP id v14mr7487127pgn.58.1574191842857; Tue, 19 Nov 2019 11:30:42 -0800 (PST) Date: Tue, 19 Nov 2019 11:30:27 -0800 Message-Id: <20191119193036.92831-1-brianvv@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.24.0.432.g9d3f5f5b63-goog Subject: [PATCH v2 bpf-next 0/9] add bpf batch ops to process more than 1 elem From: Brian Vazquez To: Brian Vazquez , Alexei Starovoitov , Daniel Borkmann , "David S . Miller" Cc: Yonghong Song , Stanislav Fomichev , Petar Penkov , Willem de Bruijn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org, Brian Vazquez Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch series introduce batch ops that can be added to bpf maps to lookup/lookup_and_delete/update/delete more than 1 element at the time, this is specially useful when syscall overhead is a problem and in case of hmap it will provide a reliable way of traversing them. The implementation inclues a generic approach that could potentially be used by any bpf map and adds it to arraymap, it also includes the specific implementation of hashmaps which are traversed using buckets instead of keys. The bpf syscall subcommands introduced are: BPF_MAP_LOOKUP_BATCH BPF_MAP_LOOKUP_AND_DELETE_BATCH BPF_MAP_UPDATE_BATCH BPF_MAP_DELETE_BATCH The UAPI attribute is: struct { /* struct used by BPF_MAP_*_BATCH commands */ __aligned_u64 in_batch; /* start batch, * NULL to start from beginning */ __aligned_u64 out_batch; /* output: next start batch */ __aligned_u64 keys; __aligned_u64 values; __u32 count; /* input/output: * input: # of key/value * elements * output: # of filled elements */ __u32 map_fd; __u64 elem_flags; __u64 flags; } batch; in_batch and out_batch are only used for lookup and lookup_and_delete since those are the only two operations that attempt to traverse the map. update/delete batch ops should provide the keys/values that user wants to modify. Here are the previous discussions on the batch processing: - https://lore.kernel.org/bpf/20190724165803.87470-1-brianvv@google.com/ - https://lore.kernel.org/bpf/20190829064502.2750303-1-yhs@fb.com/ - https://lore.kernel.org/bpf/20190906225434.3635421-1-yhs@fb.com/ Changelog since v1: - Fix SOB ordering and remove Co-authored-by tag (Alexei) Changelog since RFC: - Change batch to in_batch and out_batch to support more flexible opaque values to iterate the bpf maps. - Remove update/delete specific batch ops for htab and use the generic implementations instead. Brian Vazquez (5): bpf: add bpf_map_{value_size,update_value,map_copy_value} functions bpf: add generic support for lookup and lookup_and_delete batch ops bpf: add generic support for update and delete batch ops bpf: add lookup and updated batch ops to arraymap selftests/bpf: add batch ops testing to array bpf map Yonghong Song (4): bpf: add batch ops to all htab bpf map tools/bpf: sync uapi header bpf.h libbpf: add libbpf support to batch ops selftests/bpf: add batch ops testing for hmap and hmap_percpu include/linux/bpf.h | 21 + include/uapi/linux/bpf.h | 21 + kernel/bpf/arraymap.c | 2 + kernel/bpf/hashtab.c | 244 ++++++++ kernel/bpf/syscall.c | 571 ++++++++++++++---- tools/include/uapi/linux/bpf.h | 21 + tools/lib/bpf/bpf.c | 61 ++ tools/lib/bpf/bpf.h | 14 + tools/lib/bpf/libbpf.map | 4 + .../map_lookup_and_delete_batch_array.c | 119 ++++ .../map_lookup_and_delete_batch_htab.c | 257 ++++++++ 11 files changed, 1215 insertions(+), 120 deletions(-) create mode 100644 tools/testing/selftests/bpf/map_tests/map_lookup_and_delete_batch_array.c create mode 100644 tools/testing/selftests/bpf/map_tests/map_lookup_and_delete_batch_htab.c -- 2.24.0.432.g9d3f5f5b63-goog