Тип работы:
Предмет:
Язык работы:


Разработка и реализация модуля ядра Linux для эффективного выделения памяти под объекты малого размера

Работа №127928

Тип работы

Бакалаврская работа

Предмет

информатика

Объем работы31
Год сдачи2022
Стоимость4200 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
12
Не подходит работа?

Узнай цену на написание


Введение 3
Постановка задачи 5
Обзор литературы 6
Глава 1. Особенности управления памятью в Linux 7
1.1 Пространство ядра и пространство пользователя 7
1.2 Виртуальная память 7
1.3 Kmalloc 8
1.4 Заготовленные кэши 8
1.4 Распределитель страниц 9
1.5 Вывод 9
Глава 2. Zpool API 10
2.1 Zbud 10
2.2 Z3fold 12
2.3 Zsmalloc 13
2.4 Вывод 14
Глава 3. Ztree 15
3.1 Идеи для повышения производительности аллокаторов 15
3.2 Организация блоков и деревьев 15
3.3 Приемы оптимизации 16
3.4 Отображение идентификаторов 17
3.5 Вывод 17
Глава 4. Инструменты тестирования 18
4.1 Zswap 18
4.2 Zram 18
4.3 Qemu 19
4.4 Fio 20
4.5 Ktime 20
4.6 Вывод 21
Глава 5. Сравнительное тестирование 22
5.1 Среднее время zpool операций 22
5.2 Худшее время zpool операций 24
5.3 Частота превышения порогов zpool операциями 25
Выводы 27
Заключение 28
Список литературы 29
Приложения 31

Распространение вычислительной техники в различных сферах человеческой деятельности сопровождается развитием операционных систем. Разнообразие вычислительных устройств порождает множество типов ОС: мобильные, распределенные, реального времени, для суперкомпьютеров, для встроенных систем и другие. Стоит отметить, что это деление весьма условно — одна и та же ОС может быть отнесена к нескольким разным типам, между которыми отсутствуют четкие границы.
В общем случае современные ОС состоят из трех основных компонент: ядро, системные библиотеки, оболочка и прикладные программы. Ядро является центральной частью операционной системы, управляет ее ресурсами и процессами. Многие, на первые взгляд, совершенно различные операционные системы, такие как Android для смартфонов и Red Hat Enterprise Linux, используемый в основном на серверах, работают на одном общем ядре, пусть и с разными конфигурациями и наборами дополнительных патчей.
На данный момент операционные системы на базе ядра Linux используются повсеместно: домашние компьютеры, серверы, мобильные устройства, рабочие станции, суперкомпьютеры. В последнее десятилетие бурно развиваются дистрибутивы Linux для применения во встраиваемых системах. Новые версии ядра поддерживают широкий спектр архитектур — не только классические x86 и ARM, но и более экзотические, такие как RISC-V.
Вычислительные устройства могут в процессе работы могут сталкиваться с нехваткой оперативной памяти и простое увеличение ее объема не всегда возможно по техническим или экономическим причинам. Особенно это актуально для встраиваемых и мобильных систем, а также недорогих ноутбуков. Данную проблему можно решать и другим способом — сжатием неиспользуемых страниц памяти для экономии места в ОЗУ. В сжатом виде такие страницы занимают меньший объем и поэтому могут более компактно размещаться в некотором едином хранилище.
В зависимости от алгоритма сжатия и содержимого размер сжатой страницы может варьироваться в широких пределах, то есть в одних случаях он может почти не измениться по сравнению с размером исходной страницы, а в других — сократиться в несколько раз. С учетом того, что объекты со временем добавляются в хранилище и удаляются из него, возникает проблема фрагментации, которая способна свести на нет экономию памяти за счет сжатия. Другим крайне важным аспектом является производительность, так как при слишком низкой скорости операций со страницами из хранилища, может оказаться, что использование простой подкачки страниц будет эффективнее чем их сжатие. Для систем реального времени также стоит учитывать задержки, связанные со временем выполнения операций в худшем случае.
В данной работе будет представлен новый аллокатор, названный ztree. Главной целью при его разработке было достичь сочетания высокой плотности хранения и скорости работы, а также низких задержек.
Постановка задачи
Целью данной работы является разработка и реализация эффективного модуля ядра Linux для выделения памяти для сжатых страниц. Для достижения поставленной цели требуется решить несколько задач, которые приведены ниже.
Задачи:
> Изучить основы управления памятью в Linux
> Рассмотреть существующие решения и изучить их исходный код
> Предложить идеи для повышения эффективности аллокаторов
> Реализовать данные идеи и провести отладку кода
> Выбрать подходящие инструменты тестирования
> Провести с их помощью сравнительное тестирование реализованного модуля и существующих решений

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Были изучены специализированные способы выделения памяти в ядре Linux, такие как распределитель страниц и заготовленные кэши. Использование этих методов позволяет оптимизировать процесс выделения памяти.
Основным недостатком существующих в ядре аллокаторов является медленный обход связного списка при добавлении или удалении объектов. Также zbud и z3fold оперируют отдельными страницами, что существенно ограничивает плотность хранения объектов. В случае zsmalloc дополнительными недостатками выступают зависимость от MMU и накладные расходы, связанные с модификацией таблицы страниц.
Благодаря использованию страничных блоков и красно-черных деревьев, представленный в данной работе аллокатор ztree предлагает плотность хранения данных, близкую к zsmalloc и высокую производительность.
Тесты показали, что стандартные аллокаторы могут иметь задержки при добавлении или удалении объектов, сопоставимые с задержками ввода-вывода в жестком диске. Все операции с объектами в ztree выполняются за O(log N), где N — общее число объектов в пуле. Это позволяет ограничить время выполнения операций в худшем случае по сравнению с существующими в ядре аллокаторами.



1 Э. Таненбаум, Х. Бос. Современные операционные системы. 4-е издание. — Спб.: Питер, 2015. — 1120 с.
2 Concepts Overview [Электронный ресурс]
// URL: https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.html
(дата обращения: 03.12.2021)
3 Р. Лав. Linux системное программирование. 2-е издание. — Спб.: Питер, 2014. — 448 с.
4 J. Corbet, A. Rubini, G. Kroah-Hartman. Linux Device Drivers. 3rd edition. — O’Reilly Media, 2005. — 616 с.
5 zpool.c [Электронный ресурс]
// URL: https://github.com/torvalds/linux/blob/master/mm/zpooLc
(дата обращения: 08.12.2021)
6 zbud.c [Электронный ресурс]
// URL: https://github.com/torvalds/linux/blob/master/mm/zpooLc
(дата обращения: 08.12.2021)
7 z3fold [Электронный ресурс]
// URL: https://www.kernel.org/doc/html/latest/vm/z3fold.html
(дата обращения: 08.12.2021)
8 zsmalloc [Электронный ресурс]
// URL: https://www.kernel.org/doc/html/latest/vm/zsmalloc.html
(дата обращения: 08.12.2021)
9 zswap [Электронный ресурс]
// URL: https://www.kernel.org/doc/html/latest/admin-guide/mm/zswap.html
(дата обращения: 05.12.2021)
10 zram: Compressed RAM based block devices [Электронный ресурс]
// URL: https://www.kernel.org/doc/Documentation/blockdev/zram.txt
(дата обращения: 05.12.2021)
11 About QEMU [Электронный ресурс]
// URL: https://www.qemu.org/docs/master/about/index.html
(дата обращения: 23.04.2022)
12 Welcome to FIO’s documentation [Электронный ресурс]
// URL: https://fio.readthedocs.io/en/latest/(дата обращения: 23.03.2022)
13 ktime accessors [Электронный ресурс]
// URL: https://www.kernel.org/doc/html/latest/core-api/timekeeping.html(дата обращения: 12.05.2022)


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ