2013-12-16 4 views
4

Я шел через статью о реализации ядра Linux радикс дерева, ссылка статьи упоминается ниже:Почему в Linux ядре radix_tree_preload возвращается с прерываниями отключенных

http://lwn.net/Articles/175432/

В этой статье упоминается, что radix_tree_preload выделяет достаточно так что последующая вставка в дереве не сработает. Хотя он выделяет структуры на основе каждого процессора, и, следовательно, функция возвращается с отключенным отключением. Ответственность вызывающего абонента заключается в том, чтобы вызвать radix_tree_preload_end, чтобы обеспечить возможность преемственности.

Мой вопрос:

1) Почему radix_tree_preload выделяет структуру на основе каждого процессора?

2) Когда пользователь должен вызывать radix_tree_preload_end? Это сразу после radix_tree_insert?

3) Не влияет ли это на производительность, поскольку деревья оснований используются для операций кеша страниц, и, следовательно, любая вставка приведет к отключению preemption? Поправьте меня, если мое понимание ошибочно.

ответ

2

(1) Чтобы гарантировать, что ваш запрос выполнен в соответствии с требованиями, один процессор будет обрабатывать всю последовательность вставки. Если вы переместите свой процесс на другой процессор до того, как структура будет полностью инициализирована, другой процессор будет работать из собственной копии каждого процессора (для преимуществ переменных в каждом процессоре см. Также, например, here), которые будут отличаться, если некоторые работы уже начались на начальном процессоре.

(2) Таким образом, вы хотите выделить достаточное количество памяти, отключить предварительную установку, вставить/удалить, а затем снова включить преемственность, все в контексте, который первоначально начал последовательность. Это означает, что да, вы _preload, _insert, а затем _preload_end сразу после того, как ваша система снова выиграет от преимущественного использования.

(3) Существует небольшое снижение производительности, но для обеспечения целостности данных, если вы выберете переменные из одного процессора, этого трудно (невозможно) избежать. Разработчики ядра должны оценивать преимущества, более важные, чем недостатки, и они в целом правы.

+0

Спасибо за ответ. – pastum

 Смежные вопросы

  • Нет связанных вопросов^_^