Использовать обработчик TraceEvent можно только с инструментальным ядром
Насколько я понимаю procnto-smp и procnto-smp-instr можно заменять друг на друга в рантайме (или нет?) ? Мне эта информация попадалась вскольз во время прочтения документации. Есть четкое описание этой операции, дабы ее можно было реализовать в виде небольшой root-утилитки?
Если установить для потока runmask на определённое процессорное ядро, то можно исключить миграцию потока по различным ядрам.
Так и делаю, работает отлично, но execution time в 1 мс с использованием TraceEvent handler несколько удручает. хотя и терпимо
Кстати есть возможность настроить TraceEvent handler таким образом, чтобы программу его использующую можно было с помощью tracelogger профилировать? например сейчас я использую
TraceEvent(_NTO_TRACE_ADDEVENT, _NTO_TRACE_THREAD, _NTO_TRACE_THNANOSLEEP);//добавили event
TraceEvent(_NTO_TRACE_SETEVENTPID, _NTO_TRACE_THREAD, _NTO_TRACE_THNANOSLEEP, getpid());//включили фильтрацию
TraceEvent(_NTO_TRACE_ADDEVENTHANDLER, _NTO_TRACE_THREAD, _NTO_TRACE_THNANOSLEEP, thread_run_eh, data);//подключили обработчик
nanosleep(&time, NULL);//<===TraceEvent handled here
TraceEvent(_NTO_TRACE_DELEVENTHANDLER, _NTO_TRACE_THREAD, _NTO_TRACE_THNANOSLEEP);//отключили обработчик
Но запуск программы с таким кодом под tracelogger дает пустой .kev-файл на выходе.
Я знаю что можно сделать зависимое управление через ключ -d1 и команды START/STOP, меня интересует независимый метод.
UPD: Описанный ваше код справляется с этой задачей проблема была в различных значениях TSC-регистров на разных CPU(изменил пока тестил) и парсеры некорретно ее обрабатывали.
Динамической маршрутизации прерываний, после загрузки QNX, не предусмотрено
Что случится, если такую возможность предусмотреть? Ведь под ring0 выполняться получается, адреса все есть. Что сломается в системе, если я начну в TraceEvent handler-e изменять привязку интераптов на ядра? и как этого избежать. (пусть даже чисто теоретически).
Для x86, генерация и обработка IPI находится в ядре QNX и не изменяется через callout'ы startup.
На каких архитектурах это в принципе возможно?
Вот по этой ссылке в Wiki не шибко подробно упоминаются smp-возможности системы на этапе startup. Судя по вашему категоричному комментарию эту ссылку читать мне не имеет смысла.