Ускорение WoW под Wine

World of Warcraft очень хорошо работает в Wine, за что большое спасибо его разработчикам. Тем не менее, многие пользователи Linux вынуждены перегружаться в Windows для комфортной игры. Причиной тому является заметно более низкая производительность в этой игре под свободной ОС. Сегодня мы разберемся в причинах этого и попробуем их решить.

Справедливости ради надо сказать, что и под Windows WoW не блещет ураганной скоростью. А когда смотришь на картинку на экране, то очень долго пытаешься понять чему здесь тормозить, и так и не находишь ответа. Причиной тому то, что WoW вышел в 2004 году, при этом движок игры основывается на движке Warcraft III, вышедшей еще в 2001 году. Казалось бы, ну и что, ведь наоборот все должно летать, но не тут-то было. С каждым новым аддоном, которых уже вышло 3, разработчики стараясь быть в ногу со временем, пытаются улучшить качество картинки. Конечно WoW стал красивее с момента своего первого выхода, но даже тогда он не щеголял распоследней графикой, а брал целостным миром, сюжетом, интересной боевой системой, в общем всем тем, что принято называть геймплеем.

После того как на него навесили тонны штукатурки, WoW стал очень неповоротливым, так как нагрузка возросла, а способности эффективно использовать новое железо не появилось. Конечно разработчики пытаются хоть как-то модернизировать движок. Одним из таких нововведений стала поддержка двухъядерных процессоров в Direct3D во времена the Burning Crusade. Режим OpenGL в понимании разработчиков видимо не является приоритетным, так как в нем эта возможность до сих пор не реализована (хотя не так давно Blizzard все-таки сделали аппаратный курсор в OpenGL, так что не все потеряно, процесс медленно, но идет). WoW является процессорозависимой игрой. Это вместе с отсутствием поддержки нескольких ядер привело к тому, что скорость в игре под wine уступает игре под Windows более чем в 2 раза.

WoW - игра с закрытым исходным кодом, и, казалось бы, проблему могут решить только сами разработчики, но нашелся человек, который создал патч к wine, который искусственно распараллеливает нагрузку на 2 ядра процессора в WoW. Более подробно об этом можно почитать здесь. Насколько от этого выросла производительность? Сейчас узнаем.

В качестве тестовой платформы использовался следующий компьютер:
Processor: Intel Core 2 Quad CPU Q9550 @ 2.84GHz (Total Cores: 4)
Motherboard: ASUSTeK P5K
Chipset: Intel 82G33/G31/P35/P31 + ICH9
Memory: 3959MB
Disk: 500GB Western Digital WDC WD5000AAKS-0 + 250GB Seagate ST3250410AS
Graphics: ATI Radeon HD 5870 1024MB (850/1200MHz)

Wine работал на Archlinux с ядром 2.6.37 (x86_64). Также для сравнения использовалась Windows 7 (x86_64).

При тестировании использовались следующие настройки графики:
Разрешение: 1920x1200
Сглаживание:
Разрешение текстур: отличное
Фильтрация: билинейная
Проецирование текстур: включено
Качество теней: минимальное
Детализация воды: миниальное
Солнечные лучи: отключено
Плотность частиц: среднее
Видимость: среднее
Детализация ландшафта: минимальное
Объекты ландшафта: минимальное
Тройная буферизация: отключено
Плавность управления: отключено
Аппаратный курсор: включено
Все тесты под wine проводились в OpenGL режиме.

В WoW есть встроенный тест производительности. Чтобы его включить надо в окне чата прописать "/script SetTaxiBenchmarkMode(1)". После этого как только вы сядете на транспортного грифона или летучую мышь, начинается отслеживание производительности. Результаты объявляются по прибытии. Я проводил тестирование, летая из Порта драконьей пасти до Глотки в Сумеречном Нагорье. Результаты получились следующие:

Результаты для теста

На графике изображено среднее количество кадров в секунду в различных режимах и на разных платформах. Итак что мы имеем? Во-первых, видно что отставание Wine от OpenGL под Windows не очень большое. Это как раз та производительность, которая теряется при конвертацияи Windows команд в команды для Linux. Во-вторых, применение патча подняло производительность в Wine с 70 до 126, или на 80%. Ну и в-третьих, бесспорным лидером все-таки остается Direct3D под Windows - +60% по сравнению с пропатченным Wine.

Кто-то скажет, да какая собственно разница, 201 там кадр или 70, если у большинства людей жидкокристаллические мониторы, у которых частота обновления 60 кадров? Действительно, практически никакой, но тут надо объяснить в чем особенность этого встроенного теста производительности. Дело в том, что во время его проведения не отображаются любые движущие объекты вроде монстров или других игроков. Это сделано для того, чтобы условия тестирования были одинаковыми. Тем не менее именно такие объекты как раз и создают основную нагрузку в игре. Поэтому я провел еще один тест так сказать под нагрузкой. Для этого я измерял производительность во время квеста с засадой на караван Сумеречного Молота на севере Сумеречного Нагорья. Выбрал я это место по двум причинам. Во-первых, это фазовая область, т.е. видна она будет только тем игрокам у которых есть данный квест, а значит количество объектов на экране будет более менее постоянным. Во-вторых, этих самых объектов там довольно много - идет жаркая битва, горит огонь, бегают кони без седоков, в общем все как полагается. По моим субъективным ощущениям нагрузка в этом месте примерно равна нагрузке в рейде на 10 человек. И так результаты:

Результаты для теста

В общем ситуация не поменялась. Здесь более важны сами значения, чем их соотношение. Под оригинальным (ванильным) Wine игра выдает 33 кадра. Играть при такой скорость конечно можно, но глазу становится заметно, что картинка стала тягучей. А ведь если появятся пики в нагрузке (к примеру какая-нибудь массовая способность боса или игроков), то появятся рывки. Я уже не говорю о таких массовых побоищах как Тол Барад или Остров Завоеваний. Там картинка может скатиться до слайд шоу. Пропатченный же Wine уже выдает вполне комфортные 64 кадра.

Патч продолжает развиваться и уже где-то месяц как его вполне можно использовать на постоянной основе. Я его тестирую уже 3 недели и заметил следующие незначительные глюки:
1) при заходе в помещение в первый раз или смене локации на долю секунды появляется черный экран, но игра при этом не подвисает и играть это нисколько не мешает
2) настройки видео можно менять только во время стартового экрана с драконом, если поменять в игре, то она вылетает.

Теперь собственно, как это сделать. Если в общем, то вам надо скачать исходники Wine пропатчить его патчами, которые выложены в ветке, ссылку на которую я дал, и собрать Wine из полученных исходников. В целом однако все не так страшно как кажется. Для пользователей Archlinux я сделал скрипт в AUR, который сам установит необходимые зависимости, скачает исходники и все соберет в пакет для установки. Если вы начинающий пользователь Archlinux и не знаете, что такое AUR и как им пользоваться, то вам сюда и сюда. Пользователи Ubuntu могут воспользоваться PPA, который создал другой пользователь (не автор патча): https://launchpad.net/~aigarius/+archive/aigarius-winepulse . Однако должен предупредить, что установка готовых пакетов из непроверенных источников является опасной, так как в них могут содержаться трояны и прочая гадость.

Пользователи остальных дистрибутивов могут воспользоваться следующим скриптом.

Необходимо скопировать его в пустой текстовый файл и сохранить к примеру как "winebuild". После этого нужно сделать его исполняемым. Для этого нажимаем правой кнопой на файле, заходим в свойства и ставим галочку "сделать исполняемым" или в терминале пишем следующее:
chmod +x winebuild

Прежде чем запускать данный скрипт надо доустановить недостающие зависимости. В первую очередь это средства для сборки. В некоторых дистрибутивах они уже установлены, в некоторых их необходимо устанавливать вручную. Советую поискать Гуглом в сторону "сборка из исходников (тут название вашего дистрибутива)". Также вам понадобятся пакеты для сборки Wine. Если все-таки собрать Wine по скрипту не получается, так как чего-то не хватает, то можете посмотреть на зависимости в скрипте для Archlinux в разделах depends=() и makedepends=() в начале скрипта. Названия могут совпадать не полностью с пакетами в вашей системе. Для 64-битной ОС не забываем ставить еще 32-битные библиотеки, которые там в арчевом скрипте тоже есть, они начинаются с lib32. Еще один момент, если у вас 64 битная система и установлен lib32-glibc 2.13-4, то советую откатиться до lib32-glibc 2.12.2-1, так как с этой версией в процессе проверки я попадал в вечный цикл - на экране просто бежали строчки "checking" и до самой компилляции дело не доходило.

Как установите необходимые зависимости, запускаем скрипт командой:
sh winebuild

К Wine применяются 2 патча. Первый, основной, применяется автоматически. Второй, называется rgl_max.patch, будет применяться, если вы этого захотите, о чем спросит скрипт. Этот второй патч еще немного повышает скороть, но некоторые пользователи заметили проблемы со звуком и у всех появляется черный экран внутри летающих кораблей Альянса. Применять его или нет, решайте сами.

Если все прошло как надо, то в каталоге со скриптом у вас появится каталог usr. В нем находится ваш скомпиллированный Wine. Запускать Wine надо будет от туда. В системе его у вас нет. Т.е. если скрипт у вас находился к примеру в домашнем разделе в каталоге build, а WoW находится в папке Games/WoW, то запускать его будете командой:
~/build/usr/bin/wine ~/Games/WoW/Wow.exe -opengl
В последствии можно будет сделать ярлык с этой командой.

field_vote: 
Ваша оценка: Нет Средняя: 5 (6 оценки)
Главная тема: 
Программное обеспечение: 
Пользовательские теги: 
WoW

Комментарии

Увлеченного геймера ничего не остановит. В следующий раз Дмитрий расскажет как переписать пол-ядра и разогнать WoW еще в 5 раз. :) Кстати, давно уже ходят слухи, что в недрах компании вовсю пользуются нативной версией WoW под Linux.

Оценка: 
Средняя: 5 (2 оценки)

Do you wish to apply rgl_max.patch? It improves performance even a little bit more than the main patch but some players faced some sound and graphical glitches (like black screen inside flying ships). (y/n):
winebuild: 84: [[: not found
winebuild: 84: =: not found
Вот такая проблема.

Оценка: 
Средняя: 5 (1 оценка)

Ubuntu 10.04, wine 1.3.17, скрипт пробовал запускать и от рута, и от юзера. Не знаю в чём проблема.

Оценка: 
Пока без оценки

Должен работать с правами пользователя, права рута ему не нужны. Сейчас попробовал сам скопировать с сайта скрипт и запустить. Действительно движок сайта кое-чего подправил - в моем случае это потеря одного пробела, из-за чего неправильно создавался md5 файл и не проходили тест на целостность исходники Wine. В том месте где произошел затык у вас, прошло все нормально. Сейчас закину скрипт куда-нибудь в другое место и дам ссылку в статье. Попробуйте снова.

Оценка: 
Пока без оценки

Скопировал код скрипта прямо в терминал. Вроде работает

Оценка: 
Пока без оценки

ты забыл сказать что такое отличие в фпс-е у тебя скорее связано с уровнем потдержки опенгл-а АТИ карт
на нвидии разница куда меньше

Оценка: 
Пока без оценки

Нет, пробовал на ноутбуке с Nvidia 8400m G и Duo T5250. Там тоже наблюдалось аналогичное ускорение. Другое дело, что комфортного количества ФПС на таком железе все равно не добиться. WoW - процессорозависимая игра и от быстроты видеокарты не сильно зависит.

Оценка: 
Средняя: 5 (1 оценка)

По какой то причине не проходила проверка md5
Замаскал её в скрипте - все пошло на ура... сейчас компилируется.. посмотрим что будет дальше)

Оценка: 
Средняя: 5 (2 оценки)

и почему меня назвали эрастом?)))

Оценка: 
Средняя: 5 (1 оценка)

Потому что нет регистрации.

Оценка: 
Пока без оценки

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

Оценка: 
Пока без оценки

По какой то причине не проходила проверка md5

Видимо сумма не совпадала с контрольной.

Оценка: 
Пока без оценки

Комментировать

Filtered HTML

  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <strike> <code> <h2> <h3> <h4> <h5> <del> <img>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.