blob: d51a3a98412f841ca1f67539f54395c56113fa86 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
{ pkgs, config, lib, ... }:
let
gpuIDs = [
"10de:28e0"
"10de:22be"
];
in
{
virtualisation = {
libvirtd = {
enable = true;
qemu = {
swtpm.enable = true;
ovmf.enable = true;
ovmf.packages = [ pkgs.OVMFFull.fd ];
};
};
spiceUSBRedirection.enable = true;
docker.enable = true;
};
services.spice-vdagentd.enable = true;
programs.virt-manager.enable = true;
systemd.tmpfiles.rules = [ "f /dev/shm/looking-glass 0660 compromyse kvm -" ];
environment.extraOutputsToInstall = [ "dev" ];
environment.systemPackages = [
pkgs.looking-glass-client
pkgs.libvirt
pkgs.virt-viewer
pkgs.guestfs-tools
#pkgs.vagrant
(pkgs.writeShellScriptBin "pin-cpu" ''
if [[ $1 == "" ]]; then
cpus="8-15"
else
cpus=$1
fi
systemctl set-property --runtime -- user.slice AllowedCPUs="$cpus"
systemctl set-property --runtime -- system.slice AllowedCPUs="$cpus"
systemctl set-property --runtime -- init.scope AllowedCPUs="$cpus"
'')
(pkgs.writeShellScriptBin "unpin-cpu" ''
systemctl set-property --runtime -- user.slice AllowedCPUs=""
systemctl set-property --runtime -- system.slice AllowedCPUs=""
systemctl set-property --runtime -- init.scope AllowedCPUs=""
'')
(pkgs.writeShellScriptBin "vfio-bind" ''
set -xe
sudo modprobe -r nvidia_drm nvidia_modeset nvidia_uvm i2c_nvidia_gpu nvidia
sudo modprobe vfio
sudo modprobe vfio_iommu_type1
sudo modprobe vfio_pci
systemctl --user -M compromyse@ stop pipewire.service pipewire.socket
sudo virsh nodedev-detach pci_0000_01_00_0
sudo virsh nodedev-detach pci_0000_01_00_1
systemctl --user -M compromyse@ restart pipewire.service pipewire.socket
set +xe
'')
(pkgs.writeShellScriptBin "vfio-unbind" ''
set -xe
systemctl --user -M compromyse@ stop pipewire.service pipewire.socket
sudo virsh nodedev-reattach pci_0000_01_00_0
sudo virsh nodedev-reattach pci_0000_01_00_1
systemctl --user -M compromyse@ restart pipewire.service pipewire.socket
sudo modprobe -r vfio_pci
sudo modprobe -r vfio_iommu_type1
sudo modprobe -r vfio
sudo modprobe nvidia_drm nvidia_modeset nvidia_uvm i2c_nvidia_gpu nvidia
set +xe
'')
];
boot = {
initrd.kernelModules = [
"vfio_pci"
"vfio"
"vfio_iommu_type1"
];
kernelParams = [
"modprobe.blacklist=nvidia,nvidia_modeset,nvidia_uvm,nvidia_drm"
"skippatcheck"
"pci_acs_override=downstream,multifunction"
("vfio-pci.ids=" + lib.concatStringsSep "," gpuIDs)
];
};
boot.extraModprobeConfig = ''
options vfio-pci ids=${lib.concatStringsSep "," gpuIDs}
'';
# Use the custom kernel package set
boot.kernelPackages = pkgs.linuxPackages_xanmod;
# boot.kernelPackages = pkgs.linuxPackages_zen;
# boot.kernelPatches = [
# {
# # https://github.com/Kinsteen/win10-gpu-passthrough/blob/main/pat_patch.diff
# name = "disable-pat-check";
# patch = ../dist/disable-pat-check.patch;
# }
# {
# # https://aur.archlinux.org/cgit/aur.git/tree/1001-6.8.0-add-acs-overrides.patch?h=linux-vfio
# name = "acso";
# patch = ../dist/acso.patch;
# }
# ];
}
|