Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Johan Almbladh <johan.almbladh@anyfinetworks.com>
To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org
Cc: kafai@fb.com, songliubraving@fb.com, yhs@fb.com,
john.fastabend@gmail.com, kpsingh@kernel.org,
Tony.Ambardar@gmail.com, netdev@vger.kernel.org,
bpf@vger.kernel.org,
Johan Almbladh <johan.almbladh@anyfinetworks.com>
Subject: [RFC PATCH 00/14] bpf/tests: Extend the eBPF test suite
Date: Mon, 26 Jul 2021 10:17:24 +0200 [thread overview]
Message-ID: <20210726081738.1833704-1-johan.almbladh@anyfinetworks.com> (raw)
Greetings,
During my work with the 32-bit MIPS JIT implementation I also added a
number of new test cases in the test_bpf kernel module. I found it
valuable to be able to throughly test the JIT on a low level with
minimum dependency on user space tooling. If you think it would be useful,
I have prepared a patch set with my additions. I have verified it on
x86_64 and i386, with/without JIT and JIT hardening. The interpreter
passes all tests. The JITs do too, with one exception, see NOTE below.
The result for the x86_64 JIT is summarized below.
test_bpf: Summary: 577 PASSED, 0 FAILED, [565/565 JIT'ed]
test_bpf: test_tail_calls: Summary: 6 PASSED, 1 FAILED, [7/7 JIT'ed]
I have inserted the new tests in the location where related tests are run,
rather than putting them at the end. I have also tried to use the same
description style as the surrounding tests. Below is a summary of the
new tests.
* Operations not previously covered
JMP32, ALU32 ARSH, remaining ATOMIC operations including
XCHG and CMPXCHG.
* ALU operations with edge cases
32-bit JITs implement ALU64 operations with two 32-bit registers per
operand. Even "trivial" operations like bit shifts are non-trivial to
implement. Test different input values that may trigger different JIT
code paths. JITs may also implement BPF_K operations differently
depending on if the immediate fits the corresponding field width of the
native CPU instruction or not, so test that too.
* Word order in load/store
The word order should follow endianness. Test that DW load/store
operations result in the expected word order in memory.
* 32-bit eBPF argument zero extension
On a 32-bit JIT the eBPF argument is a 32-bit pointer. If passed in
a CPU register only one register in the mapped pair contains valid
data. Verify that value is properly zero-extended.
* Long conditional jumps
Test to trigger the relative-to-absolute branch conversion in MIPS JITs,
when the PC-relative offset overflows the field width of the MIPS branch
instruction.
* Tail calls
A new test suite to test tail calls. Also test error paths and TCC
limit.
NOTE: There is a minor discrepancy between the interpreter and the
(x86) JITs. With MAX_TAIL_CALL_CNT = 32, the interpreter seems to allow
up to 33 tail calls, whereas the JITs stop at 32. This causes the max TCC
test to fail for the JITs, since I used the interpreter as reference.
Either we change the interpreter behavior, change the JITs, or relax the
test to allow both behaviors.
Let me know what you think.
Cheers,
Johan
Johan Almbladh (14):
bpf/tests: add BPF_JMP32 test cases
bpf/tests: add BPF_MOV tests for zero and sign extension
bpf/tests: fix typos in test case descriptions
bpf/tests: add more tests of ALU32 and ALU64 bitwise operations
bpf/tests: add more ALU32 tests for BPF_LSH/RSH/ARSH
bpf/tests: add more BPF_LSH/RSH/ARSH tests for ALU64
bpf/tests: add more ALU64 BPF_MUL tests
bpf/tests: add tests for ALU operations implemented with function
calls
bpf/tests: add word-order tests for load/store of double words
bpf/tests: add branch conversion JIT test
bpf/tests: add test for 32-bit context pointer argument passing
bpf/tests: add tests for atomic operations
bpf/tests: add tests for BPF_CMPXCHG
bpf/tests: add tail call test suite
lib/test_bpf.c | 2732 +++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 2475 insertions(+), 257 deletions(-)
--
2.25.1
next reply other threads:[~2021-07-26 8:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-26 8:17 Johan Almbladh [this message]
2021-07-26 8:17 ` [RFC PATCH 01/14] bpf/tests: add BPF_JMP32 test cases Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 02/14] bpf/tests: add BPF_MOV tests for zero and sign extension Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 03/14] bpf/tests: fix typos in test case descriptions Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 04/14] bpf/tests: add more tests of ALU32 and ALU64 bitwise operations Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 05/14] bpf/tests: add more ALU32 tests for BPF_LSH/RSH/ARSH Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 06/14] bpf/tests: add more BPF_LSH/RSH/ARSH tests for ALU64 Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 07/14] bpf/tests: add more ALU64 BPF_MUL tests Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 08/14] bpf/tests: add tests for ALU operations implemented with function calls Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 09/14] bpf/tests: add word-order tests for load/store of double words Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 10/14] bpf/tests: add branch conversion JIT test Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 11/14] bpf/tests: add test for 32-bit context pointer argument passing Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 12/14] bpf/tests: add tests for atomic operations Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 13/14] bpf/tests: add tests for BPF_CMPXCHG Johan Almbladh
2021-07-26 8:17 ` [RFC PATCH 14/14] bpf/tests: add tail call test suite Johan Almbladh
2021-07-26 22:53 ` [RFC PATCH 00/14] bpf/tests: Extend the eBPF " Andrii Nakryiko
2021-07-28 8:27 ` Daniel Borkmann
2021-07-28 12:15 ` Johan Almbladh
2021-07-28 16:47 ` [PATCH] bpf: Fix off-by-one in tail call count limiting Johan Almbladh
2021-07-28 19:13 ` Yonghong Song
2021-07-29 21:37 ` Johan Almbladh
2021-07-29 22:29 ` Andrii Nakryiko
2021-07-29 22:48 ` Andrii Nakryiko
2021-08-01 8:37 ` Johan Almbladh
2021-08-02 20:28 ` Andrii Nakryiko
2021-08-05 14:37 ` Johan Almbladh
2021-08-05 22:54 ` Andrii Nakryiko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210726081738.1833704-1-johan.almbladh@anyfinetworks.com \
--to=johan.almbladh@anyfinetworks.com \
--cc=Tony.Ambardar@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=john.fastabend@gmail.com \
--cc=kafai@fb.com \
--cc=kpsingh@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=yhs@fb.com \
--subject='Re: [RFC PATCH 00/14] bpf/tests: Extend the eBPF test suite' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).