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


Кэш страничных кадров процессора

Как мы увидим далее в этой главе, ядро часто запрашивает и освобождает одиночные страничные кадры. Для повышения производительности в каждой зоне памяти определен кэш страничных кадров для каждого процессора. Это процессорный кэш содержит некоторое количество заранее выделенных страничных кадров, используемых для одиночных запросов на память, выдаваемых локальным процессором.

На самом деле, для каждого процессора в каждой зоне памяти существует два кэша: горячий”, со страницами, содержимое которых, весьма вероятно, будет занесено в аппаратный кэш процессора, и холодный.

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

С другой стороны, получение страничного кадра из холодного” кэша удобно, если планируется заполнить страничный кадр операцией прямого доступа
к памяти. В этом случае процессор не задействуется, и ни одна строчка аппаратного кэша не будет изменена. Получение страничного кадра из холодного” кэша позволяет сберечь резерв горячих” страничных кадров для других видов запросов на выделение памяти.

Основной структурой, реализующей кэш страничных кадров процессора, является массив структур per_cpu_pageset, КОТОрЫЙ хранится В ПОЛе pageset дескриптора зоны памяти. Массив содержит по одному элементу для каждого процессора. Этот элемент состоит из двух дескрипторов per cpu pages, один из которых предназначен для горячего” кэша, а другой — для холодного”. Ядро ведет мониторинг размеров горячего” и холодного” кэшей при помощи двух отметок. Если количество страничных кадров в кэше опускается ниже отметки low, ядро пополняет кэш, выделяя batch одиночных страничных кадров из buddy-системы. Если же количество кадров переходит через отметку high, ядро освобождает batch страничных кадров кэша и возвращает их buddy-системе. Значения batch, low и high зависят от количества страничных кадров в зоне памяти.

Предыдущая страница | 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...