Драйвер устройства Linux для системы SMP

Я разработал драйвер блочного устройства Linux для устройства CD. Драйвер работает хорошо, но теперь есть требование, чтобы он работал в системе SMP. Когда я провел пробный запуск в системе SMP, я обнаружил, что производительность драйвера снижается. Битрейт для DATA CD значительно снизился по сравнению с одноядерной системой. Итак, я понимаю, что мой драйвер нужно изменить, чтобы сделать его безопасным для SMP.

В моем драйвере я использовал: 1. Потоки ядра 2. Мьютекс 3. Семафор 4. Завершения

Моя система SMP: ARM Cortex-A9 Dual Core 600 МГц

Может ли кто-нибудь сказать мне, какие факторы я должен учитывать при переносе?


person Souvik    schedule 17.02.2012    source источник
comment
Загляните в файл Documentation/lockstat.txt, это может быть полезно. (Не предназначен как полный ответ о том, как написать достойный код ядра с поддержкой SMP, но может помочь вам определить неправильное использование блокировки..)   -  person sarnold    schedule 17.02.2012


Ответы (1)


Обычно для систем SMP общие ресурсы (ресурсы ввода-вывода) и глобальные переменные должны обрабатываться таким образом, чтобы одновременное выполнение задачи не перезаписывало, не повреждало данные. Для этого вы можете использовать spin_locks, семафоры и т. д., чтобы гарантировать, что только core будет выполнять операции над этим блоком/задачей одновременно. Это логическая реализация, которую вы должны определить в драйвере устройства с потенциальными рисками, такими как ISR, операции чтения и записи, а также определить несколько точек входа вашего драйвера устройства и центральную задачу (в драйвере), к которой они / будут / будут идти / идти.

person Sajjad Ahmed    schedule 03.05.2017