Воскресенье, 22.12.2024, 14:05 | Приветствую Вас Гость

Information inovation!

Главная » Статьи » Компы! » Настройка и оптимизация винды

Дадим по мозгам. Продолжаем вникать в тонкости разгона памяти
На досуге я пришел к выводу, что называть оперативную память "мозгами" неверно, ибо мозги не только хранят информацию, а еще и думают (во всяком случае, так считается). А оперативная память? Информацию-то ОП хранить как раз и не умеет - эту функцию выполняет винчестер, а "думает" - процессор. Так что, как ни крути, мозги - это весь компьютер в целом (разве что без периферии). Электронный мозг - во как! Прямо переоценка всех ценностей, ницшеанство какое-то…

Поскольку между предыдущей статьей (см. Upgrade #17-18 (159-160)) и нынешней образовался определенный цикл ожидания, кратко напомню, о чем там шла речь. Мы выяснили, что статическая память (SRAM) очень быстрая, но сильно дорогая, ибо для хранения одного бита используется триггер, который состоит минимум из шести транзисторов. Альтернативная память, динамическая (DRAM), для хранения битов использует ячейки, состоящие из одного триггера и одного или двух конденсаторов.

Соответственно, она получается более компактной и дешевой, но более медленной. Дело в том, что заряд с конденсатора вечно "стекает" и для поддержания памяти в нормальном состоянии ее нужно постоянно регенерировать (динамически восстанавливать). Для чего контроллер памяти периодически прерывает все операции (каждые 15 мкс или даже чаще) и считывает все содержимое памяти (в последних моделях регенерируются только те участки памяти, с которыми не происходит работа в данный момент, что уменьшает общее время регенерации всей памяти).

Один чип памяти представляет собой матрицу битов. В модуле памяти, как правило, восемь чипов, которые используются для хранения байтов. Во многих модулях имеется и девятый чип, который используется для хранения битов контроля четности. Впрочем, на разгон памяти наличие девятого чипа никак не влияет, так как, хоть восемь, хоть девять, хоть шестнадцать чипов, технология обращения процессора к памяти остается одной и той же. Чтобы более наглядно пояснить то, о чем идет речь, я, немало попотев, изготовил пару рисунков.

Рис. 1. Типовой модуль памяти. Поверх чипов памяти изображена схема внутреннего
устройства чипа.

На рис. 1 представлен (весьма схематично) типовой модуль памяти. Поверх чипов памяти изображен не сеанс одновременной игры в крестики-нолики, а, так сказать, схема внутреннего устройства чипа. Из рисунка видно, что каждый чип в данном варианте может хранить 16 бит информации, а весь модуль в целом, соответственно, - 16 байт. Если четыре таких модуля установить на системной плате, то можно получить ОП емкостью 64 байта! Не очень много, конечно, но для наглядности сойдет и так.

Если бы я попытался изобразить модуль памяти емкостью, скажем, 256 Мб, то мне пришлось бы на каждом чипе рисовать матрицу размером 16 384 x 16 384 элемента, то есть в 1024 раза шире и выше, чем на представленном рисунке. Если на 1 мм рисунка уместить 10 элементов, то для изображения только одной матрицы потребовался бы лист размером приблизительно 1,6 x 1,6 метра, а все восемь чипов заняли бы в ширину минимум 13 метров. Вот сколько много элементов содержится в одном модуле на 256 Мб (можете представить себе также, сколько их содержится в модулях 512 Мб и 1 Гб).

Ну ладно, вернемся к рис. 1. Красные и синие точки в матрицах - это конденсаторы, на которых, соответственно, есть заряд (красный) и нет заряда (синий). То есть красные точки - это биты, установленные в 1, а синие - в 0. Маленькая букашка в правом верхнем углу - это микросхема EEPROM (Electrically Erasable Programmable ROM - электронно-стираемая программируемая ROM; иногда этот вид памяти называют Flash ROM).

Данная микросхема хранит описание модуля памяти: емкость, частоту шины, стандартные тайминги и т. п. Называется эта микросхема SPD (Serial Presence Detect), и именно ее читают процедуры начального тестирования в момент включения компьютера. Соответственно, информация, хранящаяся в SPD модуля памяти, становится руководством к действию для контроллера памяти. Так называемый разгон памяти есть принудительное выставление в Setup BIOS других, более жестких, характеристик доступа к памяти, но об этом чуть позже. А пока давайте продолжим изучение устройства памяти.

Рис. 2. Восемь матриц, которые и составляют полный банк памяти DRAM.

Рис. 2 представляет собой еще большую схематизацию модуля памяти. На нем изображены все восемь матриц, которые и составляют полный банк памяти DRAM. На схеме также изображены цветные линии. Ярко-зеленые (линии адреса строки) и желтые (линии адреса столбца) в совокупности образуют адресную шину, соединяющую центральный процессор и ОП. Красные линии - шина данных, по ней выбранные данные идут в процессор или поступают из него в ОП. На рисунке во второй строке всех восьми матриц левый элемент расположен на квадрате желтоватого цвета. "Желтые" биты из восьми чипов образуют число 01110100. Как же процессор получает это число?

Для обмена данными используется команда MOV. Эта команда применяется как для обмена данными между внутренними регистрами процессора, так и для обмена данными с памятью. Допустим, процессор получил инструкцию, требующую загрузить из памяти по указанному адресу число в один из регистров. В этом случае процессор посылает указанный в команде адрес по своей шине адреса, а по шине чтения / записи посылает сигнал (R/W#), указывающий, что он хочет прочитать данные из памяти. Контроллер памяти преобразует адрес из формата, который используется в программах, в "железный" формат B:R:C: [номер банка]:[номер строки матрицы]:[номер столбца матрицы]. То есть контроллер точно знает, какой диапазон адресов размещается в банке памяти и в каком именно.

Рис. 2 показывает только один банк памяти, поэтому для простоты мы предположим, что в компьютере только один банк, и фрагмент адреса [номер банка] мы опустим. Итак, номер строки и столбца попадает в специальное устройство - мультиплексор (на рисунке - серый квадрат, в котором пересекаются белые, желтые и зеленые линии). Мультиплексор сначала посылает в банк номер строки (на рисунке - 0010, то есть вторая сверху строка).

Соответственно, на указанную строку во всех чипах банка подается сигнал готовности. После этого мультиплексор переключает линии, что требует некоторого времени, и посылает номер запрашиваемого столбца. Затем указанный столбец активизируется также во всех чипах банка (в нашем случае это столбец 1000). Наконец, начинается передача сигналов из конденсаторов, находящихся на пересечении указанных столбцов и строк (в нашем случае - желтые ячейки). Эти данные помещаются на шину данных процессора (на рисунке - красные линии). Что там с ними делает процессор - это уже его личные трудности, к работе ОП отношения не имеющие.

Для ускорения работы память разбивается на так называемые страницы - логически связанные группы байт. На уровне микросхем, входящих в один модуль памяти, страница - это последовательность рядом расположенных бит в пределах одной строки (размер страницы кратен степени 2). При такой схеме выбор данных из памяти происходит блоком, когда номер строки устанавливается только один раз, а затем происходит считывание всех рядом расположенных бит. На рис. 2 вторая строка всех матриц показана как страница. Установив номер строки и номер первого считываемого столбца, все остальные столбцы (они показаны разными цветами) считываются путем увеличения номера столбца на единицу.

На представленной схеме, таким образом, распложены четыре байта: 01110010 (его запрос показан на схеме), 11000001, 10110000 и 11110100. Режим постраничного доступа к данным памяти когда-то считался самым быстрым, а потому получил название "быстрый страничный доступ" (FPM - Fast Page Mode).
Теперь повторим все вышеизложенное, используя специальную терминологию. Перед тем как подать на чипы памяти адрес запрашиваемой строки, генерируется специальный синхронизирующий импульс, называемый стробом адреса строки - RAS (Row Address Strobe), который подается по отдельной линии RAS# (символ # говорит о том, что по этой линии посылается сигнал низкого напряжения). То же самое и перед посылкой адреса столбца; по линии CAS# (Column Address Strobe) посылается соответствующий синхроимпульс.

Вся схема работает следующим образом:
1) накопление заряда для синхроимпульса RAS (который должен так шарахнуть, чтобы пробить всю линию строк битовых матриц в чипах); 2) подача сигнала RAS; 3) переключение мультиплексора для подачи сигнала CAS; 4) подача сигнала CAS, который фактически является сигналом начала приема / передачи битов через адресную шину (прием или передача определяется сигналом на линии R/W#, которая на рис. 2 не показана, чтобы не загромождать схему).

Теперь вернемся к замысловатой фразе, которая начинала предыдущую статью (фразу я нашел в одном специальном тексте, посвященном разгону памяти). Итак: "Можно найти как очень быстрые DDR400-модули, работающие с таймингами 2-2-2-5 (CAS Latency - RAS# to CAS# Delay - RAS# Precharge - Active to Precharge Delay), так и модули с гораздо более худшими характеристиками. Большое число представленных на рынке модулей DDR400 требует использования CL2,5, однако и это не худший вариант". О чем тут, собственно, идет речь?

Как мы теперь уже отчетливо видим, приведенные тайминги - это описание обращения к модулю памяти при операциях чтения / записи. Только, строго говоря, они приведены несколько задом наперед. Первой происходит операция RAS# Precharge - накопление заряда для RAS. Затем происходит подача этого сигнала, и его длительность указывается как Active to Precharge Delay (в некоторых Setup BIOS встречаются обозначения RAS# Pulse width и т. п.). После этого осуществляется переключение RAS# to CAS# Delay, на которое, понятно, затрачивается некоторое время, и, наконец, после подачи сигнала CAS происходит еще одна задержка, связанная с установкой запрашиваемого столбца (CAS Latency), после которой, собственно, и начинается передача данных.
Теперь посмотрим на рис. 3 и 4. На них изображен фрагмент меню из Setup BIOS (раздел Advanced Chipset Features), посвященный таймингам модулей памяти.

Рис. 3. Фрагмент меню из Setup BIOS (раздел Advanced Chipset Features), посвященный таймингам модулей памяти.

На рис. 3 приведены установки By SPD, то есть стандартные, по умолчанию, на основе заводской прошивки в микросхеме SPD. Несложно сообразить, что в данном случае речь идет не о самых быстрых модулях памяти, на что указывает их стандартный тайминг - 2,5-3-3-7. Однако, если верить процитированному отрывку, CL2,5 - "это не худший вариант" (CL - это простое сокращение от CAS Latency). Что же нужно сделать для того, чтобы разогнать эту память?

Рис. 4. Чтобы разогнать память, надо переключить параметр DRAM Timing Selectable с By SPD на Manual и уменьшить все значения.

Да, в общем-то, не так уж и много: переключить параметр DRAM Timing Selectable с By SPD (рис. 3) на Manual (рис. 4) и уменьшить все значения. Это тем более просто потому, что изменение этих параметров никаким образом не может повредить модули памяти (в отличие от процессора, который с некоторой непривычки можно и сжечь). Однако, конечно, все не совсем так просто, поэтому давайте разбираться.

Временные характеристики операций обращения к памяти (тайминги) используют в качестве единиц измерения такты шины. Уменьшая количество тактов для каждой операции, мы тем самым уменьшаем время выполнения этой операции и как результат ускоряем чтение / запись оперативной памяти. В теории это так. На практике оказывается, что произвольное уменьшение таймингов может заставить систему работать нестабильно, а то и вовсе подвесить ее (в этом случае имеет смысл восстановить опцию By SPD и начинать все сначала).

Все дело в физических ограничениях модулей памяти (собственно, в чем еще может быть причина?). Скажем, уменьшая параметр Active to Precharge Delay (который выглядит устрашающе огромно), можно уменьшить длительность импульса RAS таким образом, что микросхемы банка просто не успеют обработать все строки матриц. Или, скажем, параметр RAS Precharge. Дело в том, что сигнал RAS вырабатывается не только во время обмена данными с процессором, но и при регенерации памяти - постоянной операции, которая представляет собой просто сканирование всех строк матриц. В случае уменьшения этого параметра ниже некоторой критической точки заряд RAS не успеет накопиться, что приведет к некомплектной регенерации.

А так как биты в DRAM должны регенерироваться постоянно, то ошибка в установке RAS Precharge приведет к "стеканию" каких-нибудь конденсаторов в DRAM и как следствие потере данных. То же самое справедливо и для RAS to CAS Delay. Уменьшить его можно до минимума, но успеют ли все микросхемы, входящие в состав модуля памяти, установить сигнал на требуемых строках, прежде чем поступит CAS? Если не успеют, то ошибка при обращении к памяти гарантирована. О времени CL можно сказать то же самое: обмен данными имеет смысл начинать только после установки сигналов на всех столбцах матриц.

Стало быть, технология улучшения временных характеристик должна заключаться в следующем: выбирается какой-либо параметр, и его характеристика начинает постепенно уменьшаться на одно значение, после каждого изменения система запускается и проверяется устойчивость работы. При первом же сбое нужно вернуться к предыдущему значению. Затем переходят к следующему параметру и т. д. С какого начинать? Строго говоря, особой разницы нет - можно так, а можно эдак. Экспериментируйте, короче. Теперь, надеюсь, вы представляете, о чем идет речь. Однако кое-чего вы еще не знаете (что, впрочем, не должно вам помешать начать эксперименты прямо сейчас).

Дело в том, что тайминги, указанные в BIOS (и на маркировке самих чипов), - это показатель, выраженный в тактах. Он практически никаким образом не связан с частотой. А такт при частоте шины 100 МГц и 133 (а то и 400) МГц - это не совсем одно и то же. Кроме того, частоты процессоров и шин обозначают в МГц и ГГц, а скоростные характеристики микросхем памяти в наносекундах (нс). Ну и, чтобы окончательно все запутать, используются два способа обозначения модулей памяти (например, в едином прайс-листе, скажем, на price.ru). В специальной литературе можно встретить такое разъяснение: обозначение PC100 говорит о том, что модуль памяти работает на частоте 100 МГц. Ну, а обозначение PC3200 о чем говорит? О том, что модуль может работать на частоте 3,2 ГГц?

Того, кто приобретет модуль памяти, руководствуясь этим предположением, ждет большое разочарование.
Что касается зависимости между тактовой частотой в мегагерцах и продолжительностью такта в наносекундах, то тут все довольно просто. Достаточно запомнить несложную формулу. Чтобы по тактовой частоте, выраженной в мегагерцах, определить продолжительность такта в нс, нужно 1000 разделить на показатель частоты. Абсолютно точно так же находится частота в мегагерцах по продолжительности такта в наносекундах: 1000 делится на количество нс.

Например, если частота шины 133 МГц, то длительность такта будет равна приблизительно 7,5 нс (1000 / 133). Таким образом, несложно сделать предварительные прикидки для определения времени, которое займет один цикл передачи данных. Допустим, у нас имеется модуль памяти с частотой 266 МГц и таймингами, как на рис. 3. Тогда имеем: длительность одного такта 3,75 нс (1000 / 266), а всего тактов 15,5 (2,5 + 7 + 3 + 3). Следовательно, общее время цикла составляет приблизительно 58 нс (15,5 x 3,75). Простой подсчет показывает, что если в результате ручной подгонки можно было бы установить тайминги в 2-2-2-5 (как в использованной цитате), то это уменьшило бы общую длительность цикла до 41 нс, то есть почти в 1,4 раза. Допустим, если мы имеем модуль памяти на частоте не 266 МГц, а, скажем, 333 МГц. В этом случае длительность цикла будет 33 нс - очень даже неплохой результат.

В этом месте пытливый читатель может обратить внимание на одно узкое место. К примеру, мы возьмем достаточно быструю память с длительностью цикла 33 нс и переведем это значение в МГц - получится частота 30,3 МГц (1000 / 33). Поскольку один запрос центрального процессора (чтение / запись) выполняется за 33 нс, то для работы с такой памятью достаточно было бы иметь процессор с частотой 30 МГц. Но такая память устанавливается в машины с процессорами Pentium 4. И даже если учесть, что в модулях DDR SDRAM за один цикл передача данных происходит дважды (так называемая удвоенная синхронизация), то все равно процессор должен был бы слишком долго ждать, когда по его запросу поступят данные из ОП.

Чтобы не комкать рассмотрение этого интересного вопроса (учитывая, что статья подходит к концу), мы отложим его разбор до следующего раза. А пока разберемся с пресловутым показателем PCxxx.
В конце прошлого века компания Intel создала новый стандарт для высокоскоростных модулей памяти, работающих на частоте 100 и 133 МГц. Эти два стандарта были названы PC100 и PC133 соответственно.

Память стандарта PC100 выполняла все операции выборки за три такта (3-3-3), тогда как память PC133 стала поддерживать схему 2-2-2 (что на тот момент внесло некоторую путаницу). Начиная с 2001 года на рынке появились модули памяти DDR, поддерживающей частотные характеристики 200 МГц и 266 МГц. Эти модули выпускались в соответствии со спецификациями PC1600 и PC2100. В данной спецификации указывалась не частота работы модуля памяти, а ее пропускная способность, полученная как произведение ширины шины памяти, выраженной в байтах, на ее частоту.

Поскольку у машин на базе процессоров Pentium (а также Athlon и Duron) ширина шины данных составляет 64 бита, или 8 байт, то спецификация памяти PC1600 - это 200 МГц x 8 байт. То же самое и спецификация PC2100 - 266 МГц x 8 байт. Несложно вычислить, что спецификации PC2700 и PC3200 имеют в виду частоты 336 (или 333) и 400 МГц соответственно. Очевидно, что модули памяти со спецификацией PC3200 имеют ту же пропускную способность - 3200 Мб/с, что и шина процессора FSB 400 (Front Size Bus).

Соответственно, уменьшение таймингов для модулей памяти PC3200 может привести к тому, что потребуется увеличить частотные характеристики шины процессора.
Так что, вооружившись характеристиками шин и модулей, подсчитывайте, прикидывайте, калькулируйте, вычисляйте, а я, пожалуй, пойду прогуляюсь, а то от всех этих модулей, битов, байтов, мегагерц и наносекунд у меня что-то мозги разболелись (ага, память заглючила! - Прим. ред.) До скорых встреч.

Разгон памяти и рост производительности системы

Уменьшение временных характеристик модулей памяти (разгон) и общая производительность системы не связаны между собой линейно, как это можно было бы ожидать. На то имеется несколько причин. FSB центрального процессора хотя и имеет ширину
64 бита, однако далеко не всегда процессор обменивается данными с памятью именно по 8 байт данных за раз. Это при работе с жестким диском обмен данными происходит секторами, а процессору может понадобиться 4, 2, а то и вовсе 1 байт. Это, разумеется, не значит, что ощутить увеличение производительности памяти можно только при чтении / записи 8 байт данных. Конечно, и 1 байт будет передан быстрее.

Однако, поскольку для подготовки к передаче 8 байт требуется восемь раз обработать импульс CAS и установить новое значение адреса столбца, то оптимизация такого показателя, как CAS Latency, заметнее всего будет именно при 8-байтовых операциях. Соответственно, при операциях с данными меньшего объема (4, 2, 1 байт) улучшение характеристик CAS Latency даст меньшую эффективность. Однако на самом деле и это обстоятельство является второстепенным. Процессору крайне редко приходится непосредственно обращаться к модулям памяти. Все дело в том, что чаще всего нужные данные он берет из кэша.

У современных процессоров два кэша (Level 1 и Level 2), а у таких моделей, как Intel Itanium или Pentium Extreme Edition, даже три. В кэше L1 размещается фрагмент программного кода и данных, с которыми этот код работает. В случае, если процессор не находит в первом кэше требуемых данных, - такое состояние называется "промахом кэша", - он обращается в кэш L2. И только в случае "промаха" во втором кэше обращается к ОП (а Itanium или EE в этом случае обращаются к кэшу L3). За оптимальное заполнение кэшей (то есть такое, чтобы "промахов" было поменьше) отвечает набор микросхем на системной плате. Поэтому реальный рост производительности системы в результате разгона памяти зависит и от системной платы, вернее, от ее чипсета.

Одни и те же модули данных с одним и тем же процессором могут показать несколько разные результаты на разных системных платах. Кроме того, описанный механизм хождения от кэша к кэшу работает только при считывании данных. При записи алгоритм другой. А, скажем, загрузка команд осуществляется по схеме ОП > L1, что означает пересылку блока команд из ОП в кэш первого уровня, минуя L2 (и L3, если таковой имеется).

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

Контроль четности

Девятый чип в модулях памяти используется для проверки каждого байта на целостность. Контроль четности осуществляется следующим образом. Когда в память записывается один байт, то девятый бит устанавливается таким образом, чтобы общее количество единиц (включая девятый бит) было всегда нечетным. Например, если записывается байт 10010011 (общее число единичных битов четное), то pc-бит (бит контроля четности - parity control) будет установлен в единицу.

А вот при записи числа 10010010 pc-бит будет нулевым. Когда байт считывается, все биты (включая девятый) попадают в блок контроля четности - генератор-компатор. Генератор-компатор анализирует биты и в случае, если единичных битов оказывается четное количество, вырабатывает сигнал об ошибке памяти, посылая соответствующее прерывание в центральный процессор. UP

Категория: Настройка и оптимизация винды | Добавил: Prise (13.06.2007)
Просмотров: 1029 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Наш опрос
Оцените мой сайт
Всего ответов: 55
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz