Архитектура x86 обеспечивает аппаратную одношаговую ловушку для отладки. На сколько это тормозит работающую программу?
Если, скажем, функция ядра Linux была создана, чтобы делать только один шаг процесса, насколько медленнее будет этот процесс? У кого-нибудь есть хорошая оценка?
Мне интересно это после того, как я провел неделю, выискивая ошибку в потоках. Было бы хорошо, если бы эти ошибки могли быть воспроизведены. Как насчет функции, которая выполняла два потока последовательно, чередуя выполнение команды в одном потоке и затем инструкции в другом, предсказуемым образом. Я имею в виду генератор псевдослучайных чисел, который будет генерировать строку битов - 0 означает выполнение инструкции в потоке 1, 1 означает выполнение инструкции в потоке 2.
Тогда вы могли бы посеять PRNG и получить воспроизводимое чередование инструкций. Различные семена PRNG будут давать разные схемы чередования. Вы можете запустить тестовый набор под кучей семян PRNG, и если вы нашли тот, который вызвал сбой, воспроизведите его.
Кто-нибудь слышал о чем-нибудь подобном?
Обновить:
Как это можно сделать?
Предположим, мы работаем на чем-то вроде Core i5, где у вас есть 4 состояния процессора и 2 ядра. Мы используем одношаговую ловушку для отскока процесса от его пользовательского пространства к его пространству ядра. Так что это два государства, верно? Тогда у нас есть другой поток, работающий на другом ядре с его пользовательским пространством и состояниями ядра, верно? Есть что-то вроде спин-блокировки (возможно, двух спин-блокировки), синхронизирующей два потока ядра. Каждый из них блокируется, в то время как другой выполняет несколько пользовательских инструкций, затем они синхронизируются и обмениваются ролями.
Похоже, у нас просто правильное количество потоков и ядер, чтобы все сразу помещалось на чип. Но как быстро он работает?
Мы могли бы просто попробовать это. Кто-нибудь может написать код ядра. Или, может быть, кто-то знает.
Все эти необычные вещи, которые делают эти новые фишки. Я был бы впечатлен и не совсем удивлен, если бы он бежал быстро.