Государственный университет информационно –коммуникационных технологий
Курсовая работа
на тему:
Кэш-память
практическое задание: Дефрагментация диска
по предмету:
Операционные системы
выполнил:
Волоха Алексей Владимирович
группа ИБД-32б
Киев-2006
План
Теоретическая часть
Кэш-память
Введение 3
Причины внедрения кэш-памяти 4
Раздел 1 4
Что такое кэш-память? 4
Уровень за уровнем 5
Внутренний кэш 6
Смешанная и разделенная кэш-память 9
Статическая и динамическая память 10
TLB как разновидность кэш-памяти 11
Раздел2 11
Организация кэш-памяти 11
Стратегия размещения 15
Отображениесекторов ОП в кэш-памяти 15
Иерархическая модель кэш-памяти 16
Ассоциативность кэш-памяти 16
Размер строки и тега кэш-памяти 17
Типы подключения кэш-памяти 18
Сегментирование кэш-памяти ибыстродействие жестких дисков 19
Увеличение производительностикэш-памяти 21
Зачем увеличивать кэш? 21
Выводы 23
Практическаячасть
Дефрагментациядиска 24
Литература 27
Введение
В качестве элементной базы основной памяти в большинствеЭВМ используются микросхемы динамических ОЗУ, на порядок уступающие побыстродействию центральному процессору. В результате, процессор вынужденпростаивать несколько периодов тактовой частоты, пока информация из ИМС памятиустановится на шине данных ЭВМ. Если же ОП выполнить на быстрых микросхемахстатической памяти, стоимость ЭВМ возрастет весьма существенно.
Экономическиприемлемое решение этой проблемы возможно при использовании двухуровневойпамяти, когда между основной памятью и процессором размещается небольшая, нобыстродействующая буферная память или кэш-память. Вместе с основной памятью онавходит в иерархическую структуру и ее действие эквивалентно быстрому доступу косновной памяти. Использование кэш-памяти позволяет избежать полного заполнения всей машины быстрой RAM памятью. Обычнопрограмма использует память какой либо ограниченной области, храня нужнуюинформацию в кэш-памяти, работа с которой позволяет процессору обходиться безвсяких циклов ожидания. В больших универсальных ЭВМ, основная память которыхимеет емкость порядка 1-32 Гбайт, обычно используется кэш-память емкость 1-12Мбайт, т.е. емкость кэш-память составляет порядка 1/100-1/500 емкости основнойпамяти, а быстродействие в 5-10 раз выше быстродействия основной памяти. Выборобъема кэш-памяти – всегда компромисс между стоимостными показателями ( всравнении с ОП ) и ее емкостью, которая должна быть достаточно большой, чтобысреднее время доступа в системе, состоящей из основной и кэш-памяти,определялось временем доступа к последней. Реальная эффективность использованиякэш-памяти зависит от характера решаемых задач и невозможно определить заранее,какой объем ее будет действительнооптимальным.
Не всякая кэш-память равнозначна. Большое значение имеет тот факт, как много информации может содержать кэш-память. Чем больше кэш-память, тем большеинформации может быть в ней размещено, а следовательно, тем больше вероятность,что нужный байт будет содержаться в этой быстрой памяти. Очевидно, что самыйлучший вариант — это когда объём кэш-памяти соответствует объёму всейоперативной памяти. В этом случае вся остальная память становится не нужной. Крайне противоположная ситуация — 1 байт кэш-памяти — тоже не имеетпрактического значения, так как вероятность того, что нужная информация окажется в этом байте, стремится к нулю.
В процессе работы такой системы в буферную памятькопируются те участки ОП, к которым производится обращение со стороныпроцессора. Выигрыш достигается за счет свойства локальности, ввиду большойвероятности обращения процессором к командам, лежащим в соседних ячейкахпамяти.
Кэш-память, состоящая из m слов, сохраняет копии не менее, чем m-словиз всех слов основной памяти. Если копия, к адресу которой был выполнен доступЦП, существует в кэш-памяти, то считывание завершается уже при доступе
к кэш-памяти. Отметим, что использование кэш-памяти основывается на принципахпространственной и временной локальности. В случае пространственной локальностиосновная память разбивается на блоки с фиксированным числом слов и обменданными между основной памятью и кэш-памятью выполняется блоками. При доступе кнекоторому адресу центральный процессор должен сначала определить содержит ликэш-память копию блока с указанным адресом, и если имеется, то определить, скакого адреса кэш-памяти начинается этот блок. Эту информацию ЦП получает спомощью механизма преобразования адресов.
Причины внедрениякэш-памяти
Явная необходимость в кэш-памятипри проектировании массовых ЦП проявилась в начале 1990-х гг., когда тактовыечастоты ЦП значительно превысили частоты системных шин, и, в частности, шиныпамяти. В настоящее время частоты серверных ЦП достигают почти 4 ГГц, аоперативной памяти, массово применяемой в серверах, — только 400 МГц (200 МГц судвоением благодаря передаче по обоим фронтам сигнала). В этой ситуации припрямом обращении к памяти функциональные устройства ЦП значительную частьвремени простаивают, ожидая доставки данных. В какой-то мере проблемыбыстродействия оперативной памяти могут быть решены увеличением разрядностишины памяти, но даже в серверах младшего уровня нередко встречается 8-16 гнезддля модулей памяти, поэтому такое решение усложняет дизайн системной платы.Проложить же 256- или даже 512-бит шину к расположенной внутри кристалла ЦПкэш-памяти сравнительно несложно. Таким образом, эффективной альтернативыкэш-памяти в современных высокопроизводительных системах не существует.
Раздел 1
Что такое кэш-память?
Кэш-память — этовысокоскоростная память произвольного доступа, используемая процессоромкомпьютера для временного хранения информации. Она увеличиваетпроизводительность, поскольку хранит наиболее часто используемые данные икоманды «ближе» к процессору, откуда их можно быстрее получить
Кэш-память напрямуювлияет на скорость вычислений и помогает процессору работать с болееравномерной загрузкой. Представьте себе массив информации, используемой в вашемофисе. Небольшие объемы информации, необходимой в первую очередь, скажем списоктелефонов подразделений, висят на стене над вашим столом. Точно так же выхраните под рукой информацию по текущим проектам. Реже используемыесправочники, к примеру, городская телефонная книга, лежат на полке, рядом срабочим столом. Литература, к которой вы обращаетесь совсем редко, занимаетполки книжного шкафа.
Компьютеры хранятданные в аналогичной иерархии. Когда приложение начинает работать, данные икоманды переносятся с медленного жесткого диска в оперативную памятьпроизвольного доступа (Dynamic Random Access Memory — DRAM), откуда процессорможет быстро их получить. Оперативная память выполняет роль кэша для жесткогодиска.
Для достаточно быстрых компьютеров (например, на основе intel-80386 с тактовой частотой более 25 мгц илиintel-80486) необходимо обеспечить быстрый доступ к оперативной памяти, иначемикропроцессор будет простаивать и быстродействие компьютера уменьшится. Для этого такие компьютеры могут оснащаться кэш-памятью, т.е.«сверхоперативной» памятью относительно небольшого объема (обычноот 64 до 256 кбайт), в которой хранятся наиболее часто используемые участкиоперативной памяти. Кэш-память располагается «между» микропроцессороми оперативной памятью, и при обращении микропроцессора к памяти сначалапроизводится поиск нужных данных в кэш-памяти. Поскольку время доступа к кэш-памяти в несколько раз меньше, чем к обычной памяти, а в большинствеслучаев необходимые микропроцессору данные содержаться в кэш-памяти,среднее время доступа к памяти уменьшается. Для компьютеров на основе intel-80386dx или 80486sx размер кэш-памяти в 64 кбайт являетсяудовлетворительным, 128 кбайт - вполне достаточным. Компьютеры на основеintel-80486dx и dx2 обычно оснащаются кэш-памятью емкостью 256 кбайт.
Уровеньза уровнем
Хотя оперативнаяпамять намного быстрее диска, тем не менее и она не успевает за потребностямипроцессора. Поэтому данные, которые требуются часто, переносятся на следующийуровень быстрой памяти, называемой кэш-памятью второго уровня. Она может располагатьсяна отдельной высокоскоростной микросхеме статической памяти (SRAM),установленной в непосредственной близости от процессора (в новых процессорахкэш-память второго уровня интегрирована непосредственно в микросхемупроцессора.
На более высокомуровне информация, используемая чаще всего (скажем, команды в многократновыполняемом цикле), хранится в специальной секции процессора, называемойкэш-памятью первого уровня. Это самая быстрая память.
Процессор PentiumIII компании Intel имеет кэш-память первого уровня емкостью 32 Кбайт намикросхеме процессора и либо кэш-память второго уровня емкостью 256 Кбайт намикросхеме, либо кэш-память второго уровня емкостью 512 Кбайт, неинтегрированную с процессором.
Когда процессорунужно выполнить команду, он сначала анализирует состояние своих регистровданных. Если необходимых данных в регистрах нет, он обращается к кэш-памятипервого уровня, а затем — к кэш-памяти второго уровня. Если данных нет ни водной кэш-памяти, процессор обращается к оперативной памяти. И только в томслучае, если нужных данных нет и там, он считывает данные с жесткого диска.
Когда процессоробнаруживает данные в одном из кэшей, это называют «попаданием»; неудачуназывают «промахом». Каждый промах вызывает задержку, поскольку процессор будетпытаться обнаружить данные на другом, более медленном уровне. В хорошоспроектированных системах с программными алгоритмами, которые выполняютпредварительную выборку данных до того, как они потребуются, процент«попаданий» может достигать 90.
Для процессоровстаршего класса на получение информации из кэш-памяти первого уровня может уйтиот одного до трех тактов, а процессор в это время ждет и ничего полезного неделает. Скорость доступа к данным из кэш-памяти второго уровня, размещаемой напроцессорной плате, составляет от 6 до 12 циклов, а в случае с внешнейкэш-памятью второго уровня — десятки или даже сотни циклов.
Кэш-память длясерверов даже более важна, чем для настольных ПК, поскольку серверыподдерживают между процессором и памятью весьма высокий уровень трафика,генерируемого клиентскими транзакциями. В 1991 году Intel превратила ПК на базепроцессора 80486 с тактовой частотой 50 МГц в сервер, добавив на процессорнуюплату кэш с тактовой частотой 50 МГц. Хотя шина, связывающая процессор и память,работала с частотой всего 25 МГц, такая кэш-память позволила многие программыво время работы полностью размещать в процессоре 486 с тактовой частотой 50МГц.
Иерархическаяорганизация памяти помогает компенсировать разрыв между скоростями процессоров,ежегодно увеличивающимися примерно на 50% в год, и скоростями доступа к DRAM,которые растут лишь на 5%. Как считает Джон Шен, профессор УниверситетаКарнеги–Меллона, по мере усиления этого диссонанса производители аппаратногообеспечения добавят третий, а возможно и четвертый уровень кэш-памяти.
Действительно, ужев этом году Intel намерена представить кэш-память третьего уровня в своих64-разрядных процессорах Itanium. Кэш емкостью 2 или 4 Мбайт будет связан спроцессором специальной шиной, тактовая частота которой совпадает с частотойпроцессора.
IBM такжеразработала собственную кэш-память третьего уровня для 32- и 64-разрядныхПК-серверов Netfinity. По словам Тома Бредикича, директора по вопросамархитектуры и технологий Netfinity, сначала кэш будет размещаться на микросхемеконтроллера памяти, выпуск которой начнется к концу следующего года.
Кэш-память третьегоуровня корпорации IBM станет общесистемным кэшем, куда смогут обращаться от 4до 16 процессоров сервера. С кэш-памятью третьего уровня Intel сможет работатьтолько тот процессор, к которому она подключена, но представители IBMподчеркнули, что их кэш третьего уровня способен увеличить пропускнуюспособность всей системы. Бредикич отметил, что новая кэш-память производстваIBM также поможет реализовать компьютерные системы высокой готовности,необходимые для электронной коммерции, поскольку с ее помощью можно будетменять модули основной памяти и выполнять модернизацию, не прерывая работусистемы.
Внутреннийкэш
Внутренне кэширование обращенийк памяти применяется в процессорах, начиная с 486-го. С кэшированием связаныновые функции процессоров, биты регистров и внешние сигналы.
Процессоры486 и Pentium имеют внутренний кэш первого уровня, в Pentium Pro и Pentium II имеется и вторичный кэш. Процессоры могутиметь как единый кэш инструкций и данных, так и общий. Выделенный кэшинструкций обычно используется только для чтения. Для внутреннего кэша обычноиспользуется наборно-ассоциативная архитектура.
Строкив кэш-памяти выделяются только при чтении, политика записи первых процессоров486 – только Write Through (сквозная запись) – полностьюпрограммно-прозрачная. Более поздние модификации 486-го и все старшиепроцессоры позволяют переключаться на политику Write Back (обратнаязапись).
Работукэша рассмотрим на примере четырехканального наборно-ассоциативного кэшапроцессора 486, его физическая структура приведена на рис.1. Кэш является несекторированным – каждый бит достоверности (Valid bit) относится к целой строке, так что стока не может являться “частично достоверной”.
Работувнутренней кэш-памяти характеризуют следующие процессы: обслуживание запросовпроцессора на обращение к памяти, выделение и замещение строк для кэшированияобластей физической памяти, обеспечение согласованности данных внутреннего кэшаи оперативной памяти, управление кэшированием.
Любойвнутренний запрос процессора на обращение к памяти направляется навнутренний кэш. Теги четырех строк набора, который обслуживает данный адрес,сравниваются со старшими битами запрошенного физического адреса. Еслиадресуемая область представлена в строке кэш-памяти (случая попадания –cache hit), запрос на чтение обслуживается только кэш-памятью, не выходя на внешнююшину. Запрос на запись модифицирует данную строку, и в зависимости от политикизаписи либо сразу выходит на внешнюю шину (при сквозной записи), либо несколькопозже (при использовании алгоритма обратной записи). /> /> /> /> /> /> /> />
Рис 1. Структурапервичного кэша процессора 486
Вслучае промаха (Cache Miss) запрос на запись направляется только навнешнюю шину, а запрос на чтение обслуживается сложнее. Если этот заросотносится к кэшируемой области памяти, выполняется цикл заполнения целой строкикэша – все 16 байт (32 для Pentium) читаются из оперативной памяти и помещаются в одну из строк кэша, обслуживающегоданный адрес. Если затребованные данные не укладываются в одной строке,заполняется и соседняя. Заполнение строки процессор старается выполнить самымбыстрым способом – пакетным циклом с 32-битными передачами (64-битными для Pentium и старше).
Внутреннийзапрос процессора на данные удовлетворяется сразу, как только затребованныеданные считываются из ОЗУ – заполнение строки до конца может происходитьпараллельно с обработкой полученных данных. Если в наборе, который обслуживаетданный адрес памяти, имеется свободная строка (с нулевым битом достоверности),заполнена будет она и для нее установится бит достоверности. Если свободныхстрок в наборе нет, будет замещена строка, к которой дольше всех не былообращений. Выбор строки для замещения выполняется на основе анализа бит LRU (Least Recently Used)по алгоритму “псевдо-LRU”. Эти биты (по три на каждый из наборов)модифицируются при каждом обращении к строке данного набора (кэш-попадании илизамещении).
Такимобразом, выделение и замещение строк выполнятся толькокэш-промахов чтения, при промахах записи заполнение строк не производится. Еслизатребованная область памяти присутствует в строке внутреннего кэша, то онобслужит этот запрос. Управлять кэшированием можно только на этапе заполнениястрок; кроме того, существует возможность их аннулирования – объявлениянедостоверными и очистка всей кэш-памяти.
Очистка внутренней кэш-памяти при сквознойзаписи (обнуление бит достоверности всех строк) осуществляется внешним сигналомFLUSH# за один такт системной шины(и, конечно же, по сигналу RESET).Кроме того, имеются инструкции аннулирования INVD и WBINVD. Инструкция INVDаннулирует строки внутреннего кэша безвыгрузки модифицированных строк, поэтому ее неосторожное использование привключенной политике обратной записи может привести к нарушению целостностиданных в иерархической памяти. Инструкция WBINVD предварительно выгружает модифицированныестроки в основную память (при сквозной записи ее действие совпадает с INVD). При обратной записи очистка кэша подразумеваети выгрузку всех модифицированных строк в основную память. Для этого,естественно, может потребоваться и значительное число тактов системнойшины, необходимых для проведения всех операций записи.
Аннулирование строк выполняется внешнимисхемами – оно необходимо в системах, у которых в оперативную память записьможет производить не только один процессор, а и другие контроллеры шины –процессор или периферийные контроллеры. В этом случае требуются специальныесредства для поддержания согласованности данных во всех ступенях памяти – впервичной и вторичной кэш-памяти и динамического ОЗУ. Если внешний (поотношению к рассматриваемому процессору) контроллер выполняет запись в память,процессору должен быть подан сигнал AHOLD. По этому сигналу процессор немедленно отдает управление шиной адреса A[31:4], на которой внешним контроллеромустанавливается адрес памяти, сопровождаемый стробом EADS#. Если адресованная память присутствует в первичном кэше, процессораннулирует строку – сбрасывает бит достоверности этой строки (онаосвобождается). Аннулирование строки процессор выполняет в любом состоянии.
Управлениезаполнением кэша возможно и на аппаратном и на программном уровнях. Процессорпозволяет кэшировать любую область физической памяти. Внешние схемы могутзапрещать процессору кэшировать определенные области памяти установкой высокогоуровня сигнала KEN# во времяциклов доступа к этим областям памяти. Этот сигнал управляет тольковозможностью заполнения строк кэша из адресованной области памяти. Программноможно управлять кэшируемостью каждой страницы памяти – запрещатьединичным значением бита PCD(Page Cache Disable)в таблице или каталоге страниц. Для процессоров с WB-кэшем бит PWT(Page Write Through) позволяет постранично управлять иалгоритмом записи. Общее программное управление кэшированием осуществляетсяпосредством бит управляющего регистра CR0:CD (Cache Disable) и NW(No Write Through). Возможны следующие сочетания битрегистра:
·CD=1, NW=1 – если после установки такого значения выполнить очистку кэша, кэшбудет полностью отключен. Если же перед установкой этого сочетания бит кэша былзаполнен, а очистка не производилась, кэш превращается в “замороженную”область статической памяти;
·CD=1, CW=0 – заполнение кэша запрещено, но сквозная запись разрешена. Эффектаналогичен временному переводу сигнала KEN# в высокое (пассивное) состояние. Этот режим может использоваться длявременного отключения кэша, после которого возможно его включение без очистки;
·CD=0, NW=1 – запрещенная комбинация (вызывает отказ общей защиты);
·CD=0, NW=0 – нормальный режим работы со сквозной записью.
Дляполного запрета кэша необходимо установить CD=1 и NW=1, после чеговыполнить очистку (Flush). Безочистки кэш будет обслуживать запросы в случае попаданий.
Процессоры486 и старше имеют выходные сигналы PCDи PWT, управляющие работой вторичного (внешнего) кэша (они же управляют ивнутренним кэшем). В циклах обращения к памяти, когда страничные преобразованияне используются (например, при обращении к таблице каталогов страниц),источником сигналов являются биты PCD и PWT регистра CR3, приобращении к каталогу страниц – биты PCD и PWT из дескриптора соответствующего вхождениякаталога, при обращении к самим данным – биты PCD и PWT из дескриптора страницы. Кроме того, оба этих сигнала могутпринудительно устанавливаться общими битами управления кэшированием CD и NW регистра CRO.
Режимобратной записи может разрешаться только аппаратно сигналом WB/WT#, вырабатываемымвнешними схемами.
Впространстве памяти РС имеются области, для которых кэширование принципиальнонедопустимо (например, разделяемая память адаптеров) или непригодна политикаобратной записи. Кроме того, кэширование иногда полезно отключать привыполнении однократно исполняемых участков программы (например, инициализации)с тем, чтобы из кэша не вытиснялись более часто используемые фрагменты.Напомним, что запретить можно только заполнение строк, а обращение к памяти,уже представленной действительными строками кэша, все равно будет обслуживатьсяиз кэша. Для полного запрета работы кэша строки должны быть аннулированы.
Программнопри включенном режиме страничного преобразования кэшированием управляют битыатрибутов страниц (на уровне таблицы страниц и их каталога), биты PCD и PWT регистра CR3, и, наконец, глобально кэшированиемуправляют биты CD и NW регистра CR0.
Аппаратно(сигналом KEN#) внешние схемымогут управлять кэшированием (разрешать заполнение строк) для каждогоконкретного адреса обращения к физической памяти. Смешанная и разделенная кэш-память.
Внутренняякэш-память использовалась ранее как для инструкций(команд), так и для данных.Такая память называлась смешанной, а ее архитектура – Принстонской, в которой вединой кэш-памяти, в соответствии с классическими принципами фон Неймана,хранились и команды и данные.
Сравнительнонедавно стало обычным разделять кэш-память на две – отдельно для инструкций иотдельно для данных.
Преимуществомсмешанной кэш-памяти является то, что при заданном объеме, ей свойственна болеевысокая вероятность попаданий, по сравнению с разделенной, поскольку в нейавтоматически устанавливается оптимальный баланс между инструкциями и данными.Если в выполняемом фрагменте программы обращения к памяти связаны, в основном,с выборкой инструкций, а доля обращений к данным относительно мала, кэш-памятьимеет тенденцию заполнения инструкциями и наоборот.
С другойстороны, при раздельной кэш-памяти, выборка инструкций и данных можетпроизводиться одновременно, при этом исключаются возможные конфликты. Последнееособенно существенно в системах, использующих конвейеризацию команд, гдепроцессор извлекает команды с опережением и заполняет ими буфер или конвейер.
Так, например,в процессоре Intel® 486 DX2применялась смешанная кэш-память,
В Intel® Pentium® и в AMD Athlon™с их суперскалярной организацией – раздельная. Более того, в этих процессорахпомимо кэш-памяти инструкций и кэш-памяти данных используется также и адреснаякэш-память. Этот вид кэша используется в устройствах управления памятью, в томчисле для преобразования виртуальных адресов в физические.
Благодаря использованию нанотехнологий, дляснижения потребляемой мощности, увеличения быстродействия ЭВМ( что достигаетсясокращением времени обмена данными между процессором и кэш-памятью) существуетвозможность, а более того имеются реальные примеры того, что кэш-памятьреализуют в одном кристале с процессором. Такая внутренняя кэш-памятьреализуется по технологии статического ОЗУ и является наиболеебыстродействующей. Объем ее обычно составляет 64-128 Кбайт, причем дальнейшее увеличениеее объема приводит обычно к снижению быстродействия из-за усложнения схемуправления и дешифрации адреса.
Альтернативой,широко применяемой в настоящее время, является вторая (внешняя) кэш-памятьбольшего объема, расположенная между внутренней кэш-памятью и ОП. В этойдвухуровневой системе кэш-памяти, внутренней памяти отводится роль первогоуровня L1, а внешней — второго L2.емкость L2 обычно на порядок и более выше, чем L1, а быстродействие и стоимость ниже. Память второго уровнятакже строится обычно как статическое ОЗУ. Емкость ее может составлять от 256Кбайт до 1 Мбайта и технически реализуется как в виде отдельной микросхемы,однако может размещаться и на одном кристалле спроцессором.
Самыесовременные процессоры от крупнейших производителей оснащаются сегоднякэш-памятью емкостью у Intel Pentium4 на ядре Northwood — 512 Кбайт кэш-памяти L2,а процессоры Prescott будут выпускаться по 0,09-микроннойтехнологии и получат кэш-память второго уровня удвоенного объема, которыйсоставит 1 Мбайт. Intel продолжает широко рекламироватьсвой «экстремальный» игровой процессор Pentium 4Extreme Editionна основе модифицированного серверного ядра Gallatin стактовой частотой 3,40 ГГц и кэш-памятью третьего уровня объемом 2 Мбайта. Онадополняет стандартный нортвудовский кэш L2 512 Кбайт итоже работает на частоте ядра процессора (правда, с большей раза в двалатентностью). Таким образом, в сумме новый Pentium 4 Extreme Edition имееткэш-память объемом 2,5Мбайт.
Дополнительнаякэш-память третьего уровня ведет начало от серверных процессоров Xeon MP на 0,13-микронном ядре Gallatinи не имеет ничего общего с грядущим 90-нанометровым Prescott,однако этот кристалл (ядро) все же немного переработали с целью поддержкисистемной шины 800 МГц, уменьшения энергопотребления и др. и упаковали встандартный корпус от текущих Pentium4. Всвою очередь AMD Athlon64 и AMD Opteronработающие на более высокой частоте 2200 МГц, производятся по 0,13-микроннойтехнологии (SOI) и содержат 105,9 млн. транзисторов иотличаются от предшествующих Athlon XP новым ядром с 64-битными возможностями вычислений (наряду сулучшенными 32-битными на базе прежнего ядра Athlon XP), кэш-памятью второго уровня объемом 1Мбайт (причем кэш у Атлонов инклюзивный, то есть полный объем с учетом 128Кбайт L1 составляет 1152 Кбайт).
При доступе кпамяти, ЦП сначала обращается к кэш-памяти первого уровня. При промахепроизводится обращение к кэш-памяти второго уровня. Если информация отсутствуети в L2, производится обращение к ОП, и соответствующий блокзаносится сначала в L2, а затем и в L1.Благодаря такой процедуре, часто запрашиваемая информация может быть легковосстановлена из кэш-памяти второго уровня.
Потенциальнаяэкономия за счет применения L2 зависит от вероятностипопаданий как в L1, так и L2. Однако,опыт Intel и AMD показывает, чтоиспользование кэш-памяти второго уровня существенно улучшаетпроизводительность. Именно поэтому во всех проанонсированых производителяминовейших версиях процессоров применяется двухуровневая и даже трехуровневаяорганизация кэш-памяти.
Статическая идинамическая память
В каждом современном ЦПпредусмотрено некоторое количество статической памяти, работающей на частотеядра. Именно статической, поскольку использование динамической памяти в этихцелях представляется крайне нерациональным.
Одна ячейка статической памятисостоит из шести транзисторов и двух резисторов (для техпроцессов с проектныминормами до 0,5 мкм могли быть использованы только четыре транзистора на однуячейку, с дополнительным слоем поликремния и с более жесткими ограничениями помаксимальной тактовой частоте), в то время как аналогичная структурадинамической памяти состоит из одного транзистора и одного конденсатора.
Быстродействие статической памятинамного выше (емкость, используемая в динамической памяти, имеет определеннуюскорость зарядки до требуемого уровня, определяющую «частотныйпотолок»), но из-за большего количества составляющих элементов онасущественно дороже в производстве и отличается более высоким энергопотреблением.Битовое значение ячейки статической памяти характеризуется состоянием затворовтранзисторов, а динамической — уровнем заряда конденсатора. Так какконденсаторы имеют свойство с течением времени разряжаться, то для поддержанияих состояния требуется регулярная перезарядка (для современных микросхемдинамической памяти — приблизительно 15 раз в секунду). Кроме того, приоперации чтения из ячейки динамической памяти конденсатор разряжается, т. е.ячейка утрачивает свой первоначальный заряд, а следовательно должна бытьперезаряжена.
Очевидно, что статическая памятьиспользуется там, где требуется максимальное быстродействие (регистры ЦП,кэш-память, локальная память сигнального процессора), а динамическая — там, гдеприоритетом является объем, а не скорость чтения-записи (оперативная память,буферы периферийных устройств).
TLBкак разновидность кэш-памяти
Почти все современные ЦП обладаютTLB (Translation Look-aside Buffers, вспомогательные буферапреобразования). Своим существованием они обязаны тому факту, что ЦП в работеиспользуют преимущественно виртуальные адреса оперативной памяти, в то времякак контроллеры оперативной и кэш-памяти работают преимущественно с реальнымиадресами. Для того чтобы не вычислять при каждом обращении к памяти реальныйадрес из виртуального, в ЦП присутствуют таблицы соответствия виртуальныхадресов страниц памяти реальным. Как правило, их объем невелик (от единиц досотен записей), но этого вполне достаточно, поскольку часто запрашиваемыеданные или команды обычно хорошо локализуются в пределах страницы памятиразмером 4 или 8 Кбайт.
Что же происходит, еслизапрашиваемого реального адреса какой-либо страницы не находится в TLB? A-box ЦПотрабатывает специальный вызов (exception trap), на который ОС должнаадекватно отреагировать, т. е. произвести поиск нужной страницы в своихтаблицах подсистемы виртуальной памяти. Если в процессе поиска окажется, чтоуказанная страница находится в файле или разделе подкачки, то она должнанезамедлительно быть оттуда считана в оперативную память. В итоге А-box ЦП получит реальный адрес нужной страницы памяти ипроцесс пойдет своим путем.
Стоит также заметить, что единойсхемы адресации записей кэш-памяти не существует. Поэтому в зависимости отиерархического расположения и целевого назначения данной структуры кэш-памяти,а также идей построения определенного ЦП может использоваться выборочно какреальная, так и виртуальная адресация записей, или даже гибридная схема(реальное тегирование с виртуальной индексацией), что предполагает исоответствующую организацию структуры TLB.
Раздел 2
Организациякэш-памяти
Концепция кэш-памяти возниклараньше чем архитектура IBM/360, и сегодня кэш-памятьимеется практически в любом классе компьютеров, а в некоторых компьютерах — вомножественном числе.
/>
Рис. 2. Типовые значения ключевых параметров для кэш-памятирабочих станций и серверов
Все термины, которые былиопределены раньше могут быть использованы и для кэш-памяти, хотя слово «строка»(line) часто употребляется вместо слова«блок» (block).
На рисунке 2 представлен типичныйнабор параметров, который используется для описания кэш-памяти.
Рассмотрим организацию кэш-памятиболее детально, отвечая на четыре вопроса об иерархии памяти.
1. Где может размещаться блок в кэш-памяти?
Принципы размещения блоков вкэш-памяти определяют три основных типа их организации:
Если каждый блок основной памяти имеет только однофиксированное место, на котором он может появиться в кэш-памяти, то такаякэш-память называется кэшем с прямым отображением (direct mapped). Это наиболее простаяорганизация кэш-памяти, при которой для отображение адресов блоков основнойпамяти на адреса кэш-памяти просто используются младшие разряды адреса блока.Таким образом, все блоки основной памяти, имеющие одинаковые младшие разряды всвоем адресе, попадают в один блок кэш-памяти, т.е.
(адрес блока кэш-памяти) =
(адрес блока основной памяти) mod(число блоков в кэш-памяти)
Если некоторый блок основнойпамяти может располагаться на любом месте кэш-памяти, то кэш называетсяполностью ассоциативным (fully associative).
Если некоторый блок основной памяти может располагаться наограниченном множестве мест в кэш-памяти, то кэш называетсямножественно-ассоциативным (set associative). Обычно множество представляет собой группу издвух или большего числа блоков в кэше. Если множество состоит из n блоков, то такое размещение называетсямножественно-ассоциативным с n каналами (n-way set associative).Для размещения блока прежде всего необходимо определить множество. Множествоопределяется младшими разрядами адреса блока памяти (индексом):
(адрес множества кэш-памяти) =
(адрес блока основной памяти) mod(число множеств в кэш-памяти)
Далее, блок может размещаться на любом месте данногомножества.
Диапазон возможных организацийкэш-памяти очень широк: кэш-память с прямым отображением есть простоодноканальная множественно-ассоциативная кэш-память, а полностью ассоциативнаякэш-память с m блоками может быть названа m-канальной множественно-ассоциативной. В современныхпроцессорах как правило используется либо кэш-память с прямым отображением,либо двух- (четырех-) канальная множественно-ассоциативная кэш-память.
2. Как найти блок, находящийся в кэш-памяти?
У каждого блока в кэш-памятиимеется адресный тег, указывающий, какой блок в основной памяти данный блоккэш-памяти представляет. Эти теги обычно одновременно сравниваются свыработанным процессором адресом блока памяти.
Кроме того, необходим способопределения того, что блок кэш-памяти содержит достоверную или пригодную дляиспользования информацию. Наиболее общим способом решения этой проблемыявляется добавление к тегу так называемого бита достоверности (valid bit).
Адресациямножественно-ассоциативной кэш-памяти осуществляется путем деления адреса,поступающего из процессора, на три части: поле смещения используется для выборабайта внутри блока кэш-памяти, поле индекса определяет номер множества, а полетега используется для сравнения. Если общий размер кэш-памяти зафиксировать, тоувеличение степени ассоциативности приводит к увеличению количества блоков вмножестве, при этом уменьшается размер индекса и увеличивается размер тега.
3. Какой блок кэш-памяти должен быть замещен при промахе?
При возникновении промаха,контроллер кэш-памяти должен выбрать подлежащий замещению блок. Польза отиспользования организации с прямым отображением заключается в том, чтоаппаратные решения здесь наиболее простые. Выбирать просто нечего: на попаданиепроверяется только один блок и только этот блок может быть замещен. Приполностью ассоциативной или множественно-ассоциативной организации кэш-памятиимеются несколько блоков, из которых надо выбрать кандидата в случае промаха.Как правило для замещения блоков применяются две основных стратегии: случайнаяи LRU.
В первом случае, чтобы иметьравномерное распределение, блоки-кандидаты выбираются случайно. В некоторыхсистемах, чтобы получить воспроизводимое поведение, которое особенно полезно вовремя отладки аппаратуры, используют псевдослучайный алгоритм замещения.
Во втором случае, чтобы уменьшитьвероятность выбрасывания информации, которая скоро может потребоваться, всеобращения к блокам фиксируются. Заменяется тот блок, который не использовалсядольше всех (LRU — Least-Recently Used).
Достоинство случайного способазаключается в том, что его проще реализовать в аппаратуре. Когда количествоблоков для поддержания трассы увеличивается, алгоритм LRUстановится все более дорогим и часто только приближенным. На рисунке 3 показаныразличия в долях промахов при использовании алгоритма замещения LRU и случайного алгоритма.
/>
Рис. 3. Сравнение долей промахов для алгоритма LRU и случайного алгоритма замещения
при нескольких размерах кэша и разных ассоциативностях приразмере блока 16 байт
4. Что происходит во время записи?
При обращениях к кэш-памяти нареальных программах преобладают обращения по чтению. Все обращения за командамиявляются обращениями по чтению и большинство команд не пишут в память. Обычнооперации записи составляют менее 10% общего трафика памяти. Желание сделатьобщий случай более быстрым означает оптимизацию кэш-памяти для выполненияопераций чтения, однако при реализации высокопроизводительной обработки данныхнельзя пренебрегать и скоростью операций записи.
К счастью, общий случай являетсяи более простым. Блок из кэш-памяти может быть прочитан в то же самое время,когда читается и сравнивается его тег. Таким образом, чтение блока начинаетсясразу как только становится доступным адрес блока. Если чтение происходит спопаданием, то блок немедленно направляется в процессор. Если же происходитпромах, то от заранее считанного блока нет никакой пользы, правда нет иникакого вреда.
Однако при выполнении операциизаписи ситуация коренным образом меняется. Именно процессор определяет размерзаписи (обычно от 1 до 8 байтов) и только эта часть блока может быть изменена.В общем случае это подразумевает выполнение над блоком последовательностиопераций чтение-модификация-запись: чтение оригинала блока, модификацию егочасти и запись нового значения блока. Более того, модификация блока не можетначинаться до тех пор, пока проверяется тег, чтобы убедиться в том, чтообращение является попаданием. Поскольку проверка тегов не может выполнятьсяпараллельно с другой работой, то операции записи отнимают больше времени, чемоперации чтения.
Очень часто организациякэш-памяти в разных машинах отличается именно стратегией выполнения записи.Когда выполняется запись в кэш-память имеются две базовые возможности: сквозная запись (write through, store through) — информация записывается в два места: в блок кэш-памяти и в блок более низкого уровня памяти. запись с обратным копированием (write back, copy back, store in) — информация записывается только в блок кэш-памяти. Модифицированный блок кэш-памяти записывается в основную память только когда он замещается. Для сокращения частоты копирования блоков при замещении обычно с каждым блоком кэш-памяти связывается так называемый бит модификации (dirty bit). Этот бит состояния показывает был ли модифицирован блок, находящийся в кэш-памяти. Если он не модифицировался, то обратное копирование отменяется, поскольку более низкий уровень содержит ту же самую информацию, что и кэш-память.
Оба подхода к организации записиимеют свои преимущества и недостатки. При записи с обратным копированиемоперации записи выполняются со скоростью кэш-памяти, и несколько записей в одини тот же блок требуют только одной записи в память более низкого уровня.Поскольку в этом случае обращения к основной памяти происходят реже, вообщеговоря требуется меньшая полоса пропускания памяти, что очень привлекательнодля мультипроцессорных систем. При сквозной записи промахи по чтению не влияютна записи в более высокий уровень, и, кроме того, сквозная запись проще дляреализации, чем запись с обратным копированием. Сквозная запись имеет такжепреимущество в том, что основная память имеет наиболее свежую копию данных. Этоважно в мультипроцессорных системах, а также для организации ввода/вывода.
Когда процессор ожидаетзавершения записи при выполнении сквозной записи, то говорят, что онприостанавливается для записи (write stall). Общий прием минимизации остановов по записи связан сиспользованием буфера записи (write buffer), который позволяет процессору продолжить выполнениекоманд во время обновления содержимого памяти. Следует отметить, что остановыпо записи могут возникать и при наличии буфера записи.
При промахе во время записиимеются две дополнительные возможности: разместить запись в кэш-памяти (write allocate) (называется также выборкой при записи (fetch on write)). Блок загружается в кэш-память, вслед за чем выполняются действия аналогичные выполняющимся при выполнении записи с попаданием. Это похоже на промах при чтении. не размещать запись в кэш-памяти (называется также записью в окружение (write around)). Блок модифицируется на более низком уровне и не загружается в кэш-память.
Обычно в кэш-памяти, реализующейзапись с обратным копированием, используется размещение записи в кэш-памяти (внадежде, что последующая запись в этот блок будет перехвачена), а в кэш-памятисо сквозной записью размещение записи в кэш-памяти часто не используется(поскольку последующая запись в этот блок все равно пойдет в память). Стратегияразмещения.
На сложность этого механизмасущественное влияние оказывает
стратегия размещения, определяющая, в какое место кэш-памяти
следует поместить каждый блок из основной памяти.
В зависимости от способа размещения данных основной памяти в кэш-памятисуществует три типа кэш-памяти:
- кэш с прямым отображением (размещением);
- полностью ассоциативный кэш;
- множественный ассоциативный кэш или частично-ассоциативный.
Кэш с прямымотображением (размещением) является самым
простым типом буфера. Адрес памяти однозначно определяет строку
кэша, в которую будет помещен блок информации. При этом предпо-
лагается, что оперативная память разбита на блоки и каждому та-
кому блоку в буфере отводится всего одна строка. Это простой и недорогой вреализации способ отображения. Основной его недостаток – жесткое закрепление заопределенными блоками ОП одной строки в кэше. Поэтому, если программапоочередно обращается к словам из двух различных блоков, отображаемых на одну иту же строку кэш-памяти, постоянно будет происходить обновление данной строки ивероятность попадания будетнизкой.
Кэш с полностьюассоциативным отображением позволяет преодолеть недостаток прямого,разрешая загрузку любого блока ОП в любую строку кэш-памяти. Логика управлениявыделяет в адресе ОП два поля: поле тега и поле слова. Поле тега совпадает садресом блока ОП. Для проверки наличия копии блока в кэш-памяти, логикауправления кэша должна одновременно проверить теги всех строк на совпадение сполем тега адреса. Ассоциативное отображение обеспечивает гибкость при выборестроки для вновь записываемого блока. Принципиальный недостаток этого способа –в необходимости использования дорогой ассоциативнойпамяти.
Множественно-ассоциативныйтип или частично-ассоциативный тип отображения – это один из возможныхкомпромиссов, сочетающий достоинства прямого и ассоциативного способов.Кэш-память ( и тегов и данных) разбивается на некоторое количество модулей.Зависимость между модулем и блоками ОП такая же жесткая, как и при прямомотображении. А вот размещение блоков по строкам модуля произвольное и дляпоиска нужной строки в пределах модуля используется ассоциативный принцип. Этотспособ отображения наиболее широко распространен в современныхмикропроцессорах.
Отображение секторов ОП в кэш-памяти.
Данный тип отображения применяется во всех современных ЭВМи состоит в том, что вся ОП разбивается на секторы, состоящие из фиксированногочисла последовательных блоков. Кэш-память также разбивается на секторы,содержащие такое же количество строк. Расположение блоков в секторе ОП исекторе кэша полностью совпадает. Отображение сектора на кэш-памятьосуществляется ассоциативно, те любой сектор из ОП может быть помещен в любойсектор кэша. Таким образом, в процессе работы АЛУ обращается в поискахочередной команды к ОП, в результате чего, в кэш загружается( в случаеотсутствия там блока, содержащего эту команду), целый сектор информации из ОП,причем по принципу локальности, за счет этого достигается значительноеувеличение быстродействия системы.
Иерархическая моделькэш-памяти
Как правило, кэш-память имеетмногоуровневую архитектуру. Например, в компьютере с 32 Кбайт внутренней (вядре ЦП) и 1 Мбайт внешней (в корпусе ЦП или на системной плате) кэш-памятипервая будет считаться кэш-памятью 1-го уровня (L1), авторая — кэш-памятью 2-го уровня (L2). В современныхсерверных системах количество уровней кэш-памяти может доходить до четырех,хотя наиболее часто используется двух- или трехуровневая схема.
В некоторых процессорныхархитектурах кэш-память 1-го уровня разделена на кэш команд (Instruction Cache, I-cache) и кэш данных (Data Cache, D-cache), причем необязательно одинаковых размеров. С точкизрения схемотехники проще и дешевле проектировать раздельные I-cache и D-cache:выборку команд проводит I-box,а выборку данных — Е-box и F-box, хотя в обоих случаях задействуются А-boxи С-box. Все эти блоки велики, и обеспечить имодновременный и быстрый доступ к одному кэшу проблематично. Кроме того, этонеизбежно потребовало бы увеличения количества портов доступа, что такжеусложняет задачу проектирования.
Так как I-cache и D-cacheдолжны обеспечивать очень низкие задержки при доступе (это справедливо длялюбого кэша L1), приходится жертвовать их объемом — обычно он составляет от 16 до 32 Кбайт. Ведь чем меньше размер кэша, тем легчедобиться низких задержек при доступе.
Кэш-память 2-го уровня, какправило, унифицирована, т. е. может содержать как команды, так и данные. Еслиона встроена в ядро ЦП, то говорят о S-cache (Secondary Cache, вторичный кэш), в противном случае — о B-cache (Backup Cache, резервный кэш). В современныхсерверных ЦП объем S-cacheсоставляет от одного до нескольких мегабайт, a B-cache — до64 Мбайт. Если дизайн ЦП предусматривает наличие встроенной кэш-памяти 3-гоуровня, то ее именуют T-cache (Ternary Cache,третичный кэш). Как правило, каждый последующий уровень кэш-памяти медленнее,но больше предыдущего по объему. Если в системе присутствует B-cache (как последний уровень модели кэш-памяти), то он можетконтролироваться как ЦП, так и набором системной логики.
Если в момент выполнениянекоторой команды в регистрах не окажется данных для нее, то они будутзатребованы из ближайшего уровня кэш-памяти, т. е. из D-cache. В случае их отсутствия в D-Cache запрос направляется в S-cache и т. д. В худшем случае данные будут доставленынепосредственно из памяти. Впрочем, возможен и еще более печальный вариант,когда подсистема управления виртуальной памятью операционной системы (ОС)успевает вытеснить их в файл подкачки на жесткий диск. В случае доставки изоперативной памяти потери времени на получение нужных данных могут составлятьот десятков до сотен тактов ЦП, а в случае нахождения данных на жестком дискеречь уже может идти о миллионах тактов.
Ассоциативностькэш-памяти
Одна из фундаментальныххарактеристик кэш-памяти — уровень ассоциативности — отображает ее логическуюсегментацию. Дело в том, что последовательный перебор всех строк кэша в поискахнеобходимых данных потребовал бы десятков тактов и свел бы на нет весь выигрышот использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жесткопривязываются к строкам кэш-памяти (в каждой строке могут быть данные изфиксированного набора адресов), что значительно сокращает время поиска. Скаждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти: например, n-канальная ассоциативность (n-way set associative) обозначает, чтоинформация по некоторому адресу оперативной памяти может храниться в п месткэш-памяти.
Выбор места может проводиться поразличным алгоритмам, среди которых чаще всего используются принципы замещения LRU (Least Recently Used,замещается запись, запрошенная в последний раз наиболее давно) и LFU (Least Frequently Used,запись, наименее часто запрашиваемая), хотя существуют и модификации этихпринципов. Например, полностью ассоциативная кэшпамять (fully associative), в которой информация,находящаяся по произвольному адресу в оперативной памяти, может быть размещенав произвольной строке. Другой вариант — прямое отображение (direct mapping), при котором информация,которая находится по произвольному адресу в оперативной памяти, может быть размещенатолько в одном месте кэш-памяти. Естественно, этот вариант обеспечиваетнаибольшее быстродействие, так как при проверке наличия информации контроллерупридется «заглянуть» лишь в одну строку кэша, но и наименееэффективен, поскольку при записи контроллер не будет выбирать«оптимальное» место. При одинаковом объеме кэша схема с полнойассоциативностью будет наименее быстрой, но наиболее эффективной.
Полностью ассоциативный кэшвстречается на практике, но, как правило, у него очень небольшой объем. Например,в ЦП Cyrix 6x86 использовалось256 байт такого кэша для команд перед унифицированным 16-или 64-Кбайт кэшем L1. Часто полноассоциативную схему применяют припроектировании TLB (о них будет рассказано ниже), кэшейадресов переходов, буферов чтения-записи и т. д. Как правило, уровниассоциативности I-cache и D-cache довольно низки (до четырехканалов) — их увеличение нецелесообразно, поскольку приводит к увеличениюзадержек доступа и в итоге негативно отражается на производительности. Вкачестве некоторой компенсации увеличивают ассоциативность S-cache (обычно до 16 каналов), так как задержки при доступе кэтому кэшу неважны. Например, согласно результатам исследований частоиспользуемых целочисленных задач, у Intel Pentium III 16 Кбайт четырехканального D-cache было достаточно для покрытия около 93% запросов, а16-Кбайт четырехканального I-cache- 99% запросов.
Размер строки и тегакэш-памяти
Немаловажная характеристикакэш-памяти — размер строки. Как правило, на одну строку полагается одна записьадреса (так называемый тег), которая указывает, какому адресу в оперативнойпамяти соответствует данная линия. Очевидно, что нумерация отдельных байтовнецелесообразна, поскольку в этом случае объем служебной информации в кэше внесколько раз превысит объем самих данных. Поэтому один тег обычно полагаетсяна одну строку, размер которой обычно 32 или 64 байта (реально существующиймаксимум 1024 байта), и эквивалентен четырем (иногда восьми) разрядностямсистемной шины данных. Кроме того, каждая строка кэш-памяти сопровождаетсянекоторой информацией для обеспечения отказоустойчивости: одним или несколькимибитами контроля четности (parity) или восемью и болеебайтами обнаружения и коррекции ошибок (ЕСС, Error Checking and Correcting),хотя в массовых решениях часто не используют ни того, ни другого.
Размер тега кэш-памяти зависит оттрех основных факторов: объема кэш-памяти, максимального кэшируемого объемаоперативной памяти, а также ассоциативности кэш-памяти. Математически этотразмер рассчитывается по формуле:
Stag=log2(Smem*A/Scache),
где Stag — размер одного тегакэш-памяти, в битах; Smem — максимальный кэшируемыйобъем оперативной памяти, в байтах; Scache — объемкэш-памяти, в байтах; А — ассоциативность кэш-памяти, в каналах.
Отсюда следует, что для системы с1-Гбайт оперативной памятью и 1-Мбайт кэш-памятью с двухканальнойассоциативностью потребуется 11 бит для каждого тега. Примечательно, чтособственно размер строки кэш-памяти никак не влияет на размер тега, но обратнопропорционально влияет на количество тегов. Следует понимать, что размер строкикэш-памяти не имеет смысла делать меньше разрядности системной шины данных, номногократное увеличение размера приведет к чрезмерному засорению кэш-памятиненужной информацией и излишней нагрузке на системную шину и шину памяти. Крометого, максимально кэшируемый объем кэш-памяти не обязан соответствоватьмаксимально возможному устанавливаемому объему оперативной памяти в системе.Если возникнет ситуация, когда оперативной памяти окажется больше, чем можетбыть кэшировано, то в кэш-памяти будет присутствовать информация только изнижнего сегмента оперативной памяти. Именно такой была ситуация с платформой Socket7/Super7. Наборы микросхем дляэтой платформы позволяли использовать большие объемы оперативной памяти (от 256Мбайт до 1 Гбайт), в то время как кэшируемый объем часто был ограничен первыми64 Мбайт (речь идет о B-cache,находящемся на системной плате) по причине использования дешевых 8-битмикросхем теговой SRAM (2 бита из которыхрезервировалось под указатели действительности и измененности строки). Этоприводило к ощутимому падению производительности.
Какая информация содержится втегах кэш-памяти? Это информация об адресах, но как можно точно отобразитьрасположение строки кэш-памяти на всем пространстве кэшируемого объемаоперативной памяти, используя столь незначительное количество адресных битов?Это понятие является фундаментальным в понимании принципов функционированиякэш-памяти. Рассмотрим предыдущий пример, с 11-бит тегами. Учитывая логическоесегментирование благодаря двухканальной ассоциативности, можно рассматриватьданную кэш-память как состоящую из двух независимых сегментов по 512 Кбайткаждый. Представим оперативную память как состоящую из «страниц» по512 Кбайт каждая — их будет соответственно 2048 штук. Далее, Iog2(2048) = 11 (основание логарифма равно 2, так как возможны только двалогических состояния каждого бита). Это означает, что фактически тег — не номеротдельной строки кэш-памяти, а номер «страницы» памяти, на которуюотображается та или иная строка. Другими словами, в пределах«страницы» сохраняется прямое соответствие ее «строк» ссоответствующими строками кэш-памяти, т. е. п-я строка кэш-памяти соответствуетn-й «строке» данной «страницы»оперативной памяти.
Рассмотрим механизм работыкэш-памяти разных видов ассоциативности. Допустим, имеется абстрактная модель свосемью строками кэш-памяти и 64 эквивалентными строками оперативной памяти.Требуется поместить в кэш строку 9 оперативной памяти (заметим, что все строкинумеруются от нуля и по возрастающей). В модели с прямым отображением этастрока может занять только одно место: 9 mod 8=1(вычисление остатка от деления нацело), т. е. место строки 1. Если взять модельс двухканальной ассоциативностью, то эта строка может занять одно из двух мест:9 mod 4=1, т. е. строку 1 любого канала (сегмента).Полноассоциативная модель предоставляет свободу для размещения, и данная строкаможет занять место любой из восьми имеющихся. Другими словами, фактическиимеется 8 каналов, каждый из которых состоит из 1 строки.
Ни одна из вышеуказанных моделейне позволит, разумеется, поместить в кэш больше строк, чем он физически всостоянии разместить, они лишь предлагают различные варианты, различающиесябалансом эффективности использования кэша и скорости доступа к нему.
Типы подключениякэш-памяти
Количество портов чтения-записикэш-памяти — показатель того, сколько одновременных операций чтения-записиможет быть обработано. Хотя жестких требований и нет, определенное соответствиенабору функциональных устройств ЦП должно прослеживаться, так как отсутствиесвободного порта во время исполнения команды приведет к вынужденному простою.
Существует два основных способаподключения кэшпамяти к ЦП для чтения: сквозной и побочный (Look-Through и Look-Aside).Суть первого в том, что при необходимости данные сначала запрашиваются уконтроллера кэш-памяти самого высокого уровня, который проверяет состояниеподключенных тегов и возвращает либо нужную информацию, либо отрицательныйответ, и в этом случае запрос перенаправляется в более низкий уровень иерархиикэш-памяти или в оперативную память. При реализации второго способа чтениязапрос одновременно направляется как кэш-контроллеру самого высокого уровня,так и остальным кэш-контроллерам и контроллеру оперативной памяти. Недостатокпервого способа очевиден: при отсутствии информации в кэше высокого уровняприходится повторять запрос, и время простоя ЦП увеличивается. Недостатоквторого подхода — высокая избыточность операций и, как следствие, «засорение»внутренних шин ЦП и системной шины ненужной информацией. Логично предположить,что если для кэшей L1 оптимальна сквозная схема, то дляT-cache или B-cache побочная схема может оказаться более выгодной. Для S-cache выбор неоднозначен.
Различают также локальный иудаленный кэш. Локальным называют кэш, находящийся либо в ядре ЦП, либо на тойже кремниевой подложке или в корпусе ЦП, удаленным — размещенный на системнойплате. Соответственно локальным кэшем управляет контроллер в ядре ЦП, аудаленным — НМС системной платы. Локальный кэш с точки зрения быстродействияпредпочтительнее, так как интерфейс к удаленному кэшу обычно мультиплексируетсяс системной шиной. С одной стороны, когда другой ЦП захватывает общую системнуюшину или какой-либо периферийный контроллер обращается к памяти напрямую,удаленный кэш может оказаться временно недоступным. С другой — такой кэш легчеиспользовать в многопроцессорных системах.
Существуют два распространенныхспособа записи в кэш: сквозной (Write-Through)и обратной (Write-Back) записи.В первом случае информация одновременно сохраняется как в текущий, так и вболее низкий уровень иерархии кэш-памяти (или прямо в оперативную память приотсутствии такового). Во втором — данные сохраняются только в текущем уровнекэш-памяти, при этом возникает ситуация, когда информация в кэше и оперативнойпамяти различается, причем последняя становится устаревшей. Для того чтобы присбросе кэша информация не была необратимо потеряна, к каждой строке кэшадобавляется «грязный» бит (dirty bit, иначе известный как modified). Он нужен для обозначения того, соответствует лиинформация в кэше информации в оперативной памяти, и следует ли ее записать впамять при сбросе кэша.
Также следует упомянуть способрезервирования записи (write allocation). При записи данных в оперативную память частовозникает ситуация, когда записываемые данные могут скоро понадобиться, и тогдаих придется довольно долго подгружать. Резервирование записи позволяет частичнорешить эту проблему: данные записываются не в оперативную память, а в кэш.Строка кэша, вместо которой записываются данные, полностью выгружается воперативную память. Так как вновь записанных данных обычно недостаточно дляформирования полной строки кэша, из оперативной памяти запрашиваетсянедостающая информация. Когда она получена, новая строка записывается, и тегобновляется. Определенных преимуществ или недостатков такой подход не имеет — иногда это может дать незначительный прирост производительности, но также ипривести к засорению кэша ненужной информацией.
Сегментированиекэш-памяти и быстродействие жестких дисков
В первой части данного обзора мыпознакомились с режимом Performance Mode у SCSI-дисков Seagate Cheetah со скоростью вращения 10 000и 15 000 об./мин — Cheetah 10K.7и Cheetah 15K.4. Напомню, чтоутилита Seagate SeaTools Enterpriseпозволяет пользователю управлять политикой кэширования и, в частности,переключать новейшие SCSI-диски Seagateмежду двумя разными моделями кэширования — Desktop Mode и Server Mode. Этот пункт в меню SeaTools носит название Performance Mode (PM) иможет принимать два значения — On (Desktop Mode) и Off(Server Mode).Отличия между этими двумя режимами чисто программные — в случае Desktop Modeкэш-память жесткого диска разбивается на фиксированное число сегментовпостоянного (одинакового) объема и далее они используются для кэшированияобращений при чтении и записи. Причем, в отдельном пункте меню пользовательдаже может сам назначать количество сегментов (управлять сегментированиемкэша): например, вместо дефолтных 32-х сегментов проставить другое значение(при этом объем каждого сегмента пропорционально уменьшится).
В случае же Server Mode сегменты буфера (кэша диска)могут динамически (пере)назначаться, меняя при этом свой размер и количество.Микропроцессор (и микропрограмма) диска сами динамически оптимизируютколичество (и емкость) сегментов кэш-памяти в зависимости от поступающих дляисполнения на диск команд.
Тогда мы смогли выяснить, чтоиспользование новых накопителей Seagate Cheetah в режиме «Desktop»(при фиксированном сегментировании по умолчанию — на 32 сегмента) вместодефолтного «Server» с динамическим сегментированиемспособно немного поднять производительность дисков в ряде задач, болеехарактерных для настольного компьютера или медиа-серверов. Причем, эта прибавкапорой может достигать 30-100% (!) в зависимости от типа задачи и модели диска,хотя в среднем она оценивается величиной 30%, что, согласитесь, тоже неплохо.Среди таких задач — рутинная работа настольного ПК (тесты WinBench,PCmark, H2bench),чтение и копирование файлов, дефрагментация. При этом в чисто серверныхприложениях производительность накопителей почти не падает (если и падает, тонезначительно). Впрочем, заметный выигрыш от использования Desktop Mode мы смогли наблюдать только надиске Cheetah 10K.7, тогда какее старшей сестрице Cheetah 15K.4оказалось почти все равно, в каком из режимов работать над настольнымиприложениями.
Пытаясь разобраться дальше, каквлияет сегментирование кэш-памяти этих жестких дисков на производительность вразличных приложениях и какие режимы сегментирования (какое количествосегментов памяти) более выгодно при выполнении тех или иных задач, я исследовалвлияние количества сегментов кэш-памяти на производительность диска Seagate Cheetah15K.4 в широком диапазоне значений — от 4 до 128сегментов (4, 8, 16, 32, 64 и 128). Результаты этих исследований и предлагаютсявашему вниманию в этой части обзора. Подчеркну, что данные результаты интересныне только сугубо для этой модели дисков (или SCSI-дисковSeagate в целом) — сегментирование кэш-памяти и выборколичества сегментов — это одно из основных направлений оптимизации firmware, в том числе, настольных дисков с интерфейсом ATA, которые сейчас также оснащаются преимущественно буфером8 Мбайт. Поэтому описанные в данной статье результаты производительностинакопителя в различных задачах в зависимости от сегментирования его кэш-памятиимеют отношение и к индустрии настольных ATA-накопителей.А поскольку методика испытаний была описана в первой части, переходимнепосредственно к самим результатам.
Впрочем, прежде, чем перейти кобсуждению результатов, взглянем чуть подробнее на устройство и работусегментов кэш-памяти диска Seagate Cheetah 15K.4, чтобы лучше понимать,о чем идет речь. Из восьми мегабайт для собственно кэш-памяти (то есть длякэширующих операций) здесь доступно 7077 Кбайт (остальное — служебная область).Эта область делится на логические сегменты (Mode Select Page 08h, byte13), которые используются для чтения и записи данных (для осуществления функцийупреждающего чтения с пластин и отложенной записи на поверхность диска). Дляобращения к данным на магнитных пластинах сегменты используют именно логическуюадресацию блоков накопителя. Диски этой серии поддерживают максимум 64 сегментакэш-памяти, причем длина каждого сегмента равна целому числу секторов диска.Объем доступной кэш-памяти, по всей видимости, распределяется поровну междусегментами, то есть если сегментов, скажем, 32, то объем каждого сегмента равенпримерно 220 Кбайт. При динамической сегментации (в режиме PM=off) количество сегментов может меняться винчестеромавтоматически в зависимости от потока команд от хоста.
Приложения для серверов инастольных компьютеров требуют различных операций кэширования от дисков дляобеспечения оптимальной производительности, поэтому сложно обеспечить единуюконфигурацию для наилучшего выполнения этих задач. По мнению Seagate,для «настольных» приложений требуется сконфигурировать кэш-память так, чтобыбыстро отвечать на повторяющиеся запросы большого количества небольшихсегментов данных без задержек на упреждающее чтение смежных сегментов. Всерверных задачах, напротив, требуется так сконфигурировать кэш, чтобыобеспечить поступление больших объемов последовательных данных внеповторяющихся запросах. В этом случае более важна способность кэш-памятихранить больше данных из смежных сегментов при упреждающем чтении. Поэтому для Desktop Modeпроизводитель рекомендует использовать 32 сегмента (в ранних версиях Cheetah использовались 16 сегментов), а для Server Mode адаптивное количество сегментовстартует всего с трех на весь кэш, хотя в процессе работы может иувеличиваться. Мы в своих экспериментах по поводу влияния количества сегментовна производительность в различных приложениях ограничимся диапазоном от 4сегментов до 64 сегментов, а в качестве проверки «прогоним» диск также при 128сегментах, установленных в программе SeaTools Enterprise (программа при этом несообщает, что данное количество сегментов в этом диске недопустимо).
Увеличениепроизводительности кэш-памяти
Формула для среднего временидоступа к памяти в системах с кэш-памятью выглядит следующим образом:
Среднее время доступа = Время обращения при попадании + Доляпромахов x Потери при промахе
Эта формула наглядно показываетпути оптимизации работы кэш-памяти: сокращение доли промахов, сокращение потерьпри промахе, а также сокращение времени обращения к кэш-памяти при попадании.На рисунке 5.38 кратко представлены различные методы, которые используются внастоящее время для увеличения производительности кэш-памяти. Использование техили иных методов определяется прежде всего целью разработки, при этомконструкторы современных компьютеров заботятся о том, чтобы система оказаласьсбалансированной по всем параметрам.Зачем увеличивать кэш ?
Первичнаяпричина увеличения объема встроенного кэша может заключаться в том, чтокэш-память в современных процессорах работает на той же скорости, что и сампроцессор. Частота процессора в этом случае никак не меньше 3200 MГц.Больший объем кэша позволяет процессору держать большие части кода готовыми квыполнению. Такая архитектура процессоров сфокусирована на уменьшении задержек,связанных с простоем процессора в ожидании данных. Современные программы, в томчисле игровые, используют большие части кода, который необходимо извлекать изсистемной памяти по первому требованию процессора. Уменьшение промежутковвремени, уходящих на передачу данных от памяти к процессору, — это надежныйметод увеличения производительности приложений, требующих интенсивного взаимодействияс памятью. Кэш L3 имеет немного более высокое времяожидания, чем L 1 и 2, это вполне естественно. Хоть он имедленнее, но все-таки он значительно более быстрый, чем обычная память. Не всеприложения выигрывают от увеличения объема или скорости кэш-памяти. Это сильнозависит от природы приложения.
Если большойобъем встроенного кэша — это хорошо, тогда что же удерживало Intelи AMD от этой стратегии ранее? Простым ответом являетсявысокая себестоимость такого решения. Резервирование пространства для кэшаочень дорого. Стандартный 3.2GHz Northwood содержит 55 миллионов транзисторов. Добавляя 2048 КБкэша L3, Intel идет на увеличениеколичества транзисторов до 167 миллионов. Простой математический расчет покажетнам, что EE — один из самых дорогих процессоров.
Сайт AnandTech провел сравнительное тестирование двух систем, каждаяиз которых содержала два процессора – Intel Xeon 3,6 ГГц в одном случае и AMD Opteron 250 (2,4 ГГц) – в другом.Тестирование проводилось для приложений ColdFusion MX 6.1, PHP 4.3.9, и Microsoft .NET 1.1. Конфигурации выгляделиследующим образом:
AMD
— Dual Opteron 250;
— 2 ГБ DDR PC3200 (Kingston KRX3200AK2);
— системная плата Tyan K8W;
— ОС Windows 2003 Server Web Edition (32 бит);
— 1 жесткий IDE 40 ГБ 7200 rpm, кэш 8 МБ
Intel
— Dual Xeon 3.6 ГГц;
— 2 ГБ DDR2;
— материнская плата Intel SE7520AF2;
— ОС Windows 2003 Server Web Edition (32 бит);
— 1 жесткий IDE 40 ГБ 7200 rpm, кэш 8 МБ
На приложенияхColdFusion и PHP, не оптимизированныхпод ту или иную архитектуру, чуть быстрее (2,5-3%) оказались Opteron’ы,зато тест с .NET продемонстрировал последовательнуюприверженность Microsoft платформе Intel,что позволило паре Xeon’ов вырваться вперед на 8%. Выводвполне очевиден: используя ПО Microsoft для веб-приложений,есть смысл выбрать процессоры Intel, в других случаяхнесколько лучшим выбором будет AMD.
Больше– не всегда лучше
Частота промаховпри обращении к кэш-памяти может быть значительно снижена за счет увеличенияемкости кэша. Но большая кэш-память требует больше энергии, генерирует большетепла и увеличивает число бракованных микросхем при производстве.
Один из способовобойти эти трудности — передача логики управления кэш-памятью от аппаратногообеспечения к программному.
«Компиляторпотенциально в состоянии анализировать поведение программы и генерироватькоманды по переносу данных между уровнями памяти», — отметил Шен.
Управляемаяпрограммным образом кэш-память сейчас существует лишь в исследовательскихлабораториях. Возможные трудности связаны с тем, что придется переписыватькомпиляторы и перекомпилировать унаследованный код для всех процессоров новогопоколения.
Выводы
Анализизложенного выше материала позволяет сделать заключение, что в соответствии сканоническими теориями, современные производители широко используют кэш-памятьпри построении новейших процессоров. Во многом, их превосходные характеристикипо быстродействию достигаются именно благодаря применению кэш-памяти второго идаже третьего уровня. Этот факт подтверждает теоретические выкладкиГарвардского университета о том, что ввиду действия принципа локальностиинформации в современных компьютерах применение кэш-памяти смешанного типапозволяет добиться превосходных результатов в производительности процессоров иснижает частоту необходимых обращений к основной памяти.
Налицо широкиеперспективы дальнейшего применения кэш-памяти в машинах нового поколения,однако существующая проблематика невозможности бесконечного увеличения кэша, атакже высокая себестоимость изготовления кэша на одном кристалле с процессором,ставит перед конструкторами вопросы о некоем качественном, а не количественномвидоизменении или скачке в принципах, либо огранизации кэш-памяти в процессорахбудущего.
Дефрагментациядиска
Дефрагментатордисков выполняет поиск фрагментированных файлов и папок на локальных томах.Фрагментированные файл или папка разделены на множество частей и разбрасаны повсему тому.
Еслитом содержит много фрагментированных файлов и папок, системе требуется большеевремя для обращения к ним, поскольку приходится выполнять дополнительныеоперации чтения с диска их отдельных частей. На создание файлов и папок такжеуходит больше времени, поскольку свободное пространство на диске состоит изразрозненных фрагментов. Системе приходится сохранять новые файлы и папки вразных местах тома.
Дефрагментатордисков перемещает разрозненные части каждого файла или папки в одно место тома,после чего файлы и папки занимают на диске единое последовательноепространство. В результате доступ к файлам и папкам выполняется эффективнее.Объединяя отдельные части файлов и папок, программа дефрагментации такжеобъединяет в единое целое свободное место на диске, что делает менее вероятнойфрагментацию новых файлов.
Процесспоиска и объединения фрагментированных файлов и папок называетсядефрагментацией. Время, необходимое для дефрагментации тома, зависит отнескольких факторов, в том числе от его размера, общего числа файлов, степенифрагментации и доступных системных ресурсов. Перед выполнением дефрагментацииможно найти все фрагментированные файлы и папки, проанализировав том.Полученные сведения позволят узнать, как много фрагментированных файлов и папоксодержит том, и решить, следует ли выполнять дефрагментацию.
Спомощью программы дефрагментации можно преобразовать тома, использующиефайловые системы FAT, FAT32 и NTFS.
Для запускапрограммы дефрагментации диска необходимо через кнопки ПУСК, ПРОГРАММЫ,СТАНДАРТНЫЕ выйти на панельСЛУЖЕБНЫЕ
и запустить ДЕФРАГМЕНТАЦИЯ ДИСКА.
/>
Рис.1.1. Общий вид панели дефрагментации.
Целямидефрагментации дисков являются:анализ состояния каталогов и файлов на диске; выполнение операций перезаписи информации в интересах увеличения объема сплошных областей свободного пространства.
Для проведенияфрагментации следует выбрать любой из дисков кроме системного.
Непосредственноперед дефрагментацией необходимо провести анализ выбранного диска и получитьотчет о работе программы анализа.
/>
Рис.1.2. Панель дефрагментации с результатами анализа диска.
В результатеанализа на панели дефрагментации отображается распределение:Фрагментированной Нефрагментированной Системной информации Свободных областей памяти.
Далее запускается программа дефрагментации ивыводится отчет о ее работе.
/>
Рис.1.3. Панель дефрагментации с отчетом
Далее следуютотчеты результатов анализа и дефрагментации диска Е:
Том (E:) до дефрагментации:
Размер тома = 30,58 ГБ
Размер кластера = 4 КБ
Занято = 21,23 ГБ
Свободно = 9,35 ГБ
Процент свободного места = 30 %
Фрагментация тома
Всего фрагментировано = 1 %
Фрагментация файлов = 3 %
Фрагментация свободного места = 0 %
Фрагментация файлов
Всего файлов = 6 720
Средний размер файла = 4 МБ
Всего фрагментировано файлов = 23
Всего лишних фрагментов = 105
В среднем фрагментов на файл = 1,01
Фрагментация файла подкачки
Размер файла подкачки = 0 байт
Всего фрагментов = 0
Фрагментация папок
Всего папок = 307
Фрагментировано папок = 39
Лишних фрагментов папок = 317
Фрагментация MFT (Master File Table)
Общий размер MFT = 26 МБ
Счетчик записей MFT = 7 049
Процент использования MFT = 26 %
Всего фрагментов MFT = 2
--------------------------------------------------------------------------------
Фрагментов Размер файла Наиболее фрагментированные файлы
44 180 КБ \Need for Speed Most Wanted\SOUND\ENGINE
31 7 МБ \System VolumeInformation\RP32\A0020244.exe
29 120 КБ \age of mythology\Eng\history\units
29 120 КБ \age of mythology\locale\history\units
28 116 КБ \age of mythology\Eng\history\techs
28 116 КБ \age of mythology\locale\history\techs
25 108 КБ \Need for Speed Most Wanted\TRACKS\L2RA
11 44 КБ \2\Katjuha 2005
10 625 КБ \System VolumeInformation\RP32\A0020265.exe
10 69 КБ \Thumbs.db
9 548 КБ \System VolumeInformation\RP32\A0020243.exe
9 40 КБ \Need for Speed Most Wanted\NIS
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\Sv
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\pt-br
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\pt
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\NL
8 126 КБ \System VolumeInformation\RP34\change.log.2
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\Da
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\en-uk
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\De
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\fr-fr
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\Fi
8 36 КБ \Need for Speed Most Wanted\European HelpFiles\es
7 32 КБ \Need for Speed Most Wanted\EA Help
7 28 КБ \Need for Speed Most Wanted\CARS
7 60 КБ \2\@1@
6 372 КБ \System VolumeInformation\RP32\A0020250.dll
6 336 КБ \System VolumeInformation\RP32\A0020247.exe
6 64 КБ \2\@@@@
5 316 КБ \System VolumeInformation\RP32\A0020241.exe
Том (E:) после дефрагментации:
Размер тома = 30,58 ГБ
Размер кластера = 4 КБ
Занято = 21,23 ГБ
Свободно = 9,35 ГБ
Процент свободного места = 30 %
Фрагментация тома
Всего фрагментировано = 0 %
Фрагментация файлов = 0 %
Фрагментация свободного места = 0 %
Фрагментация файлов
Всего файлов = 6 720
Средний размер файла = 4 МБ
Всего фрагментировано файлов = 0
Всего лишних фрагментов = 0
В среднем фрагментов на файл = 1,00
Фрагментация файла подкачки
Размер файла подкачки = 0 байт
Всего фрагментов = 0
Фрагментация папок
Всего папок = 307
Фрагментировано папок = 1
Лишних фрагментов папок = 0
Фрагментация MFT (Master File Table)
Общий размер MFT = 26 МБ
Счетчик записей MFT = 7 049
Процент использования MFT = 26 %
Всего фрагментов MFT = 2
--------------------------------------------------------------------------------
Фрагментов Размер файла Файлы, которые не могут бытьдефрагментированы
отсутствует
Вывод
Из отчетоввидно, что после дефрагментации диска Е: фрагментированных файлов не осталось.Произошла полная дефрагментация диска.
Литература
1. Э.Танненбаум, Современныеоперационные системы, СПб: Питер, 2002. — 1024 с.
2. Р.Столлинз Операционныесистемы. М.: Вильямз, 2002. – 600 с.
3. В.Г.Олифер, Н.А.ОлиферСетевые операционные системы. СПб: Питер, 2001.- 554 с.А. Шоу. Логическое проектирование операционніх систем. М.: „МИР”, 1981.- 360 с. Казарин О.В. Безопасность программного обеспечения компьютерных систем.: Москва, МГУЛ, 2003, 212 с. Конспект лекций. Справочная система Windows XP.