LINUX.ORG.RU
ФорумGames

Sacred Gold — крайне низкая производительность

 


0

1

Доброго всем времени суток!

Охватила ностальгия и решил немного побегать в нативную версию того самого Sacred-а. Помню, что году эдак в 2010 нативная линуксовая версия выглядела намного приятнее windows-версии (поддерживалось нативное разрешение), при этом производительность была на высоте. Однако все меняется.

Запустив тот же самый бинарник сегодня с удивлением обнаружил, что уже в меню игра начинает потреблять 80-90% CPU и чувствуются тормоза. На экране выбора класса персонажа чувствуются серьезные тормоза, ну а играть попросту невозможно (меньше одного fps).

В strace кажется подозрительным постоянные попытки игры найти несуществующие файлы:

[pid 32537] open("/mnt/media/games/Sacred/./PAK/NPC_DIALOG_01.TGA", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("/mnt/media/games/Sacred/./pak/npc_dialog_01.tga", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("./PAK/NPC_DIALOG_01.TGA", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("./pak/npc_dialog_01.tga", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("/mnt/media/games/Sacred/./PAK/NPC_DIALOG_01.TGA", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("/mnt/media/games/Sacred/./pak/npc_dialog_01.tga", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("./PAK/NPC_DIALOG_01.TGA", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] open("./pak/npc_dialog_01.tga", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 32537] _llseek(20, 478392320, [478392320], SEEK_SET) = 0
[pid 32537] read(20, "&2v\3223\20\346\354\24d\221\234b\22\326\35\31\233\33\251\277\343\334Q\277\217\v.\271\214\344L"..., 4096) = 4096

Но судя по последнему llseek-у, нужный ресурс запакован в файлы игры и успешно находится, да и картинка рисуется «правильная».

Собственно вопросы:

  1. есть ли у кого success story по работе этой игры на актуальных дистрибутивах Linux?
  2. чем можно померять, на что, собственно, уходит процессорное время? С опенсорсными библиотеками и LD_PRELOAD-ом можно творить настоящие чудеса, но нужно знать, куда копать, а я пока понятия не имею.

Работает без просадок, Debian 9. Мой ldd:

	linux-gate.so.1 (0xf7764000)
	libavformat.so => /home/localuser/Programs/games/sacred/./lib/lib1/libavformat.so (0xf76fd000)
	libavutil.so => /home/localuser/Programs/games/sacred/./lib/lib1/libavutil.so (0xf76f9000)
	libavcodec.so => /home/localuser/Programs/games/sacred/./lib/lib1/libavcodec.so (0xf740a000)
	libcrypto.so.0.9.8 => /home/localuser/Programs/games/sacred/./lib/lib1/libcrypto.so.0.9.8 (0xf72eb000)
	libxml2.so.2 => /home/localuser/Programs/games/sacred/./lib/lib1/libxml2.so.2 (0xf71bd000)
	libfreetype.so.6 => /home/localuser/Programs/games/sacred/./lib/lib1/libfreetype.so.6 (0xf7151000)
	libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf7111000)
	libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf70fc000)
	libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf6fae000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf6e34000)
	libgrapple.so => /home/localuser/Programs/games/sacred/./lib/lib1/libgrapple.so (0xf6dbf000)
	libssl.so.0.9.8 => /home/localuser/Programs/games/sacred/./lib/lib1/libssl.so.0.9.8 (0xf6d85000)
	libgtk-1.2.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libgtk-1.2.so.0 (0xf6c63000)
	libgdk-1.2.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libgdk-1.2.so.0 (0xf6c2f000)
	libgmodule-1.2.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libgmodule-1.2.so.0 (0xf6c2c000)
	libglib-1.2.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libglib-1.2.so.0 (0xf6c09000)
	libjpeg.so.62 => /home/localuser/Programs/games/sacred/./lib/lib1/libjpeg.so.62 (0xf6bea000)
	libopenal.so.1 => /home/localuser/Programs/games/sacred/./lib/lib1/libopenal.so.1 (0xf6a51000)
	libvorbisfile.so.3 => /home/localuser/Programs/games/sacred/./lib/lib1/libvorbisfile.so.3 (0xf6a4a000)
	libvorbis.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libvorbis.so.0 (0xf6a22000)
	libogg.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libogg.so.0 (0xf6a1d000)
	libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf6a02000)
	libm.so.6 => /home/localuser/Programs/games/sacred/./lib/lib1/libm.so.6 (0xf69bb000)
	libSDL-1.2.so.0 => /home/localuser/Programs/games/sacred/./lib/lib1/libSDL-1.2.so.0 (0xf693e000)
	libasound.so.2 => /usr/lib/i386-linux-gnu/libasound.so.2 (0xf681a000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf67fd000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf67f8000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf6641000)
	libgcc_s.so.1 => /home/localuser/Programs/games/sacred/./lib/lib1/libgcc_s.so.1 (0xf6624000)
	libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf65f8000)
	/lib/ld-linux.so.2 (0xf7766000)
	librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf65ef000)
	libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf65e9000)
	libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf65e2000)
	libbsd.so.0 => /lib/i386-linux-gnu/libbsd.so.0 (0xf65c6000)

P.S. У первого Sacred разрешение экрана ограничено 1024x768, больше только через гряные полурабочие хаки. Если это не так, то буду рад услышать как выставить нормальное разрешение на нативке.

P.P.S. А ещё он захватывает весь звук, прям как в старые добрые времена.

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

ох сколько ты себе напридумывал

ниодин сакред никогда «нативное» разрешение не поддерживал, только 1024*768
я играл в «линукс» версию во время ее выхода
производительность была идентична вин версии, но в линукс версии шейдеры были с кучей багов(часть эффектов в лин-версии работали медленнее намного)

Сакред написан с «рендеригном на процессоре» и процессоры в 2018 не стали быстрее пениума4, и учитывая что в 2006-8 были одноядрники по 3.5-4ггц, а сейчас у тебя какойнить кор2дуо или целерон с 2ггц, очевидно чо сейчас любая «однопроцесораная» старая игра будет работать медленнее чем в 2004

тоже самое касается GPU, «legacy» API в 2018 не стало быстрее того что было в 2004(тоесть производительность легаси сегодня и тогда идентичная)
сейчас изменился АПИ и новые версии OpenGL3/4 Vulkan требуют другой подход к программированию графики(можно как и раньше но будет также медленно, но по новому быстрее)

также «субъективное» ощущение, в 2008-10 еще играли и смотрели видосы на ютубе в 30ФПС, сейчас все минимум в 60ФПС, глаз уже привык и старые 30ФПС выглядят как ... ну вы поняли

честно говоря я запускал сакред года два-три назад последний раз чисто для теста последних ядер/иксов/видеодров
падений не видел, на 3.5ггц многоядернике идентично пентиуму4 из 2006 работало

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

Сакред написан с «рендеригном на процессоре» и процессоры в 2018 не стали быстрее пениума4, и учитывая что в 2006-8 были одноядрники по 3.5-4ггц, а сейчас у тебя какойнить кор2дуо или целерон с 2ггц, очевидно чо сейчас любая «однопроцесораная» старая игра будет работать медленнее чем в 2004

Пень 4 3.8 ггц примерно равен кор2дуо 2,13 ггц в ОДНОПОТОЧНОМ тесте. В многопоточном соответственно еще 2х в пользу кор2дуо. Это все не учитывая, что пень особо уже разгонять некуда, а кор2дуо легко гонится в 1,5-2 раза. И это практически процессоры одногодки. Т.е. пень вышел в 2005, а кор2дуо в 2006. Про современные вообще молчу.

Так что иди заливай про ценность кукурузных гигагерцев где-то еще.

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

с пятизвездочного заходи долбайоб

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

Пень 4 3.8 ггц примерно равен кор2дуо 2,13 ггц в ОДНОПОТОЧНОМ тесте.

в каком таком тесте?

игры типа «сакреда» тупо перебирают фреймы в цикле, вся логика игры это цикл со вложениями и рекурсиями, чем больше итераций цикла процессор делает тем быстрее работает игра
2.1ггц делает в 2 раза меньше итераций чем 3.8ггц процессор, и соответственно игра Сакред работать будет в два раза медленнее

типичный лор кукаретик не разбирающийся в вопросе,что еще расскажешь мм?

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

for(int i=0;i<1000000000000;i++) {cout<<i;} и считай время

в этомже цикле вставить «показ картинок на экран»=движок сакред

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

вот это ты упоротыш... Ясно теперь почему вы все из под анонимов сидите, мне бы тоже было стыдно такую хероту писать лично. И я даже не про сам вопрос, а про скотскую манеру общения.

В core архитектуре почти вдвое больше инструкций исполняется за такт.

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

В core архитектуре почти вдвое больше инструкций исполняется за такт.

инструкция-показать картинку
это берем память(в оперативке) и ПОПИКСЕЛЬНО шлем в видеокарту
линейное чтение оперативки никак не может быстрее или распаралелено, так как следущий пиксель «менет цвет» в зависимости от «шейдера»(который тоже на процессоре)
опуская догрузки фреймов с жесткого диска(32бит приложение ограничено и 2гб памяти что жрет сакред хватает лишь на пару экранов)

теперь скажи мне как «больше команд за такт» сделает цикл с попоксельным копированием быстрее, когда у тебя цикл работает в 2 раза медленне и в цикле 1 команда

да если разгвор продолжиться запилю тест именнь такой как я написал сравню два процессора 2ггц и 4ггц однопоточных, задолбали кукаретики, запилил цже более десятка тестов наглядно показывающих что джаваскрипт в 10-100раз медленнее си/джавы, всеравно верующие культа вылазят, эпик
готовы верить в любой бред лишбы синдром утенка не теребить

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

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

Просто в реальной жизни такого не встречал. Современные процессоры работают в среднем в раз 5 быстрее в однопотоке или в 20 в многопотоке. И это почти везде заметно. А вот то о чем ты говоришь такого ни разу не видел, по крайней мере в ресурсоемких задачах.

В целом частота это самый бессмысленный показатель для сравнения вычислительной техники.

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

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

https://danilw.github.io/cputests/wasm/render_mini/render_mini.html https://danilw.github.io/cputests/wasm/render/html/render.html https://danilw.github.io/cputests/wasm/opengl_basic/opengl_basic.html

все три ссылки генерируют «шейдер» попиксельно н апроцессоре, чем меньге ГГЦ тем медленнее будет работать (первые две ссылки не требуют опенгла)

вот минимальный пример без графики https://github.com/danilw/GLSL-howto/blob/master/basic glsl math/example.cpp (строка 60 поставь цикл фор не до 2000 а до 1000000000) будет работать медленнее чем меньше ГГЦ

это не гавнокод,это дефолтный гейм-кодинг 1995-2005 года

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

Вот и неси тест с пня4 и с корки, а потом будешь кококо.

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

А на какой видеокарте это происходит? Я пробовал в двух разных дистрибутивах и с nvidia высегда была эта проблема.

P.P.S. А ещё он захватывает весь звук, прям как в старые добрые времена.

У тебя по странной причине используется OSS. Можешь заблаклистить модули, и через alsa все будет пучком.

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

А на какой видеокарте это происходит?

Запускал на интеграшке intel hd graphics 3000 и дискретке nvidia 525m через bumblebee. В обоих случаях без нареканий, дискретка держит fps стабильнее правда.

У тебя по странной причине используется OSS

Там несколько другая проблема:

LSA lib conf.c:3523:(snd_config_hooks_call) Cannot open shared library libasound_module_conf_pulse.so

при том, что сама 32-битная библиотека установлена.

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

дискретке nvidia 525m через bumblebee

Н утогда я даже не знаю. У меня на этом же железе не было нареканий к нативной версии, а затем в какой-то момент бах, и тормоза вместо игры. Естественно, много времени и апдейтов прошло между «ок → тормозит» и желания заниматься даунгрейдом как-то нет.

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