172 похожих чатов

Всем привет. Я занимаюсь довольно специфичной задачей, мне нужно запускать

в Kubernetes кластере GUI-приложение с 3D рендерингом через Vulkan (игра CS:GO) в headless-режиме без монитора. На каждой ноде есть GPU, задача в том, чтобы шэрить GPU между несколькими копиями CS:GO.

В общем-то всё работает, GPU внутрь контейнера прокидывается, но есть проблема с производительностью. Если использовать Xvfb, то fps в два раза ниже чем при использовании Xorg с hardware acceleration (nvidia GLX). При этом, насколько я понял, нельзя запустить несколько копий Xorg на одной и той же видеокарте. Есть идея запустить по одному общему Xorg-серверу на хост (ноду), но ещё не разобрался как сделать разные виртуальные дисплеи. В целом этот способ мне меньше нравится чем простой и минималистичный с Xvfb, который запущен в каждом контейнере с CS:GO.

Собственно вопрос, почему fps в Vulkan-приложении зависит от используемого X-сервера? Я так понял что это как-то связано с наличием аппаратного ускорения и GLX, но с xvfb игра и так имеет доступ к GPU через Vulkan API.

14 ответов

5 просмотров

фермерам здесь не место

Думаю, это из-за того, что при выводе на подключенный к ней дисплей видюха ничего отрендеренное никуда перекидывать не должна. А для "вывода" в Xvfb она должна отдавать кадры в оперативную память, где находится фреймбуфер, по PCI. И ещё не факт, что через DMA.

Max-Makarov Автор вопроса

На самом деле, я бы сказал, что идея запустить нормальный Xorg и написать свой композитный wm для перехвата картинки выглядит как-то прямее, чем Xvfb и попытка подключения к GPU через /dev/drm.

Ну, и да. nvidia — это nvidia, рассчитывать на какую-то логику в решэниях на её базе особо не приходится. Только молиться.

Max-Makarov Автор вопроса
Ilya Anfimov
На самом деле, я бы сказал, что идея запустить нор...

Я сделал в итоге общий Xorg сервер, осталось понять как для удобства дебага автоматически раскидывать окна по разным виртуальным рабочим столам, ну и какой минималистичный DE / WM выбрать для этого

Max Makarov
Я сделал в итоге общий Xorg сервер, осталось понят...

Я вообще несколько сомневаюсь, что окна на невидимых виртуальных рабочих столах будут отрисовываться. Впрочем, если вы изнутри Source engine получаете картинку — то, надо думать, картинка будет. (И да, посоветую, пожалуй, fvwm2. Маленький, хорошая расшыряемость. Можно, впрочем, и ion3).

Ilya Anfimov
На самом деле, я бы сказал, что идея запустить нор...

Зачем WM? Можно тогда просто запускать CSGO напрямую в Xorg и захватывать экран ffmpeg-ом.

Max-Makarov Автор вопроса
Alexander
Зачем WM? Можно тогда просто запускать CSGO напрям...

Вообще если бы можно было запустить CS:GO без иксов, я бы с удовольствием это сделал. Поскольку запись производится не захватом экрана, а встроенной в игру тулзой (консольной командой), которая сохраняет фреймы на диск, что позволяет во-первых записывать быстрее реального времени, во-вторых без просадки фпс это делать

Max Makarov
Вообще если бы можно было запустить CS:GO без иксо...

там же есть переменная DISPLAY, выставляй её на контейнер в номер экземпляра контейнера, даже скрипт не нужен, если правильно понял задачу

Max-Makarov Автор вопроса
Ale><ander
там же есть переменная DISPLAY, выставляй её на ко...

а ведь при запуске Xorg тоже нужно указывать конкретный DISPLAY )

Max Makarov
Вообще если бы можно было запустить CS:GO без иксо...

погьди. Какая там команда фреймы на диск пишет? Если ты про .dem-ку, то это не фреймы с картинками. Это скорее дамп сетевого обмена, причем в основном только входящего

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Есть Pipeline для GitLab Runner (executor = "shell") В нём есть: default: before_script: - set -eo pipefail - source "$(~/bin/trdl use werf 2 stable)" - source...
Aleksandr Karabanov
1
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
Карта сайта