Как я запилил виртуализацию

Всем привет! Вот обещанный пост по 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.

Как я запилил виртуализацию Proxmox, Pci-e passthrough, Steamlink, Длиннопост

Сейчас конфиг такой:

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, может к весне.

Надеюсь, это будет кому-то полезным. Спрашивайте вопросы.

GNU/Linux

1K поста15.5K подписчик

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий

Пишешь

желательно NVIDIA

и треть мануала о том, как обойти ошибку 43. С амд картами то таких проблем и в помине нет, хехе.

Она, кстати, раньше не вылазила по крайней мере с -vga std, а теперь, видать, зеленые устранили этот досадный "недостаток", теперь мышь/клавиатура с хоста не захватить никак.

раскрыть ветку (33)
3
Автор поста оценил этот комментарий
я не люблю видеокарты фирмы АТИ еще со времен майнинга на ГПУ. Ну вот такое у меня предубеждение(на мой взгляд кривизна дров АТИ превышает кривизну дров Нвидии, да и была карта нвидии изначально). Холивор что лучше -не имеет смысла. Мышь-клава ок захватывается, стандартными средствами (со стимлинком не особо нужно, но первое время это все было подрублено к телевизору с юсб клавой и мышой)
раскрыть ветку (32)
2
Автор поста оценил этот комментарий

мне холиворить без надобности, просто забавно слышать, что мол де рекомендуется интел+нвидиа, когда у интел половина камней в IOMMU не могут, а нвидиа так вообще палки в колеса вставляет в дровах.

раскрыть ветку (31)
Автор поста оценил этот комментарий
Та впизду эту нвидию, чесн слово. На слушался таких вот советчиков, купил на свою голову. 2 дня осилял qemu и проброс и ведь все вышло. Вывод идёт на зеленую видяшку, только вот разрешение 800x600 и дрова не ставятся, kvm=off,hv_* все выставлены, cpu host. Оказалось что ? Именно, 43 во всей красе. 20к в просто помойку с учётом того, что пк спецом под квм собирал и видяха для проброса была куплена.
раскрыть ветку (30)
Автор поста оценил этот комментарий

Не, у меня 750Ti, дрова встали.


Цимес в том, что сначала ошибка 43 устранялась отключением расширений hv, потом понадобилось kvm=off, теперь дрова, очевидно, уже проверяют наличие -vga (надо указывать -vga none).

При этом на все распросы нвидиа прикидывается шлангом, и утверждает, что это якобы череда случайных багов.


Вопрос в том, что они придумают завтра, чтобы затруднить проброс.

раскрыть ветку (14)
Автор поста оценил этот комментарий

У тебя сейчас как, я понимаю - cpu host,kvm=off и все ? vga none стоит, уберу тогда hv. если не сложно, можешь вообще конфиг дать свой ?

раскрыть ветку (12)
1
Автор поста оценил этот комментарий

да не сложно. он не идеальный, конечно, это по быстрому набросал, надо бы -hda на virtio поменять, да все это на uefi перевести, но да в баню))


#!/bin/bash
export QEMU_AUDIO_DRV=alsa QEMU_AUDIO_TIMER_PERIOD=0
MISC="
-name win10
-machine q35,accel=kvm
-bios /home/alex/bios.bin-1.10.0
-cpu host,kvm=off
-m 3072
-realtime mlock=off
-smp 6,sockets=1,cores=6,threads=1
-no-user-config
-nodefaults
-rtc base=localtime,clock=host
-boot menu=on,strict=on"

MONITOR="
-monitor stdio
-vga none"

STORAGE="
-hda /home/alex/ssd1/Win7.img"
DEVICES="
-device vfio-pci,host=06:00.0,id=hostdev0,multifunction=on,x-vga=on
-device vfio-pci,host=06:00.1,id=hostdev1
-device virtio-balloon-pci,id=balloon0
-soundhw ac97
-usb
-device usb-host,hostbus=5,hostaddr=2"

echo "$MISC $MONITOR $STORAGE $DEVICES"
qemu-system-x86_64 $MISC $MONITOR $DEVICES -net nic -net user $STORAGE
раскрыть ветку (2)
Автор поста оценил этот комментарий
баллун вроде не нужен, я даже где то читал что мешает.
раскрыть ветку (1)
Автор поста оценил этот комментарий

да, бесполезная херня, никак не мог заставить его работать по-человечески, просто со старого конфига остался.

Автор поста оценил этот комментарий
я в посте конфиг свой давал.
раскрыть ветку (8)
Автор поста оценил этот комментарий

мне нужно что-то наподобие

sudo qemu-system-x86_64 -enable-kvm -M q35 -m 4096 -cpu host \

-smp 4,sockets=1,cores=4,threads=1 \

-bios /usr/share/qemu/bios.bin -vga none \

-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \

-device vfio-pci,host=02:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \

-device vfio-pci,host=02:00.1,bus=root.1,addr=00.1 \

-drive file=/home/puget/windows#.img,id=disk,format=raw -device ide-hd,bus=ide.0,drive=disk \

-drive file=/home/puget/Downloads/Windows.iso,id=isocd -device ide-cd,bus=ide.1,drive=isocd \

-boot menu=on



а не то что в посте, по такому конфигу мне проще ориентироваться в разы.

раскрыть ветку (7)
Автор поста оценил этот комментарий
биос ты делаешь tianocore или seabios?
device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 это что?
диски сеть на virtio хорошо бы.
qemu какой версии?
раскрыть ветку (6)
Автор поста оценил этот комментарий

это не мой конфиг, просто быстрый пример из интернета.

sudo qemu-system-x86_64 \

-enable-kvm -machine pc-q35-2.7,accel=kvm \

-cpu host,kvm=off \

-smp 4,sockets=1,cores=4,threads=1 \

-m 7096 \

-drive if=pflash,format=raw,readonly,file=/home/romche/Downloads/OVMF-pure-efi.fd \

-drive if=pflash,format=raw,file=/home/romche/Downloads/OVMF_VARS-pure-efi.fd \

-device vfio-pci,host=01:00.0,multifunction=on \

-device vfio-pci,host=01:00.1\

-vga qxl \

-no-user-config \

-nodefaults \

-usb -usbdevice host:04f3:0103 -usbdevice host:09da:9090 \


вот первая половина моего, сейчас гуглю про virtio и как его сделать. qxl добавил чтоб настроить диски и инет, потом уберу.

раскрыть ветку (5)
1
Автор поста оценил этот комментарий
версия qemu тоже по ходу важно у меня qemu 2.6.1, на днях обновлюсь до 2.7

конфиг у меня такой:

agent: 1

bios: ovmf

boot: c

bootdisk: virtio0

cores: 5

cpu: host

hostpci0: 01:00.0,pcie=1,x-vga=on

hostpci1: 01:00.1

machine: q35

memory: 8192

name: win1

net0: virtio=32:33:62:38:43:38,bridge=vmbr0

numa: 0

onboot: 1

ostype: win8

scsihw: virtio-scsi-pci

smbios1: uuid=6b380506-55b3-4c7e-a4cb-caacded045fe

sockets: 1

usb0: host=046d:c52b

usb1: host=05ac:12a4

usb3: host=152d:2338

virtio0: /dev/disk/by-id/ata-INTEL_SSDSC2BW240A4_BTDA333501KL2403GN


вот тут ветку форума, но оно для проксмокса,

https://forum.proxmox.com/threads/code-43-nvidia-driver-erro...

и еще общий фак

vfio.блогспот_ру/2014/08/vfiovga-faq.html

раскрыть ветку (4)
Автор поста оценил этот комментарий
у меня уже год живет и обновляется, но у меня пока 650ti.
Автор поста оценил этот комментарий
проброс работает, вопрос в масировке гостя. читай инфу как, я ссылки дал.
раскрыть ветку (14)
1
Автор поста оценил этот комментарий
А я именно это и написал. А ещё написал, что нужное для маскировки выставил. На сайте минта советуют ещё дрова в госте пропатчить, этого ещё не пробовал. 5 часов уже сегодня угробил на настройку, вчера ещё около 7.
Так вот вопрос, чем же нвидия лучше для проброса-то ?
раскрыть ветку (13)
1
Автор поста оценил этот комментарий
показывай конфиг.
раскрыть ветку (12)
1
Автор поста оценил этот комментарий

Ты уж прости за такую упертость, но я не просил делать за меня. В прошлый раз попросил, получил тишину в ответ, сам  в итоге сделал. Настрою и сейчас.

Мне нужен ответ на простой вопрос. Ведь все начиналось именно с обсуждения 43 и того что на амд этого нет.

раскрыть ветку (11)
1
Автор поста оценил этот комментарий
в моем случае амд просто не завелась, я уж не знаю почему. + общий негативный опыт конкретно с их гпу.
Автор поста оценил этот комментарий

Romchexd, я не понимаю твою упертость)

Информации по поводу ошибки 43 полным полно, ты явно что-то не то и не так делаешь.

Я делал проброс на vm esxi, там тоже все работало, стоило дописать только пару строчек

раскрыть ветку (9)
Автор поста оценил этот комментарий
no offence, но увы, не все сразу заводится. если ему удобнее делать на ати - отлично.
Автор поста оценил этот комментарий
Я не спорю с тем, что это не лечится или с тем, что информации много. Скажу даже больше, её настолько много, что все потраченое время - это перебор вычитаных пар строчек, во всех возможных комбинациях. Тут нет хейта к кому либо, просто констатации факта.
раскрыть ветку (7)
Автор поста оценил этот комментарий
так может у тебя версия qemu неправильная? или например, ты забыл отключить qxl-vnc. я тоже 3 вечера убил именно на этот косяк
раскрыть ветку (2)
Автор поста оценил этот комментарий

По факту нужно скрыть факт виртуализации, что вы пытаетесь еще делать, я не представляю.

Обычно достаточно пары строчек в конфигурации вирт машины, и все, больше от вас ничего не требуется, остается только установить драйвера и в путь.

Просто вы с самого начала выбираете не тот путь, и пытаетесь сами с нуля, на не предназначенной для этого системе, что-то исполнять, не надо так)

раскрыть ветку (3)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку