Исправление вылетов (рассинхронизация потоков) у SKSE плагинов (HDT)
28.09.2022 5088 637 Автор мода: Mitradis Автор публикации: Mitradis Версия: 1.0 Перевод: Русский

Исправление вылетов (рассинхронизация потоков) у SKSE плагинов (HDT)

Это довольно простое решение казалось бы безвыходной ситуации с CTD у HDT плагина. На первый взгляд вылеты у HDT плагина происходят совершенно случайно и спонтанно и это действительно так. Вы не могли отследить причину, как собственно и я. Проблема этого плагина заключается в постоянном спаме в память, так собственно и работают 90% всех плагинов, но даже не сам спам, а то, что в это время плагин зачем-то постоянно пишет данные в лог. Не нужно быть IT специалистом чтобы знать, что команды ввода-вывода на запись-чтение являются просто катастрофически медленными по сравнению с обменом данными процессор-память или ядра-кеш, и SATA3 или M2 ничем совершенно тут не помогут. Дело в том, что когда плагин решает записать новую строку, потому-что он обнаружил нового NPC, на которого решил повесить поддержку физики и решил сообщить об этом всем на свете, он посылает соответствующие команды ОС. И тут начинается праздник. Все знают о невероятной скорости интерфейсов типа SATA3, M2 и пр. Но мало кто догадывается сколько времени уходит на старт записи, на инициализацию: создания потоков, выделение памяти под операцию, опрос готовности железа, кучу обращений через подсистемы, драйвера и пр. прежде чем запись начнется. Специалисты поправят если что. А в этот момент плагину нужно работать и игре тоже нужно работать, а скорости функций там просто космические по сравнению с этим. Но идет не просто создание нового файла с одной строкой, а добавление строки к существующему, а это затягивает (в сравнении с наносекундами) операцию в разы, т.к. системе нужно считать старый файл и добавить строки и произвести записать. Собственно тут и происходит вылет судя по всему. Некая рассинхронизация в потоках происходит, что-то начинается или заканчивается раньше или позже, не дождавшись чего-то. Я не такой специалист в этом.

Решение: запретить плагинам писать логи. У 99% плагинов такая функция жестко прописана в коде и отключение не поддерживается. Поэтому приходится извращаться. Как решение был выбран самый простой вариант: путь и имя лог файла (доступного в HEX редакторе) заменяется одним символом ? являющимся недопустимым знаком для путей и имен файлов. ОС будет игнорировать такой запрос на самом первом этапе работы с таким запросом и не будет запускать инициализацию записи. Вы можете сделать это самостоятельно (см. пример изображения), все остальное забивается нулями.
 


По главной ссылки плагин HDT. По дополнительной отключение логов для самого SKSE и .dll файлы от распространенных плагинов:
AddItemMenu 3.2
Animation Loading Fix
Armor Rating Rescaled
Barter Fix
Cobb Bug Fixes
Enchantment Reload Fix
Encounter Zones Unlocked
Equip Enchantment Fix
Improvement Names Customized
MoreHUD
NPC AI Behavior Fixes
OSA
PapyrusUtil
Race Menu
Race Menu
Russian Helper
Skyrim Souls
Smart Souls
Unequip Quiver
Which quest's item

Требования:
Вы должны удалить hdtskyrimmempatch, если он у вас есть и у вас установлен ENB и есть расширение памяти SKSE\SSME\OSA. Почему?
Заменить нужные файлы в папке Директория игры\Data\SKSE\Plugins предварительно создав резервные копии старых.

Удаление:
Восстановить свои резервные копии или скачать оригинальные версии.

Требования:
Skyrim LE
HDT плагины
Внимание: Автор данной темы имеет право удалять комментарии пользователей, если комментарии не соответствуют правилам сайта. Если ВЫ как пользователь считаете, что ваш комментарий был удален без каких-либо на то причин и без основания, то можете написать автору данной темы, и спросить, за что был удален ВАШ комментарий, с предоставлением причины удаления, исходя от правил сайта.
1 2 »
Аватар Gutran
Gutran в 18:29:13, 15.01.2023
Нравится
Немного с установкой запарно, некоторые факлы надо в плагины, а некоторые вообще в папку.  Попробовал скайрим запускался, но вот новую игру или загрузить сохранение не удавалось((( Скидывал в папку SKSE плагины, а сам скс кинул в папку с игрой в замену. Из модов у меня фикс кирилицы, оса, HDT барахло, DAR, Fnis. Что у меня стояло то и ставил из папок с заменой, но не сканало. Ещё анти крах мод. В общем пробнул, откатил назад благо заменены были лишь скс и плагинов штук 5-6. Жаль не удалось проверить работу данных фиксов(( Вот список того что у меня из плагинов есть https://ibb.co/BBsxj8C
Аватар Dima19788791
Dima19788791 в 07:35:15, 19.12.2022
Нравится
а на секс лаб так можно добавиь?
Аватар Gmod25
Gmod25 в 16:15:44, 05.12.2022
Нравится
Ну поставил через MO 2, проверил, физика никуда не пропала, да и вылетов пока нет. При том, что я ничего не удалял, MO 2 просто сам заменил файлы. Побегаю, посмотрю, потом отпишусь
Аватар qwerzxcv123zxc
qwerzxcv123zxc в 13:31:43, 28.11.2022
Нравится
говно этот фикс. после установки этого исправления у меня игра перестала включаться и сейчас мне придется все моды которые он "правил"  придется перезакачивать
Аватар uriahheep
uriahheep в 11:31:20, 22.10.2022
Нравится (1)
Ну что сказать Тёзка Виталик.
Прошёл месяц, а может и больше, как я поставил этот Фикс себе на "UNP с физикой полный комплект".
Полёт нормальный. Ранее я бегал и сохранялся после каждых телодвижений. А теперь забываю о сохранениях.
Долго бегаю, а потом думаю, надо же сохраниться.
Мне кажется ты попал в точку. Я не знаю как это работает, но вижу что работает офигительно.
Тем более у меня Скайрим весь построен на телодвижухах, не на статике (деревья, цветы, города и прочая муть) А на монстрах, бойнях, беге, скачках, охоте и тд. Он живой. Одних животных наверно тысячи.
И работает на стареньком компе сейчас лучше чем до Фикса. Хотя мой старенький комп может быть и лучше чем новые Ноуты, т.к. всё же машина с кулерами, охлаждением и прочими прелестями. Короче я не Тех.наладчик компов.
Хотел поменять тот свой "UNP с физикой полный комплект" который выставлял на сайте, да что то лень мне суетиться.
Может легче туда дописать пару строк с ссылкой сюда, чтобы они сами себя обслужили. Всё таки там наверно за 50К скачек.

Вобщем СПАСИБО за фикс. По всем критериям и во времени, вроде это он так работает отлично. Ну больше нечему.
Я в отличие от других, сейчас НЕ сую много всякого говна в игру. Раньше сувал, сейчас всё по минимуму. Десятки тысяч монстров и животных, ну всё по минимуму. По Фен-Шую.
Аватар votblin
votblin в 13:45:10, 07.10.2022
Нравится
Как раз была тестовая глючная подборка модов . Изначально вылет каждые полчаса-час, тормоза, невовремя и неправильно срабатывающие скрипты, особенно во время массовых боев. Вылеты при загрузке локаций, при квиксейвах. Работало кое-как только если каждые полчаса перезапускать Скайрим. Фиксы реально это все смогли убрать. 3 часа игры, в том числе долгий массовый замес, лагов нет, локации грузятся быстро, вылета ни одного.
Аватар Mitradis
Mitradis в 00:12:56, 07.10.2022
Нравится (1)
Добавил фикс для SMP. Забыл про него совсем.
Аватар uriahheep
uriahheep в 11:59:08, 04.10.2022
Нравится
Привет ! А можно в двух словах написать что ты поменял в файле hdtphysicsextensions.dll
Дело в том что он работает с моим "UNP - c физикой полный комплект" и работает как и тот который был ранее.
То есть разницы визуально нет. Как тряслись сиси, так и трясутся.
А вот все вылеты прекратились. Даже вчера провёл в Черноземье целый день, а Черноземье всё таки сыроватая конструкция и то нет вылетов.
Такого не было ранее, тем более на "левых" землях.
Или это так работает hdtphysicsextensionscrashfix.dll ????
Вобщем в двух словах посвяти. Мне это надо знать, чтобы поменять тот свой "UNP - c физикой полный комплект" что на сайте для людей.
Там скачек тысячи. До ума довести да и людям отдать.
Неделю я конечно потестирую. Но нет вылетов. Этого быть не может. Это НОНСЕНС.
Аватар Mitradis
Mitradis в 15:21:42, 04.10.2022
Нравится
В "Решении" написано и я могу лишь повторить тоже самое. С помощью любого HEX редактора открыть нужный dll файл, по поиску ".log" (без ковычек) найти текст (в колонне декодированного текста) указывающий на расположение лога. Заменить самый первый символ этого пути к логу на ? В окне редактирования байтов изменить все остальные символы этого пути к логу на 00 (см. картинку).
Аватар uriahheep
uriahheep в 18:28:01, 02.10.2022
Нравится (1)
Сегодня опять скачал. А оказалось тут теперь всего ДВА файла.
hdtphysicsextensions.dll и hdtphysicsextensionscrashfix.dll
А было 5. Ну я конечно понял, что что то поменялось или было удалено, хотя в описаниях и в версии ничего об этом нет.
Короче. Поставил эти два файла. Файл hdtphysicsextensions.dll заменился.
Смотрю сиськотряс работает. Всё что работало, работает.
А играл я сегодня целый день в Готик-Проект Орфей (примочка к Скайриму), а он немного глючноват.
Но всё равно ни ОДНОГО вылета. Я аж офигел. Даже были моменты что ФПС на НОЛЬ и картинка зависает на пару сек, а потом опять 55-60.
Стопарь есть, а вылета то нет.
Оставил эти два файла. Перешёл в Скайрим и посмотрим, ЧО будет завтра.
А пока СПАСИБО. Те 5 файлов и эти 2 это разные вещи.
Аватар Mayler
Mayler в 11:06:01, 02.10.2022
Нравится
Немного от себя.

Если говорить об основном костяке "hdtPhysicsExtensions", состоящем из 3 файлов, то при замене на ваши физика груди и ягодиц немного меняется, видимо это уже зависит от того, какую физику использует сам пользователь - оригинальную или кастомную (я же использовал кастомную). Поэтому пришлось эти три файла откатить (дело вкуса).

С "Animation Loading Fix" у меня банально вылетает игра при попытки произвести загрузку сейва или просто продолжить игру. Сам автор говорил, что увеличил кол-во лимита анимаций, но со скольких и до скольких - не уточняется (если же это уточнение есть в комментариях  под его файлом - пожалуйста, но в описании я не заметил). Может это проблема моя, т.к. возможно я использую подобный ему плагин и поэтому происходит конфликт (или же лимит не удовлетворяет мое кол-во анимаций). По крайней мере, вроде как, я использовал этот плагин, но сейчас его удалил (сам искал причины вылетов).

Пока вроде как все стабильно, а там еще посмотрим...

upd: И почему-то у вас используется другой .dll-файл для AddItemMenu, т.к. у версии с Nexus'а нет цифры "2" в файле...
Аватар Mitradis
Mitradis в 13:58:37, 02.10.2022
Нравится
я взял его тут сайте. Там есть 3.2 и 3.13, я взял 3.2.
Аватар gardener
gardener в 08:06:51, 02.10.2022
Нравится
О пользе и вреде hdtskyrimmempatch можно спорить до бесконечности, одним он не нужен, другим необходим в зависимости от модов. Если не сложно, то добавьте пожалуйста его в Other SKSE Plugins (кому надо добавят). А ещё плагины JContainers и Dynamic Animation Replacer создают логи, может посмотрите. smile
Аватар Ревизор
Ревизор в 22:36:20, 02.10.2022
Нравится (1)
В ответ на ваш комментарий ниже и на этот. Шутка в том, что чистый 3BBB - эдтакая дикая солянка. Красивая, возможно, но проблемная...
Не буду вдаваться в разглаголы, суть в том, что в 90% случаев 3BBB может и будет требоваться hdtSkinnedMeshPhysics.dll (тот самый SMP)), который в обычных условиях работает через задний проход драугра. И вот именно этому плагину чаще всего и требуется мем патч (на самом деле нет, но это самый простой вариант заставить его работать правильно, а вот разбираться с дальнейшими проблемами уже никому не надо, да)))
На нексусе есть сборка COCO Body (3BBB) с преднастроенной физикой в куче вариантов. Создатель этой солянки реально помешана на "фигуристых" телах и шарит в их производстве wink И, насколько помню, мем патч у неё отличается от обычного (не буду утверждать)))
Если вдруг поставите, можете покидать её плагины мне? Чисто глянуть на досуге.

DAR и JContainers без логов можете забрать отсюда.

Ах, да, почернение лиц у спутников действительно не связано с мем патчем. Пропади у них волосы с физикой, можно было бы подумать, а так - нет.
На счёт "растягивания" частей тела - если дадите мне все свои плагины с припиской hdt... и с их конфигами (включая те, что могут быть в папке hdtSkinnedMeshConfigs) я смогу подсказать более точную причину такого бага, если там действительно замешана физика, а не кривые меши.
Аватар gardener
gardener в 00:56:17, 02.10.2022
Нравится
После удаления hdtSkyrimMemPatch баги будут появляться у тех, кто использует физику и тела 3BBB, так как наличие hdtSkyrimMemPatch обязательно для использования с 3BBB!
Аватар Mitradis
Mitradis в 01:02:07, 02.10.2022
Нравится
чем оно там обязательно? Что его авторы не использовали ENB? Или положили с телом на всякий случай. Кто будет запускать игру без енб.
Аватар gardener
gardener в 22:40:11, 01.10.2022
Нравится
А я не согласен по поводу того, что hdtSkyrimMemPatch вреден и бесполезен. После его удаления в моей игре у нпс начали вытягиваться на весь экран части тела, а у некоторых спутников из модов почернели лица. Так что не всё так однозначно!
Аватар Mitradis
Mitradis в 22:43:37, 01.10.2022
Нравится
Указанные баги никаким образом не коррелируются с ним.
Аватар Ревизор
Ревизор в 16:26:27, 30.09.2022
Нравится (2)
Итак. По поводу hdtskyrimmempatch. У него есть только две опции, которые напрямую связаны с Havok, и, разумеется, эти опции связаны только с памятью.

ReplaceDefaultHavokHeap: заставляет hkSkyrimMemoryAllocator::blockAlloc выделять память через _aligned_malloc с блоками, выровненными по 16 байтам.
doNotReleaseHavokResource: запрещает игровому движку Havok вызывать деструктор hkLoader, вероятно, для того, чтобы игре не приходилось выделять новые блоки и снова инициализировать эти данные.  Честно говоря, я ни в одном отладчике не видел, чтобы деструкторы грузились повторно. Крайне специфическая настройка, способная принести проблем больше, чем пользы.

Другие параметры памяти:
RecordFormHeapAllocateFailed: тупо регистрация заголовков в hdtSkyrimMemPatch.log, когда выделение FormHeap не удается, не более того.
FormHeapAllocateFromLargerSpace: изменяет флаги для flAllocationType при вызове VirtualAlloc на MEM_RESERVE | MEM_TOP_DOWN. MEM_TOP_DOWN заставит FormHeap выделять ресурсы для LAA игры (большое адресное пространство), поскольку Havok не может работать с LAA и использует только нижнюю часть адресного пространства (<2 ГБ).

Касательно hdtskyrimmempatch и ENB.
Ограничение LAA Havok не является проблемой, благодаря настройке Memory:ReduceSystemMemoryUsage, которая не позволяет выделять TESV.exe более 2 ГБ. Попытка исправлении функции в hdtskyrimmempatch быстрее приведёт к CTD.
А ещё не забываем, что в ENB есть строчка ExpandSystemMemoryX64))

А так же, при наличии исправлений SKSE/ОС-аллокаторов, типа Crash Fixes, при включении ReduceSystemMemoryUsage в ENB hdtskyrimmempatch не нужен. Более того, при наличии твиков есть вероятность получить ошибку 126 от hdtskyrimmempatch, который просто не загрузится (актуально для юзеров win 10-11).

********

Что по личным ощущениям. На чистом SLMP с полностью дефолтными настройками ENB без добавления модов из ПУ и сторонних модов я более-менее одинаково отыграл по 8 часов с тремя вариантами.
1. Без отключения логирования в плагинах. Без hdtskyrimmempatch. 3 CTD. Все три вылета связаны с плащами с физикой (одет плащ с HDT - переход в другую локацию - CTD).
2. С отключением логирования в плагинах. Без hdtskyrimmempatch. 0 CTD. Всё пофиг. Плащи-причёски с HDT, всё норм.
3. С отключением логирования в плагинах. С hdtskyrimmempatch. 9 CTD. Вылеты рандомные, систематике не поддаётся.
Выводы делайте сами)

********

И раз такая пьянка с отключением логов, то почему бы не отключить логи в самом SKSE и skse_loader? Если на то пошло, то один лишь SKSE логирует в разы больше HDT плагина (легко убедится, посмотрев на \My Games\Skyrim\SKSE\skse.log)
Аватар Mitradis
Mitradis в 22:07:31, 01.10.2022
Нравится
Спасибо за столь обстоятельное и углубленное разъяснение. Как я понял MemPatch совершенно вреден, я об этом так и думал (про LAA, ENB), но не имея ни знаний ни умений дебага не мог это понять. Теперь это уже стало фактически доказано и данный вопрос благодаря вам снимается.
На счет логирования как я понял это все же дает эффект, это радует, т.к. у меня еще оставались сомнения. Как я писал это все я выложил для тестирования. И щас уже можно переводить это в разряд подтвержденного и добавить отключение и для самого SKSE. Сделаю в ближайшее время.  Добавил и убрал ini файл с архива HDT плагина.
Спасибо еще раз! Именно такой пост я ждал!
Аватар gardener
gardener в 20:10:23, 29.09.2022
Нравится (2)
У кого проблема с физикой попробуйте поставить дефолтные значения в hdtPhysicsExtensions.ini
[Simulator]
numThreads=0
solverBufferSizeInKBs=4096
solverTau=0.8
solverDamp=0.8
solverIterations=8
solverMicrosteps=1
enableDeactivation=false
1 2 »
avatar
Gamer-mods.ru © 2012 - 2023. Все права защищены. Копирование материалов без указанной активной ссылки на данный сайт запрещено.