Курс будет с акцентом на Linux. Да мы возможно обсудим некоторые нюансы macOS/Windows, и вероятно часть задач можно будет сдать под ними.
Но в целом стоит понимать, что поддержка не Linux-а как платформы будет минимальна.
Можно воспользоваться WSL, также будет поддержка docker образа и сдачи домашек в нем.
В идеале вы прошли курс по C++ и операционным системам, или обладаете аналогичными знаниями.
Но не думаю, что возникнут проблемы, если у вас не было операционных систем, но вы прочитали cpumemory.pdf
(всего 100 страниц, не поленитесь).
Так или иначе мы повторим некоторые из пререквизитов, как и что из них будет рассказываться, будет зависеть от средней подготовки студентов.
Прежде всего не о том как оно сделано, а о том когда и что полезно об этом знать. Какие есть проблемы, когда с ними можно столкнуться и как обойти.
- Про оперативную память, кеши, различие между SMP и NUMA архитектурой
- Про virtual memory, то как процесс операционной системы видит свою память и как это работает
- Про интерфейсы операционной системы для выделения памяти:
mmap
/unmap
/etc иbrk
/sbrк
- Про global, static, stack, heap memory
- Про интерфейсы системного аллокатора такие как
malloc
/free
/etc и operatornew
/delete
/etc
- Про выравнивание
- Про интерфейсы в языке
new
/delete
expression - Умные указатели
- Про
std::allocator
- Про
std::pmr::polymorphic_allocator
Не для исторической справки, а потому что как раз они чаще всего и пишутся разработчиками под конкретные кейсы.
- Про фрагментацию на уровне аллокатора
- bump arena
- fixed size pool
- free list и его различные имплементации
- buddy
- slab
- Посмотрим примеры из linux kernel
- Про сложность, проблемы при: thread local, mutex, spinlock, lockfree реализации
- Про классический подход на примере lfalloc
- ptmalloc2 -- glibc, прежде всего проблемы которые в нем есть, и почему они не будут исправлены
- jemalloc -- FreeBSD libc, использующийся во множестве проектов Facebook и других компаний, про то как и какие проблемы ptmalloc2 он решает
- mimalloc -- достаточно простой, но эффективный системный аллокатор Microsoft
- tcmalloc -- аллокатор Google, интересен прежде всего тем что некоторые подходы значительно отличаются
- Про GC и то какие подходы к аллокации используются там
В целом можно поговорить
- про то как IO подсистема работает с оперативной памятью
- про подходы к аллокациям и работе с памятью в render в частности и GPU в целом
- stagging buffer
- zombie list
- аллокаторы buddy/slab/free-list
- проблемы синхронизации
- особенности Windows? 🤮
На языке C++, ревью выборочное/по просьбе, в целом в зависимости от моей загруженности и количества человек на курсе.
В остальном автоматическая проверка с открытыми тестами, санитайзерами, разными компиляторами, fuzzing-ом, все лишь бы верить, что в вашем коде нет багов. За улучшение тестов доп баллы.
- На понимание первых лекций
- Потыкать std::allocator, std::pmr, контейнеры с SSO оптимизацией
- Не системные однопоточные аллокаторы на базе классических алгоритмов
- Системный аллокатор, будут бенчмарки. Постепенно вы должны приблизить свою реализацию по производительности к одному из 4 системных аллокаторов (ptmalloc2, jemalloc, mimalloc, tcmalloc, а также моя собственная реализация, чтобы было честно) в конкретном тесте.
- Если я успею сделать, будет опциональная домашка, написать GC для простого самописного интерпретируемого языка.
1, 2, 3 -- это темы, не конкретные задания, каждая их них будет включать набор домашек на не более чем вечер по обьему.
4 -- это задание которые предполагается что будет доступно вам в течение всего семестра и с получением новых знаний вы должны улучшать свои результаты в нем.
- На тройку нужно будет просто сделать все задания так, чтобы они прошли тесты.
- На четыре нужно будет сделать все + сделать в задании 4 что-то разумное, не в 100 раз хуже чем худший из рассмотренных аллокаторов в конкретном тесте.
- На отлично все то же самое, но вероятно хочется чтобы ваша реализация была хуже, уже не более чем в 2-10 раз, я думаю конкретные цифры могут отличаться от теста и тд, и в целом это не строгий критерий.
Экзамен
Вероятно он будет сразу после 11 лекции, в идеале хотелось бы чтобы вы к нему не готовились. Потому что хочется понять, что осталось не понятым.
Также могу пообещать, что по его результатам никому оценка снижена не будет. Но может быть повышена не более чем на 1 балл.
В целом у меня нет строгих критериев по оцениванию, курс будет читаться мной в первый раз, поэтому это скорее верхняя планка того, что следует ожидать.