Linux Kernel (Ядро линукса) (часть 1)


Доступ к неоднородной памяти (NUMA)

Мы привыкли считать память компьютера однородным общедоступным ресурсом. Если не принимать во внимание роль аппаратных кэшей, мы полагаем, что время, необходимое процессору для обращения к ячейке памяти, практически не зависит от физического адреса ячейки и от конкретного процессора. К сожалению, в некоторых архитектурах это предположение неверно. Например, дела обстоят не так в отношении некоторых многопроцессорных компьютеров Alpha или MIPS.

Linux поддерживает модель NUMA (Non-Uniform Memory Access, Доступ к неоднородной памяти), в которой время обращения данного процессора к разным ячейкам памяти может варьироваться. Физическая память системы разделяется на несколько узлов. Время, необходимое данному процессору для обращения к страницам в пределах одного узла, одинаково. Однако оно может быть разным у двух различных процессоров. Для каждого процессора ядро старается минимизировать количество обращений к "дорогим" узлам, тщательно следя за тем, где хранятся данные ядра, наиболее часто запрашиваемые этим процессором.

Физическая память внутри каждого узла может быть разбита на несколько зон, в чем мы убедимся в следующем разделе. У каждого узла есть дескриптор типа pg data t. Все дескрипторы узлов собраны в однонаправленный список, на первый элемент которого указывает переменная pgdat iist.

Нас, как обычно, в первую очередь, интересует архитектура 80x86. В IBM- совместимых компьютерах применяется модель UMA (Uniform Memory Access, Доступ к однородной памяти), и, следовательно, поддержка модели NUMA не требуется. Однако если поддержка NUMA не компилирована в ядро, Linux будет использовать единственный узел, включающий в себя всю физическую память системы. Таким образом, переменная pgdat iist будет указывать на список из одного элемента (дескриптора узла 0), хранящийся В переменной contig_page_data.

Группирование физической памяти в одном узле в архитектуре 80x86 может показаться бесполезным делом, но такой подход делает код управления па
мятью переносимым на другие платформы, поскольку ядро может предполагать, что физическая память разделена на один или несколько узлов в любой архитектуре.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...