Главная » Ядро Linux » Когда лучше использовать данные, связанные с процессорами

0

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

Во-вторых, данные, связанные с процессорами,  позволяют существенно умень-

шить  недостоверность данных,   хранящихся в кэше.  Это  происходит потому,  что процессоры поддерживают свои кэши  в синхронизированном состоянии. Если  один процессор начинает работать  с данными, которые  находятся  в кэше  другого процессора,  то первый  процессор должен  обновить содержимое своего  кэша.  Постоянное аннулирование  находящихся в кэше  данных,   именуемое перегрузкой кэша   (cash thrashing), существенно снижает  производительность системы. Использование данных,  связанных с процессорами,  позволяет приблизить эффективность работы  с кэшем  к максимально возможной, потому  что в идеале  каждый  процессор работает только  со своими  данными.

Следовательно, использование данных,  которые  связаны с процессорами, часто избавляет от необходимости использования блокировок (или  снижает  требования, связанные с блокировками). Единственное требование, предъявляемое к этим  данным для безопасной работы,  — это запрещение вытеснения кода,  который работает в режиме  ядра.  Запрещение вытеснения — значительно более эффективная операция  по сравнению с использованием блокировок, а существующие интерфейсы выполняют запрещение и разрешение вытеснения автоматически. Данные, связанные с процессорами, можно  легко использовать как в контексте прерывания, так и в контексте  процесса. Тем  не  менее  следует обратить  внимание, что при  использовании данных,  которые  связаны с текущим  процессором, нельзя  переходить  в состояние ожидания {в противном случае  выполнение может  быть  продолжено на другом процессоре).

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

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии