LINUX.ORG.RU

Steam vs Linux

 , , , ,


0

1

Собственно, поставил Steam-клиент на Linux (у меня Arch), а он, падла, грузит ЦП на 60 процентов - каждое ядро!

Запускаю какую-нибудь игру, а FPS ~ 10-15. Я подозреваю, что это из-за того, что Steam не поддерживает Arch, несмотря на поддержку Стима самим Арчем.

Почему? Для теста я установил на Дебиане Steam: всё работает «на ура».

У кого какие мысли по поводу этого? Просто не хочется ребутиться в Дебиан, чтобы пользоваться Стимом.

Железо: CPU - Intel Core i5-3570k, 3400Mhz Videocard - Gigabyte PCI-E (nVidia GV-N760OC-2GD) GeForce GTX 760, 2048Mb RAM - 8 gb

System - Arch Linux + OpenBox WM

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

Профиль сносить пробовал?

roman77 ★★★★★
()

ребутиться в Дебиан, чтобы пользоваться Стимом

Дожили.

Может это?

ziemin ★★
()

Steam - забагованный, глючный, тормозной кусок говна даже на оффтопике.

Xegai ★★
()

Да у меня вроде нормально работает. Сильно тормозит при закачке игр и их обновлений только.

vazgen05 ★★★
()
Ответ на: комментарий от gavlig

Железо:
CPU - Intel Core i5-3570k, 3400Mhz
Videocard - Gigabyte PCI-E (nVidia GV-N760OC-2GD) GeForce GTX 760, 2048Mb
RAM - 8 gb

System - Arch Linux + OpenBox WM

Deleted
()
Ответ на: комментарий от Deleted

Очень странно. Запусти стим из консоли и посмотри, что на выхлопе, когда проц нагружен. Ты уверен, что это именно стим ест проц?

gavlig ★★★
()
Ответ на: комментарий от NeverLoved

Причём здесь стим комьюнити? При запуске дрм-нутых бинарников дёргается скрипт, который подгружает окружение. Я глубоко не копал, но так это выглядит из консоли.

gavlig ★★★
()
Ответ на: комментарий от gavlig

о, щи, попутал steamruntime и steamoverlay. рантайм это либы, поставляемые со стимом для запуска игоря. в генте для этой штуки есть специальный юз, если его выключить - стим будет юзать системные библиотеки (sdl'и всякие etc).

NeverLoved ★★★★★
()
Ответ на: комментарий от gavlig

Можно. Гентушники так и делают, у них для этого есть USE-флаг. Пользователи Ubuntu 12.04 тоже отключают за ненадобностью - для компиляции Steam и игр Valve используется пакетная база Ubuntu 12.04. Остальные игры компилируются или там же, или изначально сделаны для совместимости со всеми дситрибутивами Linux (LSB или носят все библиотеки-зависимости с собой). Отключать Steam Runtime вот так:

STEAM_RUNTIME=0 steam

Включать с единицей. Но если Steam при запуске будет сообщать что Steam Runtime не включен, хотя ты включил - смотри /usr/bin/steam. Например в Gentoo именно там прописано то, хочет ли пользователь Steam Runtime.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Всем спасибо, народ!
Всё работает «на ура».
FPS на уровне. При запуске Steam загрузка ЦП до 5, поом стабильно 1-2.

Помогли «танцы с бубном» вокруг Steam Runtime, как советовал gavlig. Ещё, на всякий, отключил «Сообщество Steam в игре».

Выручили.

Deleted
()

Steam vs Linux

Думаю победит Линукс хотя у стима тоже неплохие шансы, в конечном итоге все зависит от оружия на котором будут сражаться.

TDrive ★★★★★
()
Ответ на: комментарий от Deleted

Таки ZenitharChampion посоветовал, не я :). Но главное, что получилось.

gavlig ★★★
()

У меня на Арче стим прекрасно работает. Бывает только не стартует с первого раза, ссылаясь на проблемы соединения с сервером. Зато при повторном запуске соединяется сразу же.

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)
Ответ на: комментарий от Amet13

Linux-версия твоей любимой игры зависит от ядра Linux версии не меньше такой-то, glibc версии не меньше такой-то, а также наборчика системных библиотек. У тебя обязательно должны быть ядро Linux и glibc, а остальное игра может таскать с собой

У ядра и glibc отличная совместимость - то, что было скомпилировано с версиями 5-летней давности, без проблем будет работать сейчас! Поэтому для того чтобы игра заработала у как можно большего числа людей, нужно использовать ядро и glibc как можно старее. Например Linux 2.6.18 и glibc 2.4. Ниже объясню почему именно эти версии. А если используется ядро 3.10 и glibc 2.18, в игру не смогут поиграть большинство линуксоидов. Как минимум полгода.

Немного о моих экспериментах. Я пробовал скомпилировать один и тот же исходный код на двух убунтах, 12.04 и 12.10. Готовый бинарник для 12.04 заработал в 12.10, только понадобилось взять из старой убунты одну системную библиотеку. Бинарник от 12.10 не захотел работать в 12.04 - «хочу новый glibc» и всё тут! Хотя исходный код один и тот же. Вывод: даже если прога не хочет новых фич нового glibc, она всё равно привязывается к той версии, с которой скомпилирована. Применимо ли это правило к ядру? Нет:

$ file /usr/bin/amule
/usr/bin/amule: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, stripped

Мой собственноручно скомпилированный в новой системе Amule последней версии просит минимальную версию ядра Linux 2.6.4. Вывод: если новые фичи нового ядра не используются, прога привязывается к фичам старого ядра.

Мы рассмотрели два важных компонента, теперь посмотрим на третий, зависимости:

$ ldd /usr/bin/amule
        linux-vdso.so.1
        libpthread.so.0 => /lib64/libpthread.so.0
        libdl.so.2 => /lib64/libdl.so.2
        libz.so.1 => /lib64/libz.so.1
        libcryptopp.so.9 => /usr/lib64/libcryptopp.so.9
        libupnp.so.6 => /usr/lib64/libupnp.so.6
        libthreadutil.so.6 => /usr/lib64/libthreadutil.so.6
        libixml.so.2 => /usr/lib64/libixml.so.2
        libwx_gtk2u_adv-2.8.so.0 => /usr/lib64/wx-2.8-stl/libwx_gtk2u_adv-2.8.so.0
        libwx_gtk2u_core-2.8.so.0 => /usr/lib64/wx-2.8-stl/libwx_gtk2u_core-2.8.so.0
        libwx_baseu_net-2.8.so.0 => /usr/lib64/wx-2.8-stl/libwx_baseu_net-2.8.so.0
        libwx_baseu-2.8.so.0 => /usr/lib64/wx-2.8-stl/libwx_baseu-2.8.so.0
        libGeoIP.so.1 => /usr/lib64/libGeoIP.so.1
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6
        libm.so.6 => /lib64/libm.so.6
        libgcc_s.so.1 => /lib64/libgcc_s.so.1
        libc.so.6 => /lib64/libc.so.6
        /lib64/ld-linux-x86-64.so.2
        libgtk-x11-2.0.so.0 => /usr/lib64/libgtk-x11-2.0.so.0
        libgdk-x11-2.0.so.0 => /usr/lib64/libgdk-x11-2.0.so.0
        libatk-1.0.so.0 => /usr/lib64/libatk-1.0.so.0
        libgio-2.0.so.0 => /lib64/libgio-2.0.so.0
        libpangoft2-1.0.so.0 => /usr/lib64/libpangoft2-1.0.so.0
        libgdk_pixbuf-2.0.so.0 => /usr/lib64/libgdk_pixbuf-2.0.so.0
        libpng14.so.14 => /usr/lib64/libpng14.so.14
        libpango-1.0.so.0 => /usr/lib64/libpango-1.0.so.0
        libfreetype.so.6 => /usr/lib64/libfreetype.so.6
        libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1
        libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0
        libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0
        libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0
        librt.so.1 => /lib64/librt.so.1
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0
        libXinerama.so.1 => /usr/lib64/libXinerama.so.1
        libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1
        libSM.so.6 => /usr/lib64/libSM.so.6
        libjpeg.so.62 => /usr/lib64/libjpeg.so.62
        libtiff.so.3 => /usr/lib64/libtiff.so.3
        libpangocairo-1.0.so.0 => /usr/lib64/libpangocairo-1.0.so.0
        libX11.so.6 => /usr/lib64/libX11.so.6
        libXfixes.so.3 => /usr/lib64/libXfixes.so.3
        libcairo.so.2 => /usr/lib64/libcairo.so.2
        libXext.so.6 => /usr/lib64/libXext.so.6
        libXrender.so.1 => /usr/lib64/libXrender.so.1
        libXi.so.6 => /usr/lib64/libXi.so.6
        libXrandr.so.2 => /usr/lib64/libXrandr.so.2
        libXcursor.so.1 => /usr/lib64/libXcursor.so.1
        libXcomposite.so.1 => /usr/lib64/libXcomposite.so.1
        libXdamage.so.1 => /usr/lib64/libXdamage.so.1
        libresolv.so.2 => /lib64/libresolv.so.2
        libselinux.so.1 => /lib64/libselinux.so.1
        libbz2.so.1 => /lib64/libbz2.so.1
        libexpat.so.1 => /lib64/libexpat.so.1
        libpcre.so.0 => /lib64/libpcre.so.0
        libICE.so.6 => /usr/lib64/libICE.so.6
        libuuid.so.1 => /lib64/libuuid.so.1
        libxcb.so.1 => /usr/lib64/libxcb.so.1
        libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0
        libXau.so.6 => /usr/lib64/libXau.so.6

В Linux решена проблема DLL-hell. Вот например библиотека libXau.so.6 в Windows называлась бы libxau.dll. Когда выйдет новая версия со сменой API и ABI, название для Linux будет libXau.so.7, а для Windows libxau.dll. Другая библиотека с тем же названием! Все зависящие от этой библиотеки программы сломаются. Это и есть DLL-hell.

В Linux есть другая проблема. Когда выйдет libXau.so.7, libXau.so.6 удалят из новых версий дистрибутивов Linux. В /usr/lib/ лежат не две и не пять последних версий системных библиотек, а по одной. Потому что Open Source, потому что можно пересобрать. Что делать Closed Source?

1). Таскать вообще все библиотеки-зависимости с собой. Минус: Windows-версия игры занимает 20 Мб, а Linux-версия 200 Мб. Зато заработает у всех пользователей.

2). Статичная линковка. Минус: пройдёт 5 лет, в системных библиотеках исправят много сетевых уязвимостей. А пользователей твоей программы будут взламывать через них, потому что ты уже забудешь про свою программу, а пользователи не смогут её пересобрать.

3). LSB. Первый вариант минус большая подборка библиотек, которые не надо таскать с собой. Именно благодаря LSB Adobe Flash Player распространяется в виде одного 6-мегабайтного libflashplayer.so без пачки зависимостей, а запускается во всех дистрибутивах Linux. Когда я выше говорил про ядро Linux 2.6.18 и glibc 2.4, я имел в виду версии из списка LSB.

Вот например если скомпилировать aMule не по правилам Open Source, а по правилам LSB, то вместо той горы библиотек программа будет таскать с собой только libcryptopp.so.9, libGeoIP.so.1, libixml.so.2, libthreadutil.so.6, libupnp.so.6, libwx_baseu-2.8.so.0, libwx_baseu_net-2.8.so.0, libwx_gtk2u_adv-2.8.so.0, libwx_gtk2u_core-2.8.so.0.

Как работает? LSB базируется на RHEL5. Когда вышел RHEL6, была обеспечена бинарная совместимость с RHEL5 путём сохранения нескольких десятков старых библиотек в /usr/lib. Остальные дистрибутивы Linux также совместимы с RHEL5, например Debian. Я соврал когда сказал что в /usr/lib всегда одна версия одной библиотеки, на самом деле их может быть две: одна старая из списка, и одна новая. Старая для проприетарщины, новая для Open Source. В списке смотреть Generic, пункты Core и Desktop. А если собрать проприетарщину с последней версией библиотеки, как Open Source, то потом библиотеку отовсюду удалят и пользователи будут вынуждены скопировать библиотеку из старой системы.

4). Компилировать в Ubuntu 12.04. Плюс: не такой старый дистрибутив линукса, как RHEL/CentOS 5. Минус: Canonical не обеспечивал совместимости Ubuntu 12.10-13.10 с 12.04, он не Red Hat, он не такой сильный. Steam таскает с собой 292,5 Мб библиотек из Ubuntu 12.04 - это и есть Steam Runtime. Но в Steam пускают не все программы.

ZenitharChampion ★★★★★
()

из-за того, что Steam не поддерживает Arch,
несмотря на поддержку Стима самим Арчем.

Ох, спасибо, поднял настроение с утра.

Deleted
()
Ответ на: комментарий от ZenitharChampion

5). Использование dlopen. Я не знаю как это делается, наверное надо править код. Например Skype работает в системе, где не установлен PulseAudio. Но если PulseAudio установлен, Skype его использует. Уверен что большинство программ с открытым исходным кодом так не могут. Она или будет скомпилирована без поддержки PulseAudio (GStreamer, Aspell, GeoIP, Upnp, Mysql, ffmpeg), или будет скомпилирована с её поддержкой и затем отказываться стартовать в системе без libpulse.so.0.

Ещё пример - SDL с сайта разработчика. Команда «ldd» вообще не выдаёт списка зависимостей. Такой SDL может работать в системе с DirectFB и без иксов, или в иксах в системе без DirectFB.

ZenitharChampion ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.