воскресенье, 28 февраля 2016 г.

QEMU-KVM и NUMA-архитектура

Кратко о NUMA-архитектуре.

Представьте себе довольно типичный двух-процессорный сервер. Можете представить четырех-процессорный, это не принципиально, главное что бы соккетов было больше одного, иначе эта статья для вас не актуальна)
Так вот, у каждого процессора(не ядра а именно процессора), есть встроенный контроллер памяти(либо он совсем близко) и подключенный через него банк памяти к которому у этого процессора есть максимально быстрый доступ. Это собственно и есть NUMA-нода №0.
У других процессоров(при наличии таковых) так же есть встроенный контроллер и "локальная" память и это такие же NUMA-ноды №N в рамках одного сервера.

Проблема NUMA в том, что доступ процессора из ноды 0 к памяти ноды 1 в два раза медленнее чем к своей, локальной памяти.
Так же, обращаясь к памяти из другой ноды, процессор выполняет в два раза больше тактов чем обращаясь к своей памяти.
Кроме этого, общий кеш процессора 2-го и 3-го уровней, становится менее эффективен если процесс выполняется на процессорах нескольких нод.
В общем, в идеале, каждый из процессов должен выполняться в рамках одной какой то ноды и не "прыгать" между ними. Читать далее >>