Какие виды памяти существуют кроме кэшей и оперативной памяти
Что проверяют
Понимаете ли вы иерархию памяти целиком: чем дальше от процессора, тем больше объём и выше задержка, а данные переживают выключение питания только на нижних уровнях. Следом часто спрашивают, как это касается Go-сервиса: почему файл второй раз читается быстрее и что происходит, когда кончается оперативка.
Как отвечать
Постройте ответ как лестницу сверху вниз, с порядком задержек:
- регистры процессора: самая быстрая память. С Go 1.17 аргументы функций на amd64 передаются через регистры, а не через стек, по данным команды Go это дало около 5% скорости;
- виртуальная память и swap: процесс видит адресное пространство, ОС отображает его на физические страницы и при нехватке выгружает часть на диск. Обращение к выгруженной странице стоит уже миллисекунды;
- SSD (NAND-флеш, NVMe): энергонезависимая память, случайное чтение порядка десятков микросекунд, ресурс перезаписи ограничен;
- HDD: магнитные пластины, случайный доступ от 5 до 10 мс из-за движения головки, зато дёшево за терабайт;
- ПЗУ и флеш прошивки (ROM, EEPROM, NOR-флеш): хранят BIOS/UEFI и прошивки устройств, современные микросхемы можно перезаписывать.
Для масштаба: L1-кэш отвечает примерно за наносекунду, оперативка за сотню наносекунд. Между RAM и HDD почти пять порядков.
Затем привяжите к Go. ОС кэширует прочитанные файлы в свободной оперативке (page cache), поэтому повторное чтение до диска не доходит. Сборщику мусора нужен запас памяти, и если процесс уходит в swap, паузы и задержки растут непредсказуемо. В контейнере стоит задать GOMEMLIMIT (появился в Go 1.19): GC начнёт работать активнее до того, как процесс убьёт OOM killer.
Где спотыкаются
Называют сетевое хранилище (NAS) или облако «видом памяти». Это способ доступа к дискам, а не отдельный уровень иерархии.
Путают энергозависимость: говорят, что флеш теряет данные без питания или что ROM нельзя перезаписать в принципе.
Не могут назвать порядки задержек. Без цифр вопрос «почему кэш так важен» остаётся без ответа, а именно его обычно задают следующим.