ebpf-for-windows/tests/stress
Anurag Saxena 3f5e0ba1ba
Separate out undocked components. (#3055)
* remove not-needed includes

* fix

* fix

* update sample extension

* change include path

* export store APIs from ebpfapi.dll

* fix analyze build

* update dependencies

* add undocked projects

* undock sample_ext driver

* fix build

* more undocking

* fix build

* remove undocked projects from fuzzerdebug

* fix nuget

* remove usersim from export_program_info

* fix configuration manager

* fix tests

* skip building undocked samples for FuzzerDebug builds

* fix build

* try cicd changes

* fix cicd yml

* update export_program_info to not clean up all entries

* code cleanup

* delete global helpers from the store

* code cleanup

* export *delete* store APIs from ebpfapi

* code cleanup

* CR comments

* cr comments

* remove ansi APIs

* CR comments

* cr comments

* fix CI failure

* fix rebase build issues

* change default custom type to bind

* some more fixes

* fix tests

* fix tests

* update expected files

* fix bpf2c tests

* run export_program_info

* fix headers

* CR comments
2023-12-07 21:10:19 +00:00
..
km Separate out undocked components. (#3055) 2023-12-07 21:10:19 +00:00
um Separate out undocked components. (#3055) 2023-12-07 21:10:19 +00:00
ebpf_mt_stress.h enable explicit clean-up prior to process exit (#2782) 2023-08-23 22:13:53 +00:00
ebpf_stress_tests.cpp enable explicit clean-up prior to process exit (#2782) 2023-08-23 22:13:53 +00:00
readme.md Increase MAX_TAIL_CALL_CNT to 33 tail calls (#2826) 2023-09-11 16:55:56 +00:00

readme.md

1.0. ebpf_stress_test_km.exe (test sources in .\km)

This test application provides tests that are meant to be run against the real (kernel mode) eBPF sub-system. This application assumes that the requisite kernel drivers (ebpfcore.sys, netebpfext.sys) are loaded and running.

This application requires the ebpfapi.dll to be present in the DLL load path or in the same directory as this binary.

Test specific command-line options (all optional, defaults used if not specified):

  • -tt=NNNN: Number of test threads to create (Default: hard-coded).
  • -td=NNNN: Test duration in minutes (Default: hard-coded).
  • -vo=<true|false>: Enable verbose output (Default: false).
  • -er=<true|false>: Restart extension (Default: false, where supported).
  • -erd=NNNN: Extension restart delay in milliseconds (Default: hard-coded).

This is a 'Catch2' test application and hence if no test name is provided on the command line, all tests are run in a sequential manner.

This application provides the following tests:

1.1. jit_load_attach_detach_unload_random_v4_test

This test creates threads to randomly load, attach, detach and close JIT'ed ebpf program(s). (Details in code comments.)

Sample commandline invocations:

1.1.1. ebpf_stress_test_km jit_load_attach_detach_unload_random_v4_test

  • Uses default values for all supported options.

1.1.2. ebpf_stress_test_km -tt=32 -td=5 -er=true jit_load_attach_detach_unload_random_v4_test

  • Creates 32 test threads.
  • Runs test for 5 minutes.
  • Extension restart is enabled.

1.2. native_load_attach_detach_unload_random_v4_test

This test is identical to jit_load_attach_detach_unload_random_v4_test except this test loads a native ebpf program (.sys file). The command line options and their interpretation is identical as well.

Sample command line invocations:

1.2.1. ebpf_stress_test_km native_load_attach_detach_unload_random_v4_test

  • Uses default values for all supported options.

1.2.2. ebpf_stress_test_km -tt=32 -td=5 -er=true native_load_attach_detach_unload_random_v4_test

  • Creates 32 test threads.
  • Runs test for 5 minutes.
  • Extension restart is enabled.

1.3. native_unique_load_attach_detach_unload_random_v4_test

This test extends the native_load_attach_detach_unload_random_v4_test to use a unique native ebpf per thread. (The test makes unique copies of the same base native program at runtime). All other behavior is identical.

1.3.1. ebpf_stress_test_km -tt=32 -td=5 -er=true native_unique_load_attach_detach_unload_random_v4_test

  • Creates 32 test threads.
  • Runs test for 5 minutes.
  • Extension restart enabled.

1.4. native_invoke_v4_v6_programs_restart_extension_test

This test loads 2 specific native eBPF programs, each in a dedicated thread and then continues to ensure their invocation while continuously restarting the netebpfext extension.

This test ignores the -tt, -er and -erd commandline parameters.

Sample command line invocations:

1.4.1. ebpf_stress_test_km native_invoke_v4_v6_programs_restart_extension_test

  • Uses default values for all supported options.

1.4.2. ebpf_stress_test_km -td=15 -vo=true native_invoke_v4_v6_programs_restart_extension_test

  • Runs test for 15 minutes.
  • Verbose test trace output enabled.

1.5. sockaddr_invoke_program_test

This test first loads a specific native eBPF program. It then creates the specified # of threads where each thread attempts a TCP 'connect' to the remote endpoint [::1]:<target_port + thread_context.thread_index> continuously in a loop. The test set up ensures that the thread_index passed in each thread_context is unique to that thread.

This causes the invocation of the in-kernel eBPF program which returns some (arbitrary) decision based on the end-point port number.

This test can be run with or without the extension restart option.

Sample command line invocations:

1.5.1. ebpf_stress_test_km sockaddr_invoke_program_test

  • Uses default values for all supported options.

1.5.2. ebpf_stress_test_km -tt=32 -td=15 -vo=true -er=true -erd=250 sockaddr_invoke_program_test

  • Creates 32 test threads.
  • Runs test for 15 minutes.
  • Verbose test trace output enabled.
  • Extension restart enabled.
  • Delay of 250 ms between successive extension restarts.

1.6. bindmonitor_tail_call_invoke_program_test

This test first loads a specific native eBPF program. It then loads all the MAX_TAIL_CALL_CNT tail call programs and updates the program array map. It then creates the specified number of threads where each thread attempts a TCP 'bind' to the same port continuously in a loop. The test setup guarantees that the thread_index passed in each thread_context is unique to that thread, so that each thread gets a unique port (base_port + thread_index).

This causes the invocation of the in-kernel eBPF tail call programs to be executed in sequence. The last tail call program returns a PERMIT verdict.

This test can be run with or without the extension restart option.

Sample command line invocations:

1.6.1. ebpf_stress_test_km bindmonitor_tail_call_invoke_program_test

  • Uses default values for all supported options.

1.6.2. ebpf_stress_test_km -tt=32 -td=15 -vo=true -er=true -erd=250 bindmonitor_tail_call_invoke_program_test

  • Creates 32 test threads.
  • Runs test for 15 minutes.
  • Verbose test trace output enabled.
  • Extension restart enabled.
  • Delay of 250 ms between successive extension restarts.

2.0. ebpf_stress_test_um.exe (test sources in .\um)

This test application provides tests that are meant to be run against the user mode 'mock' of the eBPF sub-system. This application does not require the presence of the eBPF kernel drivers and can be run on the dev machine as well.

This application requires the ebpfapi.dll to be present in the DLL load path or in the same directory as this binary.

Test specific command-line options (all optional, defaults used if not specified):

  • -tp="<program1[,program2]>: programs to load.
  • -tt=NNNN: Number of test threads to create.
  • -td=NNNN: Test run-time in minutes.
  • -vo=<true|false>: Enable verbose output (default: false).
  • -er=<true|false>: Restart extension.
  • -erd=NNNN: Extension restart delay (in milliseconds).

This application provides the following tests:

2.1. load_attach_detach_unload_sequential_test

This test loads, attaches, detaches and closes (in a sequential manner) the specified JIT'ed programs in their respective thread sets. The test currently supprorts the droppacket and bindmonitor_tailcall programs only. Either one or both can be specified, else droppacket is used by default.

Sample command line invocations:

2.1.1. ebpf_stress_test_um load_attach_detach_unload_sequential_test

  • Uses default values for all supported options.

2.1.2. ebpf_stress_test_km -tp="droppacket, bindmonitor_tailcall" -tt=32 -td=30 load_attach_detach_unload_sequential_test

  • Uses droppacket and bindmonitor_tailcall programs.
  • creates 32 test threads.
  • Runs the test for 30 minutes.