Всем привет! Вот обещанный пост по KVM+pci-e passthrough + steamlink.
Итак, начнем. Дома у меня уже лет так 10 живет сервер, живет себе, раздает интернет, качает торрнеты, файлопомойка на нем, еще по мелочи что-то. Сделано все было на Gentoo, ну и так до сих пор на ней. Менялось железо (основной упор на mini-itx + тихие кулеры).
Остальное железо дома - это айпад, рабочий ноутбук на дебиане, айфон, андроид телефон, андроид(minix neo +KODI) для телевизора, пара одноплатных пк (pi3 + odroid c2) и достаточно приличный ПК с виндой(честно приобретенной, если что) для игор. В какой то момент я с семьей переехал и стало понятно, что придется пожертвовать размерами моего рабочего стола и места для нормального пк не будет, увы. и я стал посматривать на всякие вещи для ускоренной графики на тонких клиентах.
Сразуже мне попался вариант на VirtualGL+ tigerVNC, но не проканало, поскольку пришлось бы использовать решения на wine и прочий playonlinux, который работает не очень, во всяком случае у меня на не запустился Origin.
Следущее решение которое я нашел - Steamlink, если кратко -то это вроде бы решение с ARM камнем и ffmpeg с короткими буферами. для моих задач подошел отлично, но куда же девать сам ПК? так я и пришел к идее запихнуть винду в KVM виртуалку и дать ей видеокарту. Стимлинк я притащил с ибея, через посредников, обошелся он мне в 5500р, в том году еще не продавался официально, сейчас уже да, но цены в наших магазинах -неадекват.
Сразу скажу, что такое требует некоего специфичного железа, т.е. мать и проц должны быть интел и уметь vt-d/vt-x и желательно NVIDIA. Про АМД - вроде как тоже можно, но все неоднозначно, ну и был изначально набор именно Intel+Nvidia.
Сейчас конфиг такой:
mobo: asus P8Q77–M2
i7 3770
16gb ram
2x2tb wd
intel 240ssd+bestbuy 240ssd
seagate 500gb
3tb wd green,
Корпус termaltake core v21(влезает 3 диска по 3.5 и 3 диска по 2.5 и он mATX, есть крепеж для СВО)
видюха gigabyte 650ti(тоже поменяю, когда-нибудь на 1060, эхх)
Охлаждение - смесь из noctua +scythe
сетевушка вторая на пси–е. апц упс, точка доступа для вайфая RT–N66U.
Железо - собирал несколько месяцев по авито, постепенно набрал нужный набор.
Как все устроено:
гипервизор proxmox 4.4+ пара патчей с их форума (девелоперская репа)
стартует с 500 гигового винта (потом будет поменян на что то, вернее весь этот зоопарк из ссд поменяю на большой ссд), грузится проксмокс, внутри 2 машины:
1. гента(та самая, которая была), 2физ ядра, 4 гигапамяти, 240 ссд, виртио, mdraid1–2x2tb+luks, 3tb wd backup, машина ничего не делает там особо такого, ну пара проектов по работе, коммунигейт, заббикс, овпн, самба, трансмишшн, seafile, plex, бекапится через bareos, еще пара вещей по мелочи типа раздавания инторнетов. работает в kvm (пока поленился все это перетаскивать в lxc)
2. вин10, 5 ядер, 10 гб оперативки, ссд на 240, kvm, vfio pcie–passhrough, tianocore ovmf uefi bios (без него не заводился проброс видюхи, ну и вин10 же).
ну вин10 стартует, по ац вайфаю стимлинк к ней целяется и можно погонять, например, в stellaris. но по вайфаю есть лаг, так что гораздо лучше проводом. Внутри Стимлинка есть VirtualHere и всякие юсб девайсы типа моего старинного razer imperator и прочих вебкамер успешно попадают в вин машину. Так же мать умеет в AMT+ tty на физ порту, если я совсем что то упорю(АМТ работает с процами БЕЗ литеры К, обратите внимание)
3. Еще есть LXC контейнер для всякого баловства.
Почему не сделал гипервизор из генты?
Ну затеял я все собирать в 2015 году, тогда для маскировки виртуализации от драйвера нвидии требовалось патчить либвирт,а мне было лень и на форуме проксмокс достаточно оперативно ответили девелоперы, так что я остановлся на проксмоксе.
Как собирать и что почитать
1. Вики проксмокса
2. Архиполезный ресурс по vfio -http://vfio.блогспот__ru
3. Ошибка 43 и как с этим жить
4. Как победить отвал звука по HDMI в госте (это если вы хотите например телевизор физически подрубить) - -http://vfio.блогспот__ru/2014/09/vfio-interrupts-and-how-to-coax-windows.html
(блогспот нелья, увы)
Собирать ставить просто:
берем проксмокс свежий (там скорее всего поправлен тот косяк что вызывал ошибку 43, если нет - курим форумы.
Читаем вики, там подробно все как настраивать.
Обязательно tianocore uefi,
конфиг для виртуалки вот тут мой
bios: ovmf
boot: c
bootdisk: virtio0
cores: 2
hostpci0: 01:00,pcie=1,x-vga=on
ide0: iso1:iso/virtio-win-0.1.112.iso,media=cdrom,size=55592K
machine: q35
memory: 4096
name: win1
net0: e1000=32:33:62:38:63:35,bridge=vmbr0
numa: 0
ostype: win8
scsihw: virtio-scsi-pci
smbios1: uuid=6b380506-55b3-4c7e-a4cb-caacded045fe
sockets: 1
usb0: host=3-1
usb1: host=1-4
virtio0: /dev/disk/by-id/my-ssd-serial
Внимание на то, что нельзя вставлять QXL видеокарту (это приведет к ошибке 43), и пробросу целиком диска через /dev/disk/by-id , без нее - плохо почему-то перезагружается гость, уж не знаю почему, Все остальное - бриджи, проброс юсб -стандартное.
Немного про ошибку 43 - если кратко фирма нвидия -жмоты, на консьюмер сериях видеокарт драйвер определяет что он запущен в вирт машине и принудительно выключается(не устраивает - покупайте GRID), суть манипуляций - прячем hv-vendor-id и шерсть становится густой и шелковистой (не навсех версиях либвирта оно норм работает, читайте маны и ченджлоги).
Еще косяк со стимлинком - отваливается трансляция если выскакивает виндовый UAC и пользователь должен быть залогинен, иначе естственно, не стартует серверная часть Steam (т.е. сам энкодер это не демон)
Отдельно про IOMMU изоляцию - на обычных матерях возможны некие танцы в бубнами, и пробрасываться будет только одно устройство, если нужно больше пробросов богу пробросов - покупайте ксеоны, увы.
Была идея еще заюзать intel HD для Коди - но увы, нет. vGPU (т.е. разделение ресурсов гпу для гостей) только на свежих поколениях. вроде как QEMU 2.7 уже можно.
По времени все вместе заняло где то 3 мес с покупкой железок, сама установка-настройка-пляска с бубном - пару недель неспешного ковыряния по вечерам.
В планах таки перейти на moonlight+odroid c2, может к весне.
Надеюсь, это будет кому-то полезным. Спрашивайте вопросы.