News Linux Kernel 6.12: Echtzeit-Kernel im Hauptzweig und eine Scheduler-Wahl

@D.S.i.u.S.

BORE ist ein Aufsatz auf EEVDF oder CFS (beides "faire" Scheduler) - welches Latenz-kritische Prozesse "boosted"

Beschreibung:
https://github.com/firelzrd/bore-scheduler

LAVD ist ein Scheduler, der von Grund auf auf Latenz und "burst" (also in dem Prinzip bzw. Philosophie mit BORE ähnlich - wobei BORE nur eine Erweiterung vom Kern CPU Scheduler ist - mit all den Vor- und Nachteilen ["bloat"])

Beschreibung:
https://lib.rs/crates/scx_lavd
https://github.com/sched-ext/scx/blob/main/scheds/rust/scx_lavd/src/bpf/main.bpf.c

wenn ich mich richtig erinner bevorzugt lavd auch noch grafische Prozesse (X, X-server, etc.) - basierend auf einem commit von vor einigen Wochen.

Hab mich mit dem Code der Scheduler nicht beschäftigt, kann also nicht genau sagen, wie sie sich so im Prinzip im Detail unterscheiden.

tl;dr:

EEVDF, CFS - sind "faire" Scheduler - BORE macht das ganze etwas unfairer

LAVD ist weniger fair, damit kann es Prozessen, die im Vordergrund laufen und Latenz-kritisch sind genug Resourcen permanent zuweisen (deadline, "soft-RT"), dass man z.B. Gamen und noch im Hintergrund kompilieren oder was anderes resourcen-intensives laufen lassen kann
 
foofoobar schrieb:
Klingt alles sehr diffus und nach anekdotischer Evidenz.
hab auch nichts anderes behauptet, das sind nur meine (gut 10 jahre alten) persönlichen erfahrungen, keine wissenschaftlichen studien.
Hätte ich selbst Photoshop würde ich ja schnell testen ob das immer noch bei max 25% last auf einem 4-kerner hängt und ruckelt sobald man es auf 1/2/3 kerne pinnt und wenn ja dir ein video davon machen :)
 
Kann es sein, dass der Kernel 6.12 mit nvidia open zurzeit nicht funktioniert? Da der output_poll_changed-Hook in Kernel 6.12 entfernt wurde, versucht der Nvidia Treiber, auf eine nicht mehr vorhandene Struktur zuzugreifen, was zu Kompilierungsfehlern führt.

Bei mir steht:
building the system configuration...

error: builder for '/nix/store/7hdg3abrdfq7wyndcgmkdsasfnnpvf0a-nvidia-x11-560.35.03-6.12.0.drv' failed with exit code 2;

last 25 log lines: ^~~~~~~~~~~~~~~~~~~~~
/build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-modeset/nvidia-modeset-linux.c:1202:5: warning: no previous prototype for 'nvkms_ioctl_common' [8;;https://gcc.gnu.org/onlinedocs/gcc/...ex-Wmissing-prototypes-Wmissing-prototypes8;;]
1202 | int nvkms_ioctl_common
| ^~~~~~~~~~~~~~~~~~
CC [M] /build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-drm/nvidia-drm-fb.o
CC [M] /build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-drm/nvidia-drm-modeset.o
CC [M] /build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-drm/nvidia-drm-fence.o
CC [M] /build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-drm/nvidia-drm-helper.o
/build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-drm/nvidia-drm-drv.c:207:6: error: 'const struct drm_mode_config_funcs' has no member named 'output_poll_changed'
207 | .output_poll_changed = nv_drm_output_poll_changed,
| ^~~~~~~~~~~~~~~~~~~
/build/NVIDIA-Linux-x86_64-560.35.03/kernel/nvidia-drm/nvidia-drm-drv.c:207:28: error: initialization of 'struct drm_atomic_state * ()(struct drm_device *)' from incompatible pointer type 'void ()(struct drm_device *)' [8;;https://gcc.gnu.org/onlinedocs/gcc/...er-types-Werror=incompatible-pointer-types8;;]
207 | .output_poll_changed = nv_drm_output_poll_changed,
Benötigt der Treiber eine Aktualisierung, um mit der neuen API zu arbeiten? Mit Beta Treiber 565.57.01 dasselbe Problem.
https://github.com/CachyOS/CachyOS-PKGBUILDS/issues/417

Ich versuche cachyOS Kernel 6.12 zu installieren, um es dann mit 6.11.5-zen und 6.11.7-xanmod in Spielen vergleichen zu können, aber leider verträgt sich Nvidia open Treiber nicht mit Kernel 6.12
 
Zuletzt bearbeitet:
wechseler schrieb:
Fallen für mich aber nicht unter Endanwender.

Das sind Entwickler und keine Endanwender.
Bin kein Entwickler und habe auch schon Custom ROMs und Custom Kernel mit verschiedenen Schedulern verwendet.. Und dein erster Satz ist auch Quatsch..
 
Wie es aussieht, muss Nvidia einen neuen Treiber für Kernel 6.12 veröffentlichen.
Ich versuche es mit nvidia patch in NixOS
https://github.com/NixOS/nixpkgs/issues/353636
Sollte es nicht funktionieren, dann warte ich bis Nvidia den Patch in Treiber integriert hat. Es ist seit über 3 Wochen bekannt und Nvidia hat immer noch keinen Treiber für Kernel 6.12
 
@Sensei21
Bei mir funktioniert cachyos kernel 6.12.1 mit nvidia.patch und Beta Treiber 565.57.01
In configuration.nix steht:
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = false;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
version = "565.57.01";
sha256_64bit = "sha256-buvpTlheOF6IBPWnQVLfQUiHv4GcwhvZW3Ks0PsYLHo=";
sha256_aarch64 = "sha256-aDVc3sNTG4O3y+vKW87mw+i9AqXCY29GVqEIUlsvYfE=";
openSha256 = "sha256-/tM3n9huz1MTE6KKtTCBglBMBGGL/GOHi5ZSUag4zXA=";
settingsSha256 = "sha256-H7uEe34LdmUFcMcS6bz7sbpYhg9zPCb/5AmZZFTx1QA=";
persistencedSha256 = "sha256-hdszsACWNqkCh8G4VBNitDT85gk9gJe1BlQ8LdrYIkg=";
patchesOpen = [
./nvidia.patch
];
};
};
diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c
index 8cb94219..27b3cbd9 100644
--- a/kernel-open/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c
@@ -100,6 +100,11 @@
#include <drm/drm_atomic_helper.h>
#endif

+#include <linux/version.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+#include <drm/drm_client.h>
+#endif
+
static int nv_drm_revoke_modeset_permission(struct drm_device *dev,
struct drm_file *filep,
NvU32 dpyId);
@@ -147,7 +152,7 @@

#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)

-#if defined(NV_DRM_OUTPUT_POLL_CHANGED_PRESENT)
+
static void nv_drm_output_poll_changed(struct drm_device *dev)
{
struct drm_connector *connector = NULL;
@@ -191,7 +196,7 @@
nv_drm_connector_list_iter_end(&conn_iter);
#endif
}
-#endif /* NV_DRM_OUTPUT_POLL_CHANGED_PRESENT */
+

static struct drm_framebuffer *nv_drm_framebuffer_create(
struct drm_device *dev,
@@ -229,9 +234,7 @@
.atomic_check = nv_drm_atomic_check,
.atomic_commit = nv_drm_atomic_commit,

  • #if defined(NV_DRM_OUTPUT_POLL_CHANGED_PRESENT)
  • .output_poll_changed = nv_drm_output_poll_changed,
  • #endif
+
};

static void nv_drm_event_callback(const struct NvKmsKapiEvent *event)
@@ -1711,6 +1714,10 @@
.read = drm_read,

.llseek = noop_llseek,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
  • // Rel. commit. "fs: move FMODE_UNSIGNED_OFFSET to fop_flags" (Christian Brauner, 9 Aug 2024)
  • .fop_flags = FOP_UNSIGNED_OFFSET,
+#endif
};

static const struct drm_ioctl_desc nv_drm_ioctls[] = {
@@ -1939,6 +1946,20 @@
}


+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+static int hotplug_helper_client_hotplug(struct drm_client_dev *client)
+{
  • nv_drm_output_poll_changed(client->dev);
  • return 0;
+}
+
+static const struct drm_client_funcs nv_hotplug_helper_client_funcs = {
  • .owner = THIS_MODULE,
  • .hotplug = hotplug_helper_client_hotplug,
+};
+#endif
+
+

/*
* Helper function for allocate/register DRM device for given NVIDIA GPU ID.
@@ -2029,8 +2050,27 @@
nv_dev->next = dev_list;
dev_list = nv_dev;

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
  • /* Register a DRM client for receiving hotplug events */
  • struct drm_client_dev *client = kzalloc(sizeof(*client), GFP_KERNEL);
  • if (client == NULL || drm_client_init(dev, client,
  • "nv-hotplug-helper", &nv_hotplug_helper_client_funcs)) {
  • printk(KERN_WARNING "Failed to initialize the nv-hotplug-helper DRM client.");
  • goto failed_drm_client_init;
  • }
+
  • drm_client_register(client);
  • pr_info("Registered the nv-hotplug-helper DRM client.");
+#endif
+
return; /* Success */

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+failed_drm_client_init:
+
+ kfree(client);
+#endif
+
failed_drm_register:

nv_drm_dev_free(dev);

Wünschenswert wäre jedoch, wenn der Treiber in Verbindung mit Kernel 6.12 ohne patch funktionieren würde.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Sensei21
D.S.i.u.S. schrieb:
@Sensei21

Wünschenswert wäre jedoch, wenn der Treiber in Verbindung mit Kernel 6.12 ohne patch funktionieren würde.
Blame NV.

Blobs sind halt nur ein second class citizen unter Linux.
 
  • Gefällt mir
Reaktionen: Piktogramm
Zurück
Oben