Сайт о телевидении

Сайт о телевидении

» » Как настроить windows performance station под игры. Windows Performance Station — безопасная оптимизация операционной системы и ускорение работы компьютера. Совместимость с Windows, версии программы

Как настроить windows performance station под игры. Windows Performance Station — безопасная оптимизация операционной системы и ускорение работы компьютера. Совместимость с Windows, версии программы

ОСНОВЫ:
Рисование Гор, Холмов, Рек
1.Главное, что можно сказать про горы:
Они не должны быть невероятно высокими и идеально плоскими вверху
2.Главное, что можно сказать про реки:
Для эффекта текущей реки используйте Water Tool (Волны). Выделите нужную вам реку, создайте синий квадрат из 4 точек и выберите River (Река).
3.Главное, что можно сказать про холмы:
После рисования холмов загладьте их с помощью Smooth Height (Черноватое пятно).

Нанесение текстур

1.Текстуры рекомендую применять из одного каталога, т.к создателями игры было все же продуманно, где должна быть грязь, где снег, а где трава.
2.Наносите основную текстуру карты с помощью Flood Fill.
3.После нанесения основы рисуйте соответствующие текстуры по бокам скал, возле воды - песок или скалы (Смотря какая карта).
4.Важно: после всех процедур нанесения текстур используйте Auto Edge Out (Черный Квадрат). Наводите на нужную вам текстуру и нажимайте, текстура становится как бы "Размазанной".

Основные понятия Teams и Player list
Сами они находятся в разделе Edit в самом низу.
1.В Player List выбирайте функцию Add Skirimish Players - Это для того, чтобы Вы могли играть на вашей карте с компьютером.
2.Раздел Teams нужен только в картах-кампаниях или просто картах с особыми манипуляциями ботов (Перемещение, Атака и т.д.).
После выставления Skirimish Players расставьте точки начала игры. Это делается так: выбирается Waypoint Tool (Рядом с BOR-DER), выбирается Player 1, Start Player 2, Start и т.д. Это зависит от того, на сколько игроков Вы решили сделать карту.

Areas (Зоны).
Чтобы создать зону, нужно щелкнуть на Polygon Tool (находится рядом с BOR-DER ).
Зоны нужны для многих скриптовых манипуляций, но они сейчас понадобятся нам для организации атаки ботов на игрока (или друг друга). Для этого Вы должны создать квадрат из 4 точек вокруг нужной Вам базы игрока (Player _ Start). Эта зона называется Inner Perimeter _ Выставите это значение внутри зоны, число в конце InnerPerimeter зависит от того, зону какого игрока Вы изменяете (если Вы обвели зону вокруг точки Player 1 Start, то и зона должна называться InnerPerimeter1 ). Так поступаем со всеми игроками карты.
Теперь рисуем новую зону. Эта зона OuterPerimeter. Эта зона вокруг зоны InnerPerimeter, в ней боты строят защиту базы. Опять называйте, так как и в InnerPerimeter. Теперь рисуем самое сложное - перекрестье между зонами баз CombatZone (Зона боевых действий). Отсюда боты нападают на Вас, рисуйте ее между OuterPerimeter одного игрока и другого.

Чтобы не Писать слишком много CZ-CombatZone IP-InnerPerimeter OP-OuterPerimeter

Теперь из CZ рисуйте вейпоинт-дорожку в IP. В эту вейпоинт-дорожку, там где 3 строки, в первой напишите Flank_ Вместо пробела пишите номер команды в IP, которой идет Flank
Потом из CZ рисуйте вейпоинт-дорожку в OP, тут пропишите Center_ и номер команды.
Благодаря этим процедурам Вы настроили атаку бота.

СКРИПТЫ

Интересные и очень многофункциональные штуки.
Я расскажу Вам про основные из них.

Во-первых, нужно знать, где они находятся. Edit - Scripts...
У Вас появляется выбор армий, в которых нужно прописать скрипт.
Из всего этого выберите Civilian.
Нажмите New Script.
В строку Name вписываете любое имя, которое хотите.

Теперь про сами скрипты.

IF в разделе Script Conditions - это условие, при котором будет выполнен скрипт.
К примеру, скрипт срабатывает только тогда, когда игрок входит определенную зону.

Actions if True. В этом разделе представлены сами действия скриптов.
К примеру, Спавн (Создание) Обьекта Дерева, Машины и т.д.

Мы Рассмотрим Скрипт "Спавн Еффекта NONE - MoabGas при входе в Дом".
По смыслу легкий скрипт
1.Создайте вейпоинт с любым названием, к примеру - MoabGasSpawnPoint1
2.Создайте Team (Команду) у армии Civilian и назовите ее как угодно, к примеру - BST1
3.Создайте любое гражданское здание, в которое можно входить с любым названием, к примеру - SPH1
4.Создайте скрипт в разделе Civilian с любым именем.
5.Откройте этот скрипт и вписывайте:
I. В Script Conditions - New выбираете Player - Player has Entered a specific building (Скрипт срабатывает когда игрок заходит в определенное здание) И здесь в выборе (Player - Local Player,Unit - SPH1)
II.В Actions if True - New выбираете Unit - Spawn - Unnamed Unit on a team spawn at Waypoint (Безымянный юнит из команды вызывается в вейпоинт) И Здесь в выборе (??? Тут Civilian - None - MoabGas, Team - BST1,Waypoint - MoabGasSpawnPoint1)
"OK"
И все. Теперь при входе в здание SPH1 у Вас будет взрыв. Там, где Вы поставили MoabGasSpawnPoint1.

Теперь на этом примере Вы сможете создавать и другие Скрипты.

Удачи в картостроении!!!

Для большего удобства уберите туманность, нажав на кнопку Fog, находящаяся в панели редактора.

  • Чтобы перемещать камеру, удерживайте колёсико мыши и двигайте её, или жмите клавиши управления курсором.

Стартовая позиция / HQ (Командный пункт)

В панели редактора нажмите на Object Placement (клавиша F2). Справа откроется три оконца одно из которых называется Objects. В этом окне нужно найти объект, отвечающий за стартовую позицию HQ:
ebps → world_objects → gameplay → starting_position_pvp_menu

  • Объект нужно выбрать щёлкнув по нему левой кнопкой мыши и поставить правой.
  • Перемещать объекты можно удерживая левую кнопку мыши.
  • Чтобы повернуть объект, удерживайте Shift и крутите мышкой.
  • Чтобы удалить конкретный объект, выберите его и нажмите кнопку Delete на клавиатуре.
  • Если объектов слишком много, нажмите Select Objects (F1) в панели редактирования и выделите те объекты, которые нужно удалить.

Теперь для большего удобства нажмите на Player ownership coloring в панели редактора.

Теперь все HQ нужно присвоить игрокам. Изначально они все принадлежат World, то есть, никому. Измените присвоение с World на Player 1 и 2 соответственно: выберите один (можно и больше) из HQ и в разделе Current, который находится в оконце Object Placement, нажмите на World и выберите, какому игроку надо присвоить данный объект.

Принадлежность

Ультрамариновый (если включен Player ownership coloring)

Красный (если включен Player ownership coloring)

Изумрудный (если включен Player ownership coloring)

Фиолетовый (если включен Player ownership coloring)

Старое золото (если включен Player ownership coloring)

Оранжевый (если включен Player ownership coloring)

Голубой (если включен Player ownership coloring)

Розовый (если включен Player ownership coloring)


Вообщем, пофантазируйте с количеством игроков и их местоположением.

«Границы», или конец карты

Один из самых важных факторов в любой карте во время игры - это её концовка. Предлагаю мой вариант в виде «скалистой стены» по краям.

Нажмите на Heightmap Editor (клавиша F5). Вместо курсора появляется сдвоенная область и открывается оконце Edit Modes.

Там есть:

LMD Mode (Левая клавиша)

RMB Mode (Правая клавиша)

1 - Additive (добавить)

5 - Additive (добавить)

2 - Subtractive (убавить)

6 - Subtractive (убавить)

3 - Set Value (вырыть)

7 - Set Value (вырыть)

4 - Smoothing (выравнять)

8 - Smoothing (выравнять)


Brush Size (Размер кисти)

Feather (Перо)

Height (Высота)

Strength (Прочность)

Precision (Точность)

Render Grid (Сетка рендера)

Uptade LODs (slower) (Отрегулировать уровень детализации (медленнее))


Presents (Презентация)

Very Deep Water (Большая глубина)

Deep Water (Глубина)

Over-The-Head Water (Высота)

Сhest High Water (Уровень высоты)

Water Surface (Поверхность)

Above Water Surface (Выровнять поверхность)

Ankle Height Water (Высота лодыжки)


Увеличите Brush Size до 40 или 50, поставьте Set Value и настройте Height (или поставьте какой угодно вам Level в Presents). Потом начните «рисовать» по краям карты.

Чтобы настроить фон карты и ещё глубже окунуться в её атмосферу, нажмите:
Scenario → Atmosphere Properties
и в разделе Sky Model, которое находиться в оконце Sky, выберите желаемое вам небо.

  • Чтобы менять ракурс камеры, удерживайте Alt и крутите мышкой.

Необходимые объекты

  1. Победная точка: ebps → world_objects → gameplay → victory_point_pvp
  2. Точка влияния: ebps → world_objects → gameplay → strategic_point_requistion_pvp
  3. Точка энергии: ebps → world_objects → gameplay → strategic_point_pvp
  4. Турели (не забудьте их распределить соответствующим игрокам): ebps → world_objects → gameplay → turret_position_pvp

Выберите Heightmap Editor в панели редактора. С помощью Set Value выкопайте место, которое хотите заполнить водой. Затем нажмите и выберите в панели Water Placement (клавиша F10) и наполните эти пропасти (хоть до краёв, хоть до дна, или всю карту в целом).

Объекты для ландшафтного дизайна

Все необходимые объекты для украшения вашей карты находятся в:
ebps → world_objects

Текстуры

Если хотите установить на свою карту текстуру, в панели управления нажмите на Texture Tile Painting Editor (клавиша F7).

World Builder требует комбинацию двух текстур, которые будут использоваться для создания так называемого слоя. Эти две текстуры состоят из грунта и скалы. Все существующие пакеты текстур, поставляемые с игрой, доступны для использования.
Выделите нужную вам текстуру и нажмите на Assign Layers в оконце Existing Layers.
На заметку: свои комбинации слоёв нельзя создавать.

Посмотрело: 1033

Здравствуйте, уважаемые читатели! Вот я и добрался до Хабра и хочу поведать здесь историю своего проекта. Многие аспекты собственного опыта и работы приходится описывать довольно общими терминами, чтобы не задеть коммерческую тайну тех организаций, о которых идёт речь.

Итак, данная история началась в 2013ом году, в то время я работал в одной крупной международной организации производящей порошки и шампуни. Должность у меня была сисадминская, но, как это часто бывает, по сути я был «тыжпрограммистом». Суть работы сводилась к поддержанию некоторых систем СЭД, написанию различных макросов на VBA, утилиток для автоматизации или интеграций разных простеньких систем и т.п.

И как раз в то же время я решал одну из наболевших проблем организации, а именно, неудовлетворительную работу различного ПО на новых ноутбуках многих сотрудников. По сути, мне пришлось столкнуться с проблемой, которая возникает у многих сисадминов крупных компаний - на компьютерах персонала, кроме любимых ими MS Office, SAP, 1С и т.п., присутствовал не менее любимый всеми IT специалистами «mcafee», «punto switcher», «mail спутник» и что только не. Тут стоит уточнить, что данная компания тогда продвигала либеральное отношение к компьютерам сотрудников, и, по сути, зарождала у себя BYOD.

Так как жалобы на производительность поступали в т.ч. и мне, я стал искать приложения для настройки производительности на подобии Process Lasso. Мой выбор тогда пал на «Bill2`s Process Manager». На тот момент я нашёл много альтернатив, но все они имели жутко перегруженный интерфейс и на собственную работу отъедали больше ресурсов, чем можно было высвободить оптимизацией.


Найденный на тот момент «Bill2`s Process Manager» имел массу преимуществ перед системными средствами, т.к. был довольно простым в управлении и настройке. По сути, он позволял делать то же самое, что умеет диспетчер задач, а именно, задавать базовый приоритет и маску ядер для приложений, но, в отличии от диспетчера, давал возможность сохранить эти параметры после перезагрузки и различал приложения которые отображаются в окнах на рабочем столе или работают в фоне.

Благодаря этому приложению мне удалось решить одну из самых насущных проблем, объяснить компьютеру с какими приложениями я работаю сейчас, и что для меня важнее - EXCEL или фоновая установка обновлений.

Но, несмотря на то, что для меня это приложение решило основную проблему, оно имело массу недостатков:

  • Отсутствие преемственности конфига, нельзя было просто скопировать приложение с одного компа на другой с аналогичной конфигурацией, нужно было настраивать заново. Частично эта проблема решалась запаковкой настроенного приложения в Portable экзешник. (Может как-то можно было вытащить параметры из реестра, но на тот момент я не разобрался).

  • Отсутсвие управления RAM, а именно сжатием оперативной памяти. У многих твикеров есть так называемая «дефрагментация памяти», что по сути является чушью, т.к. дефрагментировать оперативку совершенно бессмысленно с точки зрения производительности. Мне нужно было чистить данные, которые висят в оперативке и не падают в SWAP, чтобы при резкой нагрузке на RAM она уже была свободна и ОС не пыталась угадать, что тебе сейчас в RAM нужно, а что нет. К слову, через год эта фишка штатно появилась в Windows 10, но там это архивирование внутри оперативной памяти, что тоже по сути не совсем решает проблему.

  • Отсутствие управления приоритетами ввода-вывода на жёсткий диск (или SSD). Штатно Windows имеет эту функцию ещё с висты, но активно использоваться она начала только в Win10.

  • Отсутствие определения «фокусного» приложения, т.к. оконность это ещё не всё, если я работаю с десятком приложений, в одном из которых что-то компилируется, а в другом я смотрю YouTube, то мне совсем не хочется, чтобы YouTube лагал если фокус окна на нём, а не на других окнах.

  • Невозможность указать папку с приложениями, чтобы разом применить правило к новым устанавливаемым программам.
  • По сути, изучая архитектуру ОС Windows я постоянно находил множество отличных механизмов, которые позволяют выстроить производительность в системе идеально при условии одного «НО». НО, если программисты, которые пишут своё ПО будут сообщать операционной системе что их ПО делает, для чего оно предназначено (игры, фильмы и т.п.) и с каким приоритетом оно должно обращаться к ЦП/RAM/HDD.

    http://s17.postimg.org/v95vgn1m7/2015_09_07_21_47_23.png?noredir=1

    В жизни же, получается, что только малая часть ПО пишется с учётом программной архитектуры Windows, большинство производителей, в т.ч. очень серьёзных и крупных, пишут ПО без указания этих параметров и ОС использует всё по умолчанию.

    И это не говоря про службы, которые совершенно беспардонно отъедают любые доступные ресурсы как только поступает эвент к действию (типа скачивания и установки обновлений). Желающие проверить ситуацию на своём ПК могут открыть диспетчер задач и отобразить столбец «базовый приоритет» во вкладке с процессами.

    Немного данную ситуацию исправляет MMCSS, но он слишком мягко влияет на процессы, почти не затрагивая их фактическую производительность.


    Самая неприятная вещь в многозадачности Windows, которая меня постоянно преследовала, было прослушивание музыки во время ресурсоёмких операций. Т.к. я во время работы слушал музыку через Хром и запускал расчёты крупных таблиц в Excel, звук имел особенность подвиснуть именно на момент полной загрузки ЦП или постоянно похрипывать при любом скачке этой нагрузки. Данная ситуация почти полностью решилась использованием «Bill2`s Process Manager», но его нужно было вручную настроить на Хром, чтобы тот не кряхтел и получалось, что хром всё время в повышенном приоритете, даже когда музыка не нужна, что уже было не гуд.

    Тут же стоит уточнить, что компьютеры и тогда использовались довольно мощные по меркам ноутбуков. На тот момент это был Core i5 2430m / 8GB Ram / 256GB SSD.

    При этом, зарождавшийся тогда в компании BYOD предполагал, что сотрудники со своими рабочими ноутбуками могут работать повсюду, в т.ч. из дома и, при этом, использовать рабочий ПК как домашний для просмотра фильмов игр и т.п.


    Все эти факторы в итоге натолкнули меня на мысль о написании собственного приложения, которое будет вбирать в себя всё лучшее от имеющихся альтернатив и устранит их недостатки, при этом будет не просто интерфейсом для настройки как диспетчер задач, а полностью автоматической системой для адаптации производительности под выполняемую задачу. По сути, я собирался создать идеальную структуру для BYOD на своём ПК, в которой я мог бы и поработать без понижения производительности процессами Steam, iTunes или т.п. и поиграть, посмотреть фильмы без влияния корпоративного софта, антивирусов и т.п.

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


    Дело было за малым, сначала мы написали простенькую альтернативу «Bill2`s Process Manager», но без интерфейсов настройки, чтобы приложение работало с преднастроенным конфигом. Основной фишкой было определение того, какие окна развёрнуты, какие процессы работают в фоне и какое приложение в фокусе. Так же сразу добавили опцию назначения приоритета не только процессу, но и всем процессам из определённой папки. Написать данное приложение было довольно просто и благодаря имеющемуся опыту сразу же получилось недопустить утечек памяти, утечки хэндлеров, вылетов и прочих багов т.к. приложение должно было работать в фоне длительное время без перезагрузок. Чтобы приложение было лёгким и работало эффективно, мы использовали только стандартные функции ОС и WinAPI. В самом начале мы обходились даже без интерфейса.
    Следующим этапом было написать локальный алгоритм обучения, который по входным параметрам определял бы назначение приложения. За основу была взята математическая модель нейросети с нейронами на основе пороговой передаточной функции, но на тот момент не учитывались весовые коэффициенты, которые мы добавили позже. Эта нейросеть сначала училась только на базовых параметрах времени работы с приложением, его имени, правилом в конфигурации и расположением на жёстком диске (например, если много приложений постоянно используются и не работают в фоне, расположены в одной корневой папке типа «C:/Games/», то скорее всего все последующие приложения запускаемые из этой папки будут использоваться активно и понижать их приоритет в фоне не нужно).

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

    Тут стоит уточнить, что в отличии от классических диспетчеров задач, мы решили не управлять приоритетами, ядрами, оперативкой и вводом-выводом по отдельности, а объединили эти параметры в правила, которые комбинировали в разной пропорции. Например, для заглавного приложения правило = FOREGROUND (доступны все ядра, приоритет выше среднего, приоритет ввода-вывода высокий, оперативку в SWAP не сбрасываем).


    В дальнейшем к алгоритму обучения были добавлены параметры положения окна (есть ли отображаемое окно у приложения, свёрнуто ли оно или развёрнуто. Если развёрнуто на весь экран и в фокусе, то нужно уделить этому процессу больше внимания, чем фоновым и т.п.).

    Было добавлено определение служб, т.к. одинаково называющиеся процессы служб svchost.exe выполняют совершенно разные задачи.

    Самым сложным, пожалуй, было научить приложение различать одинаковые процессы по разному назначению. Например, многие браузеры запускают для каждой отдельной вкладки отдельный процесс (Chrome, Firefox, Yandex, Opera и т.п.), а звук и видео воспроизводят хост процессы, следовательно из 20ти процессов хрома, когда он не в фокусе, нужно повысить те процессы, которые воспроизводят звук. Это же касается и любых других процессов, которые могут работать в фоне.

    Чтобы не прописывать в конфиге все известные миру процессы, в конечном счёте приложение научилось определять не только то, как часто пользователь работает с процессом, но и фактическое назначение процесса и его важность для работы.

    Таким образом приложение научилось распределять нагрузку по ключевым узлам компьютера в зависимости от того, с чем в данный момент работает пользователь. Более того, нагрузка распределяется индивидуально для каждого ПК в зависимости от сценария использования какого-либо приложения, т.е. используется ли оно в окне, воспроизводит ли оно видео/звук/3d, как много пользователь обращается к данному приложению и в какой папке данное приложение расположено.

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

    Вся данная логика не могла бы существовать без тесной интеграции с системой, поэтому для реализации всех механизмов пришлось задействовать по максимуму функции Windows API. Это позволило при минимальных затратах расчётных мощностей достучаться до глубоких функций ядра и сохранить максимальную совместимость с любым ПК на x86-64 процессоре.

    Так же, важно было учитывать тип компьютера с которым работает пользователь. Например, при работе от аккумулятора используются несколько иные алгоритмы работы с ядрами ЦП, чтобы уменьшить нагрузку и сэкономить заряд. Были добавлены опции управления питанием, чтобы можно было не выключать ноутбук или планшет, а, погасив экран, продолжать слушать музыку или выполнять скачивание/копирование/архивирование файлов с энергопотреблением около спящего режима.

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

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


    Со временем к работе над данным проектом присоединились другие мои товарищи, которые помогали заниматься дизайном, сайтом, группой ВК и т.п. вопросами.

    Предвкушая различные советы от гуру, хочу сразу упомянуть, что мой суммарный опыт работы в IT на данный момент составляет 8 лет. За время работы над данным приложением я встречал множество противоречивой информации на тему особенностей работы ОС и некоторых компонентов ПК, поэтому не удивлюсь, что кто-то может быть несогласен с некоторыми описанными подходами, но конечное тестирование показало эффективность данных решений.

    Даже в профессиональной сфере моих коллег, многие до конца не понимают тонкости работы ЦП, многопоточности, многозадачности и многоядерности. Информацию о некоторых системных функциях Windows приходилось находить в самых отдалённых частях интернета. Самым сложным, пожалуй, было найти работающий(!) способ установки высокого приоритета ввода-вывода сторонним приложениям.

    Описанный механизм не является сферическим алгоритмом в вакууме и успешно работает на реальных машинах. В случаях где реально используется многозадачность - прибавка производительности может составлять до 50%.


    Финальным штрихом для работы над приложением стало подписание сертификатом «code signing» для ОС Windows.

    Большое спасибо всем, кто осилил данный текст до конца.

    P.S. Прошу прощения за некоторую сумбурность, старался уложить только самую главную инфу, чтобы не сильно разрастался текст.

    Мы распространяем приложение по схеме Freemium, чтобы любой пользователь мог воспользоваться самыми основными функциями, но нам будет очень приятно, если сообщество Хабра нас поддержит, чтобы наш проект смог развиваться далее.

    У нас есть ещё множество идей по увеличению функциональности и производительности нашего приложения, чтобы сделать его ещё лучше и эффективнее.

    Искренне надеюсь, что наши усилия помогут облегчить работу с компьютером многим пользователям, которые не обладают специальными навыками для настройки своего ПК, а прожжёным спецам позволят избавиться от постоянного выбора между скоростью и функциональностью.

    Я буду рад рассказать более подробно про различные аспекты работы приложения отдельно, если данная статья вызовет интерес.

    Здравствуйте, уважаемые читатели! Вот я и добрался до Хабра и хочу поведать здесь историю своего проекта. Многие аспекты собственного опыта и работы приходится описывать довольно общими терминами, чтобы не задеть коммерческую тайну тех организаций, о которых идёт речь.

    И как раз в то же время я решал одну из наболевших проблем организации, а именно, неудовлетворительную работу различного ПО на новых ноутбуках многих сотрудников. По сути, мне пришлось столкнуться с проблемой, которая возникает у многих сисадминов крупных компаний - на компьютерах персонала, кроме любимых ими MS Office, SAP, 1С и т.п., присутствовал не менее любимый всеми IT специалистами «mcafee», «punto switcher», «mail спутник» и что только не. Тут стоит уточнить, что данная компания тогда продвигала либеральное отношение к компьютерам сотрудников, и, по сути, зарождала у себя BYOD.

    Так как жалобы на производительность поступали в т.ч. и мне, я стал искать приложения для настройки производительности на подобии Process Lasso. Мой выбор тогда пал на «Bill2`s Process Manager». На тот момент я нашёл много альтернатив, но все они имели жутко перегруженный интерфейс и на собственную работу отъедали больше ресурсов, чем можно было высвободить оптимизацией.


    Найденный на тот момент «Bill2`s Process Manager» имел массу преимуществ перед системными средствами, т.к. был довольно простым в управлении и настройке. По сути, он позволял делать то же самое, что умеет диспетчер задач, а именно, задавать базовый приоритет и маску ядер для приложений, но, в отличии от диспетчера, давал возможность сохранить эти параметры после перезагрузки и различал приложения которые отображаются в окнах на рабочем столе или работают в фоне.

    Благодаря этому приложению мне удалось решить одну из самых насущных проблем, объяснить компьютеру с какими приложениями я работаю сейчас, и что для меня важнее - EXCEL или фоновая установка обновлений.

    Но, несмотря на то, что для меня это приложение решило основную проблему, оно имело массу недостатков:

    1. Отсутствие преемственности конфига, нельзя было просто скопировать приложение с одного компа на другой с аналогичной конфигурацией, нужно было настраивать заново. Частично эта проблема решалась запаковкой настроенного приложения в Portable экзешник. (Может как-то можно было вытащить параметры из реестра, но на тот момент я не разобрался).
    2. Отсутсвие управления RAM, а именно сжатием оперативной памяти. У многих твикеров есть так называемая «дефрагментация памяти», что по сути является чушью, т.к. дефрагментировать оперативку совершенно бессмысленно с точки зрения производительности. Мне нужно было чистить данные, которые висят в оперативке и не падают в SWAP, чтобы при резкой нагрузке на RAM она уже была свободна и ОС не пыталась угадать, что тебе сейчас в RAM нужно, а что нет. К слову, через год эта фишка штатно появилась в Windows 10, но там это архивирование внутри оперативной памяти, что тоже по сути не совсем решает проблему.
    3. Отсутствие управления приоритетами ввода-вывода на жёсткий диск (или SSD). Штатно Windows имеет эту функцию ещё с висты, но активно использоваться она начала только в Win10.
    4. Отсутствие определения «фокусного» приложения, т.к. оконность это ещё не всё, если я работаю с десятком приложений, в одном из которых что-то компилируется, а в другом я смотрю YouTube, то мне совсем не хочется, чтобы YouTube лагал если фокус окна на нём, а не на других окнах.
    5. Невозможность указать папку с приложениями, чтобы разом применить правило к новым устанавливаемым программам.
    По сути, изучая архитектуру ОС Windows я постоянно находил множество отличных механизмов, которые позволяют выстроить производительность в системе идеально при условии одного «НО». НО, если программисты, которые пишут своё ПО будут сообщать операционной системе что их ПО делает, для чего оно предназначено (игры, фильмы и т.п.) и с каким приоритетом оно должно обращаться к ЦП/RAM/HDD.

    В жизни же, получается, что только малая часть ПО пишется с учётом программной архитектуры Windows, большинство производителей, в т.ч. очень серьёзных и крупных, пишут ПО без указания этих параметров и ОС использует всё по умолчанию.

    И это не говоря про службы, которые совершенно беспардонно отъедают любые доступные ресурсы как только поступает эвент к действию (типа скачивания и установки обновлений). Желающие проверить ситуацию на своём ПК могут открыть диспетчер задач и отобразить столбец «базовый приоритет» во вкладке с процессами.

    Немного данную ситуацию исправляет MMCSS, но он слишком мягко влияет на процессы, почти не затрагивая их фактическую производительность.


    Самая неприятная вещь в многозадачности Windows, которая меня постоянно преследовала, было прослушивание музыки во время ресурсоёмких операций. Т.к. я во время работы слушал музыку через Хром и запускал расчёты крупных таблиц в Excel, звук имел особенность подвиснуть именно на момент полной загрузки ЦП или постоянно похрипывать при любом скачке этой нагрузки. Данная ситуация почти полностью решилась использованием «Bill2`s Process Manager», но его нужно было вручную настроить на Хром, чтобы тот не кряхтел и получалось, что хром всё время в повышенном приоритете, даже когда музыка не нужна, что уже было не гуд.

    Тут же стоит уточнить, что компьютеры и тогда использовались довольно мощные по меркам ноутбуков. На тот момент это был Core i5 2430m / 8GB Ram / 256GB SSD.

    При этом, зарождавшийся тогда в компании BYOD предполагал, что сотрудники со своими рабочими ноутбуками могут работать повсюду, в т.ч. из дома и, при этом, использовать рабочий ПК как домашний для просмотра фильмов игр и т.п.


    Все эти факторы в итоге натолкнули меня на мысль о написании собственного приложения, которое будет вбирать в себя всё лучшее от имеющихся альтернатив и устранит их недостатки, при этом будет не просто интерфейсом для настройки как диспетчер задач, а полностью автоматической системой для адаптации производительности под выполняемую задачу. По сути, я собирался создать идеальную структуру для BYOD на своём ПК, в которой я мог бы и поработать без понижения производительности процессами Steam, iTunes или т.п. и поиграть, посмотреть фильмы без влияния корпоративного софта, антивирусов и т.п.

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


    Дело было за малым, сначала мы написали простенькую альтернативу «Bill2`s Process Manager», но без интерфейсов настройки, чтобы приложение работало с преднастроенным конфигом. Основной фишкой было определение того, какие окна развёрнуты, какие процессы работают в фоне и какое приложение в фокусе. Так же сразу добавили опцию назначения приоритета не только процессу, но и всем процессам из определённой папки. Написать данное приложение было довольно просто и благодаря имеющемуся опыту сразу же получилось недопустить утечек памяти, утечки хэндлеров, вылетов и прочих багов т.к. приложение должно было работать в фоне длительное время без перезагрузок. Чтобы приложение было лёгким и работало эффективно, мы использовали только стандартные функции ОС и WinAPI. В самом начале мы обходились даже без интерфейса.


    Следующим этапом было написать локальный алгоритм обучения, который по входным параметрам определял бы назначение приложения. За основу была взята математическая модель нейросети с нейронами на основе пороговой передаточной функции, но на тот момент не учитывались весовые коэффициенты, которые мы добавили позже. Эта нейросеть сначала училась только на базовых параметрах времени работы с приложением, его имени, правилом в конфигурации и расположением на жёстком диске (например, если много приложений постоянно используются и не работают в фоне, расположены в одной корневой папке типа «C:/Games/», то скорее всего все последующие приложения запускаемые из этой папки будут использоваться активно и понижать их приоритет в фоне не нужно).

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

    Тут стоит уточнить, что в отличии от классических диспетчеров задач, мы решили не управлять приоритетами, ядрами, оперативкой и вводом-выводом по отдельности, а объединили эти параметры в правила, которые комбинировали в разной пропорции. Например, для заглавного приложения правило = FOREGROUND (доступны все ядра, приоритет выше среднего, приоритет ввода-вывода высокий, оперативку в SWAP не сбрасываем).


    В дальнейшем к алгоритму обучения были добавлены параметры положения окна (есть ли отображаемое окно у приложения, свёрнуто ли оно или развёрнуто. Если развёрнуто на весь экран и в фокусе, то нужно уделить этому процессу больше внимания, чем фоновым и т.п.).

    Было добавлено определение служб, т.к. одинаково называющиеся процессы служб svchost.exe выполняют совершенно разные задачи.

    Самым сложным, пожалуй, было научить приложение различать одинаковые процессы по разному назначению. Например, многие браузеры запускают для каждой отдельной вкладки отдельный процесс (Chrome, Firefox, Yandex, Opera и т.п.), а звук и видео воспроизводят хост процессы, следовательно из 20ти процессов хрома, когда он не в фокусе, нужно повысить те процессы, которые воспроизводят звук. Это же касается и любых других процессов, которые могут работать в фоне.

    Чтобы не прописывать в конфиге все известные миру процессы, в конечном счёте приложение научилось определять не только то, как часто пользователь работает с процессом, но и фактическое назначение процесса и его важность для работы.

    Таким образом приложение научилось распределять нагрузку по ключевым узлам компьютера в зависимости от того, с чем в данный момент работает пользователь. Более того, нагрузка распределяется индивидуально для каждого ПК в зависимости от сценария использования какого-либо приложения, т.е. используется ли оно в окне, воспроизводит ли оно видео/звук/3d, как много пользователь обращается к данному приложению и в какой папке данное приложение расположено.

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

    Вся данная логика не могла бы существовать без тесной интеграции с системой, поэтому для реализации всех механизмов пришлось задействовать по максимуму функции Windows API. Это позволило при минимальных затратах расчётных мощностей достучаться до глубоких функций ядра и сохранить максимальную совместимость с любым ПК на x86-64 процессоре.

    Так же, важно было учитывать тип компьютера с которым работает пользователь. Например, при работе от аккумулятора используются несколько иные алгоритмы работы с ядрами ЦП, чтобы уменьшить нагрузку и сэкономить заряд. Были добавлены опции управления питанием, чтобы можно было не выключать ноутбук или планшет, а, погасив экран, продолжать слушать музыку или выполнять скачивание/копирование/архивирование файлов с энергопотреблением около спящего режима.

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

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


    Со временем к работе над данным проектом присоединились другие мои товарищи, которые помогали заниматься дизайном, сайтом, группой ВК и т.п. вопросами.

    Предвкушая различные советы от гуру, хочу сразу упомянуть, что мой суммарный опыт работы в IT на данный момент составляет 8 лет. За время работы над данным приложением я встречал множество противоречивой информации на тему особенностей работы ОС и некоторых компонентов ПК, поэтому не удивлюсь, что кто-то может быть несогласен с некоторыми описанными подходами, но конечное тестирование показало эффективность данных решений.

    Даже в профессиональной сфере моих коллег, многие до конца не понимают тонкости работы ЦП, многопоточности, многозадачности и многоядерности. Информацию о некоторых системных функциях Windows приходилось находить в самых отдалённых частях интернета. Самым сложным, пожалуй, было найти работающий(!) способ установки высокого приоритета ввода-вывода сторонним приложениям.

    Описанный механизм не является сферическим алгоритмом в вакууме и успешно работает на реальных машинах. В случаях где реально используется многозадачность - прибавка производительности может составлять до 50%.


    Финальным штрихом для работы над приложением стало подписание сертификатом «code signing» для ОС Windows.

    Большое спасибо всем, кто осилил данный текст до конца.

    P.S. Прошу прощения за некоторую сумбурность, старался уложить только самую главную инфу, чтобы не сильно разрастался текст.

    Мы распространяем приложение по схеме Freemium, чтобы любой пользователь мог воспользоваться самыми основными функциями, но нам будет очень приятно, если сообщество Хабра нас поддержит, чтобы наш проект смог развиваться далее.

    У нас есть ещё множество идей по увеличению функциональности и производительности нашего приложения, чтобы сделать его ещё лучше и эффективнее.

  • программирование
  • Добавить метки

    Тестовую же функцию Windows под названием «Игровой режим» . По заявлению журналиста, у такого режима, несмотря на недавний анонс, явно есть потенциал.

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

    Сами результаты тестирования оказались достаточно интересными.

    Например, на системе с процессором Core i7-7700K включенный «Игровой режим» , к удивлению журналиста, не принес никакой пользы, напротив, снизив производительность игр в среднем на 0-1 процент. Hitman же так и вовсе оказался лидером такого антирейтинга, показав падение производительности на 4 процента в среднем, и на 10 - у показателей минимального FPS.

    Хоть какой-то положительный рост в этом случае показал Tom Clancy’s The Division (незначительное увеличение минимального показателя кадров в секунду), однако в остальном, как уже говорилось, от подключения Game Mode все стало лишь хуже.

    Замена процессор на двуядерный i3-7350K с более низкой тактовой частотой показала какие-то задатки потенциала «Игрового режима» . Так, у Ashes of the Singularity и GTA V показатели среднего и минимального FPS выросли на 1-3 процента. У остальных игр вновь было замечено падение производительности, начиная от незначительных показателей (те самые 0-1 процента), до более солидных (11-14 процентов у того же Hitman , что еще хуже, чем в предыдущем тесте).


    Джаред решил подключить к тестированию GTX Ti 1050 и R9 Fury заместо изначально используемой видеокарты GeForce GTX 1080 FE, но история повторилась. Эксперимент не выявил каких-либо серьезных улучшений в сочетании включенного «Игрового режима» и системы с GPU i7-7700K и 1050 Ti на борту. И даже с более медленным процессором, но все с той же GTX 1050 Ti, «Игровой режим» не дал значительных преимуществ в производительности. Тем не менее, журналист отметил, что кое-где подключение Game Mode себя пускай и немного, но себя оправдывало - например, в случае с тем же Hitman , где показатели чуть-чуть, но поползли вверх.

    На основе полученных данных, Джаред заключил, что на данный момент система со слабым процессором, но мощной видеокартой является приоритетной для использования «Игрового режима» , поскольку именно на ней наблюдается наибольший положительный результат.

    Также журналист напоминает, что тестирование проводилось на «чистой» ОС, а значит, на иных версиях операционной системы, где будет особенно остро стоять вопрос перераспределения ресурсов, пользы от Game Mode может быть гораздо больше. Джаред , кстати, пробовал было искусственно повышать приоритет у ядер процессора для игр, однако все, чего он в итоге добился этим - резкое снижение уровня FPS. Отсюда он сделал вывод, что либо Windows по умолчанию отлично справляется с распределением приоритетов, либо у «Игрового режима» пока задействован далеко не весь функционал.

    Джаред напоминает, что Game Mode на данный момент находится в стадии активной разработки, авторы ищут наиболее эффективные методы для его работы, а значит, многое в итоге наверняка поменяется. Пока же использование «Игрового режима» представляется наиболее оправданным на устаревших конфигурациях. Особенно, если прямо во время игры Центр обновления Windows решит, что сейчас настал лучший момент для обновления системы.