diff options
author | Sandro <sandro.jaeckel@gmail.com> | 2023-07-18 12:43:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-18 12:43:02 +0200 |
commit | 065fd18e5cb2c569132499da2e60e41e0f046b7a (patch) | |
tree | ec7c07993c18bdd46a353f44c7f97e911c75aac5 | |
parent | f3e2dc94764ea027b2b2d230382664b2aa768890 (diff) | |
parent | 3f751bfdf6d1086317d175b628a17690605cccd1 (diff) |
Merge pull request #240452 from NickCao/bpftune
-rw-r--r-- | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/services/system/bpftune.nix | 22 | ||||
-rw-r--r-- | nixos/tests/all-tests.nix | 1 | ||||
-rw-r--r-- | nixos/tests/bpftune.nix | 20 | ||||
-rw-r--r-- | pkgs/os-specific/linux/bpftune/default.nix | 73 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 2 |
6 files changed, 119 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 03337c5a248b8..5510944b21525 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -1142,6 +1142,7 @@ ./services/security/vaultwarden/default.nix ./services/security/yubikey-agent.nix ./services/system/automatic-timezoned.nix + ./services/system/bpftune.nix ./services/system/cachix-agent/default.nix ./services/system/cachix-watch-store.nix ./services/system/cloud-init.nix diff --git a/nixos/modules/services/system/bpftune.nix b/nixos/modules/services/system/bpftune.nix new file mode 100644 index 0000000000000..d656a19c0ad1e --- /dev/null +++ b/nixos/modules/services/system/bpftune.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.services.bpftune; +in +{ + meta = { + maintainers = with lib.maintainers; [ nickcao ]; + }; + + options = { + services.bpftune = { + enable = lib.mkEnableOption (lib.mdDoc "bpftune BPF driven auto-tuning"); + + package = lib.mkPackageOptionMD pkgs "bpftune" { }; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.packages = [ cfg.package ]; + systemd.services.bpftune.wantedBy = [ "multi-user.target" ]; + }; +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 723b030072e19..5f4aefad890f8 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -138,6 +138,7 @@ in { borgbackup = handleTest ./borgbackup.nix {}; botamusique = handleTest ./botamusique.nix {}; bpf = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bpf.nix {}; + bpftune = handleTest ./bpftune.nix {}; breitbandmessung = handleTest ./breitbandmessung.nix {}; brscan5 = handleTest ./brscan5.nix {}; btrbk = handleTest ./btrbk.nix {}; diff --git a/nixos/tests/bpftune.nix b/nixos/tests/bpftune.nix new file mode 100644 index 0000000000000..c17bbcd110920 --- /dev/null +++ b/nixos/tests/bpftune.nix @@ -0,0 +1,20 @@ +import ./make-test-python.nix ({ lib, pkgs, ... }: { + + name = "bpftune"; + + meta = { + maintainers = with lib.maintainers; [ nickcao ]; + }; + + nodes = { + machine = { pkgs, ... }: { + services.bpftune.enable = true; + }; + }; + + testScript = '' + machine.wait_for_unit("bpftune.service") + machine.wait_for_console_text("bpftune works") + ''; + +}) diff --git a/pkgs/os-specific/linux/bpftune/default.nix b/pkgs/os-specific/linux/bpftune/default.nix new file mode 100644 index 0000000000000..da1bd1b384bbf --- /dev/null +++ b/pkgs/os-specific/linux/bpftune/default.nix @@ -0,0 +1,73 @@ +{ lib +, stdenv +, fetchFromGitHub +, clang +, bpftools +, docutils +, libbpf +, libcap +, libnl +, nixosTests +}: + +stdenv.mkDerivation rec { + pname = "bpftune"; + version = "unstable-2023-07-14"; + + src = fetchFromGitHub { + owner = "oracle-samples"; + repo = "bpftune"; + rev = "66620152bf8c37ab592e9273fe87e567126801c2"; + hash = "sha256-U0O+F1DBF1xiaUKklwpZORBwF1T9wHM0SPQKUNaxKZk="; + }; + + postPatch = '' + # otherwise shrink rpath would drop $out/lib from rpath + substituteInPlace src/Makefile \ + --replace /lib64 /lib \ + --replace /sbin /bin \ + --replace ldconfig true + substituteInPlace src/bpftune.service \ + --replace /usr/sbin/bpftune "$out/bin/bpftune" + substituteInPlace include/bpftune/libbpftune.h \ + --replace /usr/lib64/bpftune/ "$out/lib/bpftune/" \ + --replace /usr/local/lib64/bpftune/ "$out/lib/bpftune/" + ''; + + nativeBuildInputs = [ + clang + bpftools + docutils # rst2man + ]; + + buildInputs = [ + libbpf + libcap + libnl + ]; + + makeFlags = [ + "prefix=${placeholder "out"}" + "confprefix=${placeholder "out"}/etc" + "BPFTUNE_VERSION=${version}" + "BPF_INCLUDE=${lib.getDev libbpf}/include" + "NL_INCLUDE=${lib.getDev libnl}/include/libnl3" + ]; + + hardeningDisable = [ + "stackprotector" + ]; + + passthru.tests = { + inherit (nixosTests) bpftune; + }; + + enableParallelBuilding = true; + + meta = with lib; { + description = "BPF-based auto-tuning of Linux system parameters"; + homepage = "https://github.com/oracle-samples/bpftune"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ nickcao ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b6f334c984ec2..8e683d03c43f5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -27226,6 +27226,8 @@ with pkgs; bpf-linker = callPackage ../development/tools/bpf-linker { }; + bpftune = callPackage ../os-specific/linux/bpftune { }; + bpfmon = callPackage ../os-specific/linux/bpfmon { }; bridge-utils = callPackage ../os-specific/linux/bridge-utils { }; |