Книга: Разработка ядра Linux
Когда лучше использовать данные, связанные с процессорами
Когда лучше использовать данные, связанные с процессорами
Использование данных, связанных с процессорами, позволяет получить ряд преимуществ. Во-первых, это ослабление требований по использованию блокировок. В зависимости от семантики доступа к данным, которые связаны с процессорами, может оказаться, что блокировки вообще не нужны. Следует помнить, что правило "только один процессор может обращаться к этим данным" является всего лишь рекомендацией для программиста. Необходимо специально гарантировать, что каждый процессор работает только со своими данными. Ничто не может помешать нарушению этого правила.
Во-вторых, данные, связанные с процессорами, позволяют существенно уменьшить недостоверность данных, хранящихся в кэше. Это происходит потому, что процессоры поддерживают свои кэши в синхронизированном состоянии. Если один процессор начинает работать с данными, которые находятся в кэше другого процессора, то первый процессор должен обновить содержимое своего кэша. Постоянное аннулирование находящихся в кэше данных, именуемое перегрузкой кэша (cash thrashing), существенно снижает производительность системы. Использование данных, связанных с процессорами, позволяет приблизить эффективность работы с кэшем к максимально возможной, потому что в идеале каждый процессор работает только со своими данными.
Следовательно, использование данных, которые связаны с процессорами, часто избавляет от необходимости использования блокировок (или снижает требования, связанные с блокировками). Единственное требование, предъявляемое к этим данным для безопасной работы, — это запрещение вытеснения кода, который работает в режиме ядра. Запрещение вытеснения — значительно более эффективная операция по сравнению с использованием блокировок, а существующие интерфейсы выполняют запрещение и разрешение вытеснения автоматически. Данные, связанные с процессорами, можно легко использовать как в контексте прерывания, так и в контексте процесса. Тем не менее следует обратить внимание, что при использовании данных, которые связаны с текущим процессором, нельзя переходить в состояние ожидания (в противном случае выполнение может быть продолжено на другом процессоре).
Сейчас нет строгой необходимости где-либо использовать новый интерфейс работы с данными, которые связаны с процессорами. Вполне можно организовать такую работу вручную (на основании массива, как было рассказано ранее), если при этом запрещается вытеснение кода в режиме ядра. Тем не менее новый интерфейс более простой в использовании и, возможно, позволит в будущем выполнять дополнительные оптимизации. Если вы собираетесь использовать в своем коде данные, связанные с процессорами, то лучше использовать новый интерфейс. Единственный недостаток нового интерфейса — он не совместим с более ранними версиями ядер.
- Страницы памяти
- Зоны
- Получение страниц памяти
- Уровень слябового распределителя памяти
- Интерфейс слябового распределителя памяти
- Статическое выделение памяти в стеке
- Отображение верхней памяти
- Выделение памяти, связанной с определенным процессором
- Новый интерфейс percpu
- Когда лучше использовать данные, связанные с процессорами
- Какой способ выделения памяти необходимо использовать
- Когда нужен постскриптум в бизнес-тексте?
- Улучшенная производительность
- Улучшенный оптимизатор запросов
- Улучшенная стратегия вычисления предиката IN и условий, объединенных по OR
- Улучшенное время отклика для версии SuperServer
- Улучшенный протокол локальных соединений (XNET)
- Как я нашла «правильных» потребителей, когда искала «неправильных»
- Когда старая школа молода
- Достоверные данные
- Что происходит, когда бренды растут или идут на спад
- 1.4 Структуры данных, связанные с драйверами устройств Windows
- Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста