AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.03.2024, 18:42   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
? Разные настройки отладки в кластере аосов Ax2012 R3
Обнаружил странную вещь.
У нас на рабочей на части аосов отладка выключена, а на части включена.
Это приводит к неожиданным эффектам.

При старте аоса (SysCompileIL::synchronizeAssembly()) аксапта сравнивает файл записанный в sysXppAssembly с именем
X++:
sysXppAssembly.FileName == 'Dynamics.Ax.Application.dll'
и такой же из папки Xppil аоса (сравнивает хеши) и если отличаются, то выгружает из базы (из таблицы sysXppAssembly) все dll в папку Xppil.
Тут все нормально.

А дальше идет прикол.
В том же методе (SysCompileIL::synchronizeAssembly()) стоит вызов

X++:
    // Disable jit if debugging is enabled on AOS
    SysCompileIL::setDebuggingMode();
в котором

X++:
    select firstOnly IsDebug from sysXppAssembly where sysXppAssembly.FileName == #XppDllName;
    if (sysXppAssembly && sysXppAssembly.IsDebug != Debug::isDebugOnAOSEnabled())
    {
		... 
		Microsoft.Dynamics.Ax.Xpp.XppILGenerator::createManifestAssembly(#XppDllName, assemblyPath, AppVersion, Debug::isDebugOnAOSEnabled(), false);
		...
		SysCompileIL::uploadFiles(modifiedFiles, true, true);
		...
    }
т.е. она заново перегенерирует только одну Dynamics.Ax.Application.dll при этом признак отладки ставит в соответствие с настройками текущего аоса (!!!)
(конечно это будет только если настройка отладки на аосе отличается от настройки аоса, на котором собирали CIL)

Поэтому если рестартануть аос с ВКЛЮЧЕННОЙ отладкой то в sysXppAssembly для Dynamics.Ax.Application.dll будет создана запись с взведенным признаком isDebug и с dll в поле SysXppAssembly.File скомпилированной как отладочная.
А если рестартануть аос с ВЫКЛЮЧЕННОЙ отладкой, то в sysXppAssembly для Dynamics.Ax.Application.dll будет перезаписана запись со снятым признаком isDebug и с dll в поле SysXppAssembly.File скомпилированной как релизная.

При этом еще при рестарте в SysCompileIL::synchronizeAssembly() будут заново из базы закачаны все *.dll, *.netModule, *.pdb файлы, на что уйдет время (притом что изменялся только один dll файл)

По-моему тут какая-то ошибка.
Явно авторы закладывались на то что все аосы в кластере имеют одну и ту же настройку отладки.
На практике это не так. Хотя бы один отладочный аос все любят на рабочей держать.

Кто-нибудь разбирался с этой особенностью ?
От этого ничего не ломается ?
(легко получить, что часть компонентов сборки собрана c одним параметром отладки, а другая с другим)

Я думаю что как минимум надо держать в sysXppAssembly две записи для 'Dynamics.Ax.Application.dll' - отладочную и релизную и для выгрузки и сравнений выбирать одну из двух в соответствие с настройками аоса. Но тогда уж и остальной цил тоже надо в двух версиях держать.

Либо они принципиально не отличаются поэтому прокатит и так как сейчас и достаточно просто пофиксить сравнение, чтобы зря не выгружала файлы там, где в этом нет необходимости (оптимизируя тем самым время старта АОСа) ?
За это сообщение автора поблагодарили: Товарищ ♂uatr (4), sukhanchik (8).
Старый 05.03.2024, 19:19   #2  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
268 / 829 (28) +++++++
Регистрация: 23.10.2012
Привет.
С точки зрения библиотеки это просто дополнительные инструкции, что занимают место и как следствие их наличия снижают быстродействие. Поэтому на тему отказоустойчивости не стоит даже и думать.
Концепция хранить 2 сборки выглядит прикольно, только в угоду чему, брать на себя издержки по двойной компиляции. Тут всё зависит от культуры разработки в компании.

Последний раз редактировалось Товарищ ♂uatr; 05.03.2024 в 19:29.
За это сообщение автора поблагодарили: Logger (3).
Старый 05.03.2024, 19:27   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Склоняюсь к тому, чтобы захардкодить признак отладки независимо от настроек аоса и все.
Старый 05.03.2024, 20:42   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
С точки зрения библиотеки это просто дополнительные инструкции, что занимают место и как следствие их наличия снижают быстродействие. Поэтому на тему отказоустойчивости не стоит даже и думать.
Меня беспокоило как будут сочетаться куски одной и той же сборки собранные в разном режиме (Debug и Release). Ну похоже что работают. Так как пока проблем не было.
Насчет быстродействия еще добавлю что в аксапте для Debug версии запрещен JIT. Это тоже может немного снизить скорость.
Старый 05.03.2024, 22:41   #5  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
268 / 829 (28) +++++++
Регистрация: 23.10.2012
"Debug версии запрещен JIT" прям покоя не давало...в итоге это скорее трудности перевода...
CIL вот эта штука собирает: Microsoft.Dynamics.AX.Xpp.ILGenerator.dll
Интересует: Microsoft.Dynamics.Ax.Xpp.XppILGenerator.createManifestAssembly
Параметр "isDebug" отвечает за добавление флага DebuggableAttribute.DebuggingModes.DisableOptimizations к переменной значение которой уже равно Default.
В итоге получаем "Tracking on, JIT optimizations disabled"
Подробнее тут можно почитать: https://learn.microsoft.com/en-us/do...s?view=net-8.0

Последний раз редактировалось Товарищ ♂uatr; 05.03.2024 в 23:00.
Старый 06.03.2024, 11:01   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да, походу JIT вообще не отключаемый
https://stackoverflow.com/questions/...et-application
Теги
cil

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxse: February 2019 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 1 27.03.2019 13:44
dynamicsaxse: November 2018 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 15.11.2018 09:11
dynamicsaxse: February 2018 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 21.03.2018 21:11
dynamicsaxse: January 2018 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 06.02.2018 23:11
dynamicsaxse: December Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 04.01.2018 03:46

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:35.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.