Уровень слябового распределителя памяти

Уровень слябового распределителя памяти

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

Одна из наибольших проблем, связанных со списком свободных ресурсов в ядре, это то, что над ними нет никакого централизованного контроля. Когда ощущается недостаток свободной памяти, нет никакой возможности взаимодействовать между ядром и всеми списками свободных ресурсов, которые в такой ситуации должны уменьшить размер своего кэша, чтобы освободить память. В ядре нет никакой информации о случайно созданных списках свободных ресурсов. Для исправления положения и для универсальности кода ядро предоставляет уровень слябового распределения памяти (slab layer), который также называется просто слябовым распределителем памяти (slab allocator). Уровень слябового распределения памяти выполняет функции общего уровня кэширования структур данных.

Концепции слябового распределения памяти впервые были реализованы в операционной системе SunOS 5.4 фирмы Sun Microsystems[65]. Для уровня кэширования структур данных в операционной системе Linux используется такое же название и похожие особенности реализации.

Уровень слябового распределения памяти служит для достижения следующих целей.

• Часто используемые структуры данных, скорее всего, будут часто выделяться и освобождаться, поэтому их следует кэшировать.

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

• Список свободных ресурсов обеспечивает улучшенную производительность при частых выделениях и освобождениях объектов, так как освобожденные объекты сразу же готовы для нового выделения.

• Если распределитель памяти может использовать дополнительную информацию, такую как размер объекта, размер страницы памяти и общий размер кэша, то появляется возможность принимать в критических ситуациях более интеллектуальные решения.

• Если кэш организован, как связанный с определенным процессором (т.е. для каждого процессора в системе используется свой уникальный отдельный кэш), то выделение и освобождение структур данных может выполняться без использования SMP-блокировок.

• Если распределитель памяти рассчитан на доступ к неоднородной памяти (Non-Uniform Memory Access NUMA), то появляется возможность выделения памяти с того же узла (node), на котором эта память запрашивается.

• Хранимые объекты могут быть "окрашены", чтобы предотвратить отображение разных объектов на одни и те же строки системного кэша.

Уровень слябового распределения памяти в ОС Linux был реализован с учетом указанных принципов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.1.1. Уровень 1 — начальный уровень

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

2.1.1. Уровень 1 — начальный уровень Находясь на начальном уровне, организация обычно не может обеспечить устойчивый процесс разработки и сопровождения ПО. Когда в организации отсутствует культура управления, преимущества применения хороших решений в процессе


2.1.2. Уровень 2 — повторяемый уровень

Из книги Основы AS/400 автора Солтис Фрэнк

2.1.2. Уровень 2 — повторяемый уровень На повторяемом уровне установлены политики управления проектом разработки и процедуры их применения. Планирование и управление новым проектом базируется на опыте работы с подобными проектами. Целью достижения уровня 2 является


2.1.3. Уровень 3 — определенный уровень

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

2.1.3. Уровень 3 — определенный уровень На определенном уровне, стандартный процесс разработки и сопровождения ПО в рамках организации надежно документирован, включая как процессы программной инженерии, так и управления, и эти процессы интегрированы в единое целое. Этот


2.1.4. Уровень 4 — управляемый уровень

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

2.1.4. Уровень 4 — управляемый уровень На управляемом уровне организация устанавливает количественные показатели качества как для программных продуктов, так и для процессов их разработки. Для важных работ производственных процессов всех проектов выполняются измерения


2.1.5. Уровень 5 — оптимизирующий уровень

Из книги Разработка ядра Linux автора Лав Роберт

2.1.5. Уровень 5 — оптимизирующий уровень Находясь на оптимизирующем уровне, вся организация полностью сосредоточена на непрерывном усовершенствовании производственного процесса. Организация обладает средствами профилактического выявления слабых мест процесса и его


ГЛАВА 8. УРОВЕНЬ 2: ПОВТОРЯЕМЫЙ УРОВЕНЬ

Из книги UNIX — универсальная среда программирования автора Пайк Роб

ГЛАВА 8. УРОВЕНЬ 2: ПОВТОРЯЕМЫЙ УРОВЕНЬ 8.1. Управление требованиями Группа ключевых процессов для уровня 2: повторяемый уровень.Цель управления требованиями состоит в том, чтобы заказчик и разработчики смогли полностью согласовать требования, выдвигаемые к проекту


ГЛАВА 9. УРОВЕНЬ 3: ОПРЕДЕЛЕННЫЙ УРОВЕНЬ

Из книги автора

ГЛАВА 9. УРОВЕНЬ 3: ОПРЕДЕЛЕННЫЙ УРОВЕНЬ 9.1. Координация производственного процесса организации Группа ключевых процессов для уровня 3: определенный уровеньЦель группы ключевых процессов «Координация производственного процесса организации» заключается в установлении


Защита ОС (уровень 40)

Из книги автора

Защита ОС (уровень 40) Уровень 40 появился в версии V1R3 OS/400. Сегодня все новые AS/400 поставляются именно с этим уровнем защиты, а не 10, как ранее. Но старые версии OS/400 и при модернизации сохраняют текущий уровень, установленный заказчиком. Теперь пароль начальника защиты


Защита C2 (уровень 50)

Из книги автора

Защита C2 (уровень 50) Уровень 40 обеспечивает системе достаточную степень защищенности в большинстве случаев. Однако, некоторым фирмам, выполняющим государственные заказы, необходим уровень защиты, сертифицированный правительством США. Таких сертификатов несколько,


3.2.4 Транспортный уровень (TCP)

Из книги автора

3.2.4 Транспортный уровень (TCP) Протокол TCP выполняет функции транспортного уровня (transport layer) и обеспечивает надежную службу пересылки данных для приложений. В TCP/IP встроен специальный механизм, гарантирующий пересылку данных без ошибок и пропусков и в той


3.2.5 Транспортный уровень (UDP)

Из книги автора

3.2.5 Транспортный уровень (UDP) Приложение может послать другому приложению независимое сообщение с помощью протокола UDP, который добавляем к сообщению заголовок и формирует элемент, называемый датаграммой UDP или сообщением UDP.UDP передает исходящие сообщения в IP и


27.1.1.4. Уровень приложений

Из книги автора

27.1.1.4. Уровень приложений Этот уровень является вершиной модели TCP/IP. На этом уровне работают практически все распространенные утилиты и службы: DNS, Telnet, WWW. Gopher, WAIS. SNMP, FIT, TFTP, SMTP, POP, IMAP.Таблица 27.3 показывает соответствие уровней стека протокола TCP/IP семиуровневой модели


Устройство слябового распределителя памяти

Из книги автора

Устройство слябового распределителя памяти Уровень слябового распределения памяти делит объекты на группы, которые называются кэшами (cache). Разные кэши используются для хранения объектов различных типов. Для каждого типа объектов существует свой уникальный кэш.


Интерфейс слябового распределителя памяти

Из книги автора

Интерфейс слябового распределителя памяти Новый кэш можно создать с помощью вызова следующей функции.kmem_cache_t * kmem_cache_create(const char *name, size_t size, size_t offset, unsigned long flags,void (*ctor)(void*, kmem_cache_t*, unsigned long),void (*dtor)(void*, kmem_cache_t*, unsigned long));Первый параметр — это строка, которая содержит имя кэша.


Пример использования слябового распределителя памяти

Из книги автора

Пример использования слябового распределителя памяти Давайте рассмотрим пример из реальной жизни, связанный с работой со структурами task_struct (дескрипторы процессов). Показанный ниже код в несколько более сложной форме приведен в файле kernel/fork.c.В ядре определена