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 X-Spam-Level: X-Spam-Status: No, score=-3.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22097C282C0 for ; Wed, 23 Jan 2019 06:45:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D995A21726 for ; Wed, 23 Jan 2019 06:45:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="oKPnsEB/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726432AbfAWGpo (ORCPT ); Wed, 23 Jan 2019 01:45:44 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:32898 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725973AbfAWGpo (ORCPT ); Wed, 23 Jan 2019 01:45:44 -0500 Received: by mail-qt1-f196.google.com with SMTP id l11so1256461qtp.0 for ; Tue, 22 Jan 2019 22:45:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nc0T6oqGHUKbrnW9E1amYdi8T+FhH1MmI73kWRqkqKM=; b=oKPnsEB/lbQFi7mxC/NjjOddwNKLtp6teSPCGx4cRpgVi2VypeyRgLGkMoV0Gl1aHS CYzxVvn72mkKed+/ovTF+54FqQ4SEeL1KYzUg/GfeJeulZvxKSEhXlMJu2M2ddP2kFSx 37diWYubMh0kMDqpBMhMsU04bZfSxdo6p1lcMqAw+8dHpGy98Tk+EAEE9rmw0ac6jrA6 I6OWyHh+qvyZYMkO+NTpyTAS1NSkuurhUJllJltEPfkB9d2caXmz9zTL2SLE1VOtmWaS 0T6QV4ur+IpmiiJnzy6USwB9EwD1xxC/u+D5JlA3J5DXObr+IMUQeCruTE2wUVUMjWKH NgBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nc0T6oqGHUKbrnW9E1amYdi8T+FhH1MmI73kWRqkqKM=; b=pGTbHY3pGDMN6ORNdCaneGeHoU9EkHzy1BjRqvWBtvyYBHiT9c12tJZg04ze2Ef7F2 9D+TwNuTcRib81X6D/cn4SmlZNXK9mBQY5I4dypVMFwrybBNPsdFi1ySZbsm6/2gsJq4 WXNbdDx1uKBxUkvs0XM/SyzM7cY0mgguJVWETeV+cSmvy8f0EXr3eU+oLzXABoVmHrED WS2WUNab+7jRWMKgLylBTxnB+lTYP+sNZFJkst7aCwvKe0igbSILJGDe2lNL1IxmEB0n 7IC7vCv0hBx3HyqpP8bu74wtcDCrnVEfIm5iFd+lulkf53ALEfqob2+38RSt8JwenkFg /SqQ== X-Gm-Message-State: AJcUukdxWDM6FdXkjCS8/lzrZLBNlsP13S2irWWV7EHctqwUxUzeaX1r EmDVayyEjeIw3W81Rbvu/Nzqfw== X-Google-Smtp-Source: ALg8bN7zexm2/5M9j85REBsrkQcWGkc7DjAd7/13X4NYNfJA5mEovACvm1ykYOkEFamDrNqJ7P3A6w== X-Received: by 2002:a0c:f8cb:: with SMTP id h11mr929232qvo.134.1548225943085; Tue, 22 Jan 2019 22:45:43 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id k6sm80589046qtk.41.2019.01.22.22.45.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Jan 2019 22:45:42 -0800 (PST) From: Jakub Kicinski To: alexei.starovoitov@gmail.com, daniel@iogearbox.net Cc: yhs@fb.com, netdev@vger.kernel.org, oss-drivers@netronome.com, kafai@fb.com, Jakub Kicinski Subject: [PATCH bpf-next v5 00/12] bpf: dead code elimination Date: Tue, 22 Jan 2019 22:45:17 -0800 Message-Id: <20190123064529.13518-1-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi! This set adds support for complete removal of dead code. Patch 3 contains all the code removal logic, patches 2 and 4 additionally optimize branches around and to dead code. Patches 6 and 7 allow offload JITs to take advantage of the optimization. After a few small clean ups (8, 9, 10) nfp support is added (11, 12). Removing code directly in the verifier makes it easy to adjust the relevant metadata (line info, subprogram info). JITs for code store constrained architectures would have hard time performing such adjustments at JIT level. Removing subprograms or line info is very hard once BPF core finished the verification. For user space to perform dead code removal it would have to perform the execution simulation/analysis similar to what the verifier does. v3: - fix uninitilized var warning in GCC 6 (buildbot). v4: - simplify the linfo-keeping logic (Yonghong). Instead of trying to figure out that we are removing first instruction of a subprogram, just always keep last dead line info, if first live instruction doesn't have one. v5: - improve comments (Martin Lau). Jakub Kicinski (12): bpf: change parameters of call/branch offset adjustment bpf: verifier: hard wire branches to dead code bpf: verifier: remove dead code bpf: verifier: remove unconditional branches by 0 selftests: bpf: add tests for dead code removal bpf: verifier: record original instruction index bpf: notify offload JITs about optimizations nfp: bpf: don't use instruction number for jump target nfp: bpf: split up the skip flag nfp: bpf: save original program length nfp: bpf: support optimizing dead branches nfp: bpf: support removing dead code drivers/net/ethernet/netronome/nfp/bpf/jit.c | 42 +- drivers/net/ethernet/netronome/nfp/bpf/main.h | 33 +- .../net/ethernet/netronome/nfp/bpf/offload.c | 9 +- .../net/ethernet/netronome/nfp/bpf/verifier.c | 74 +++- include/linux/bpf.h | 7 + include/linux/bpf_verifier.h | 6 + include/linux/filter.h | 1 + kernel/bpf/core.c | 52 ++- kernel/bpf/offload.c | 35 ++ kernel/bpf/verifier.c | 256 ++++++++++- tools/testing/selftests/bpf/test_btf.c | 396 +++++++++++++++++- tools/testing/selftests/bpf/test_verifier.c | 160 +++++++ 12 files changed, 1004 insertions(+), 67 deletions(-) -- 2.19.2