Бумага, о которой вы спрашиваете, выглядит как "Respec: эффективное онлайн-многопроцессорное воспроизведение с помощью спекуляций и внешнего детерминизма" .В документе упоминается:
Мы изменили ядро Linux для реализации наших методов.
и
Поэтому мы создали новый примитив Linux, называемый многопоточным форком, который создает дочерний процесс с тем же числом потоков, что и его родительский.
Поэтому, когда в статье говорится, что
Respec проверяет только поток, когда он выполняется в известной безопасной точке: вход в ядро, выход из ядра или некоторые прерывистые сны в ядре, которыемы решили быть в безопасности.Поток, который инициирует многопоточную ветвь, создает барьер, на котором он ожидает, пока все другие потоки не достигнут безопасной точки.Как только все потоки достигают барьера, исходный поток создает контрольную точку, а затем позволяет другим потокам продолжать выполнение.
Я бы предположил, что среди модификаций, которые они внесли в ядро Linux, была логика, что потоки врегистрируемый процесс «войдет» в барьер, когда он достигнет одной из этих «безопасных точек» (я также предположил бы, только если был создан «многопоточный форк», созданный для создания барьера).Поскольку это происходит в ядре, было бы достаточно легко реализовать барьер - на самом деле ничего динамического не происходит.Модифицированное ядро имеет барьеры, реализованные в этих стратегически безопасных точках.
На самом деле я не читал статью (просто просмотрел несколько бит).Мне не совсем понятно, что может произойти, если один или несколько потоков выполняют работу, не требующую входа в ядро в течение длительного периода времени - похоже, что система зависит от потоков, которые достигают этих явных безопасных точек.Поэтому потоки не должны слишком долго задерживаться в цикле, интенсивно использующем ЦП (что, вероятно, не является проблемой для подавляющего большинства программ):
Обратите внимание, что фактическое время выполнения эпохи может быть большечем интервал эпохи из-за нашей реализации барьера;контрольная точка не может быть взята, пока все нити не достигнут барьера.