Редактирование: FreeBSD, 04 лекция (от 23 октября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 55: | Строка 55: | ||
Современные маллоки работают на mmap, и под каждое ядро процессора делают свою арену. | Современные маллоки работают на mmap, и под каждое ядро процессора делают свою арену. | ||
- | В | + | В OpenBSD всегда был очень хороший либцшный маллок. Сейчас jeamllloc. Настолько эффективный, что яндекс с трудом переходит на линукс, потому что они запускают приложение на линуксе и оно жрет в полтора раза |
больше памяти. | больше памяти. | ||
Строка 96: | Строка 96: | ||
Делаются локальные оптимизации. | Делаются локальные оптимизации. | ||
- | Сам по себе маллок, который в файле | + | Сам по себе маллок, который в файле kernel.c, он очень простой и очень тонкий, всю работу за него выполняет другой слой. См блоксхему. |
Сначала смотрим, защищена ли память мемгардами, если используем, то уходим в cпециальный модуль. Аналогично в конце можем уйти в редзон. | Сначала смотрим, защищена ли память мемгардами, если используем, то уходим в cпециальный модуль. Аналогично в конце можем уйти в редзон. | ||
В нормальном ядре все проще -- если размер больше пейджсайз, то вызываем uma_large_malloc | В нормальном ядре все проще -- если размер больше пейджсайз, то вызываем uma_large_malloc | ||
- | Если меньше, то ищем ближайшую степень двойки, и аллоцируем из | + | Если меньше, то ищем ближайшую степень двойки, и аллоцируем из тма_зон. |
Чтоже такое uma? | Чтоже такое uma? | ||
Строка 121: | Строка 121: | ||
вероятностью уже в процессорном кэше. | вероятностью уже в процессорном кэше. | ||
- | + | Кег представляет собой очень простуй структуру -- два ведра -- пустое и полное. Как только одно из них заполняется или доходит до нуля, мы их меняем местами. | |
Ведро из себя представляет: сколько максимум записей, сколько текущее количество, и вектор из указателей в глубину слаба, и обеспечивают быструю аллокацию. | Ведро из себя представляет: сколько максимум записей, сколько текущее количество, и вектор из указателей в глубину слаба, и обеспечивают быструю аллокацию. | ||
Строка 130: | Строка 130: | ||
следующий цвет после того цвета, которые он брал последним, а если такого нет, то случайный. Если пропустили один цвет, то тоже какая-то оптимизация может получиться. (Обсуждение про то, что в современных процессорах это неактуально. См. ссылку на книжку в конце.) | следующий цвет после того цвета, которые он брал последним, а если такого нет, то случайный. Если пропустили один цвет, то тоже какая-то оптимизация может получиться. (Обсуждение про то, что в современных процессорах это неактуально. См. ссылку на книжку в конце.) | ||
- | Есть еще аллокатор из NetBSD | + | Есть еще аллокатор из NetBSD vmcm(9) |
Универсальный аллокатор. Ему дается ресурс, он с ним может работать. В ядре FreeBSD он используется для vm map самого ядра. Потому что у ядра линейный список entry уже неудобен. | Универсальный аллокатор. Ему дается ресурс, он с ним может работать. В ядре FreeBSD он используется для vm map самого ядра. Потому что у ядра линейный список entry уже неудобен. | ||
Строка 136: | Строка 136: | ||
Процессы делают mmap доволно редко. Поэтому линейный список из vmmap entry вполне удовлетворителен. | Процессы делают mmap доволно редко. Поэтому линейный список из vmmap entry вполне удовлетворителен. | ||
- | Curt | + | Curt Schimel systems for modern architectures |
{{FreeBSD}} | {{FreeBSD}} | ||
{{Lecture-stub}} | {{Lecture-stub}} |