KernelThreadSanitizer: инструмент для поиска состояния гонки в ядре ОС Linux


KernelThreadSanitizer: инструмент для поиска состояния гонки в ядре ОС Linux

Андрей Коновалов. Начало семинара - 23 ноября 2015 г.

Операционные системы, построенные на основе ядра Linux, становятся популярнее с каждым днем. Поиск и исправление ошибок в ее ядре, особенно ошибок безопасности, является важной задачей. В докладе представлен детектор KernelThreadSanitizer, позволяющий находить состояния гонки в ядре Linux. Состоянием гонки называется ситуация, когда два или более потока исполнения программы могут одновременно осуществить доступ к одной области памяти (например, переменной) и как минимум один из этих доступов является записью.

Для поиска состояний гонки в приложениях пространства пользователя активно применяется детектор ThreadSanitizer. Идеи, лежащие в основе ThreadSanitizer, были использованы для создания KernelThreadSanitizer – детектора для поиска состояний гонки в ядре Linux.

Созданный детектор работает следующим образом. Он резервирует часть памяти и использует ее для хранения информации о последних доступах к памяти ядра. Кроме того KernelThreadSanitizer отслеживает использование ядром различных примитивов синхронизации и сохраняет информацию о том, когда тот или иной поток последний раз синхронизировался с каждым из остальных. С помощью компиляторного инструментирования перед каждым обращением к памяти добавляется проверка того, не находится ли это обращение в состоянии гонки с каким-то из предыдущих. Когда состояние гонки обнаружено, детектор выводит сообщение об ошибке.

Инструментация кода была реализована как проход компилятора GCC, а модуль, анализирующий обращения к памяти и использование примитивов синхронизации, – как компонент ядра.

Семинар группы

Технологии программирования

Перейти к списку семинаров ИСП РАН