Сегодня даже рядовой пользователь может попытаться повысить
производительность своего компьютера, изменяя состояние опций BIOS Setup. А было
время, когда для выполнения подобной операции требовались паяльник, осциллограф
и серьезные познания в области цифровой схемотехники. Для современных
оверклокеров акцент сместился от схемотехники к термодинамике, так как
устойчивость работы электронных схем на частотах, превышающих штатные,
существенно зависит от эффективности их охлаждения.
Около двух десятилетий назад, когда под фразой "собрать компьютер в домашних
условиях" понималось не соединение разъемов и закручивание винтов, а
самостоятельное изготовление печатных плат, сборка на уровне микросхем и отладка
на уровне наблюдения электрических сигналов, все было по-другому. Первые IBM
PC/XT, а тем более их 8-битные предшественники вообще не имели Setup. Информацию
о дате и времени требовалось вводить вручную после каждого включения питания, а
о программном переключении тактовой частоты процессора и других параметров не
было и речи. Для повышения производительности компьютера требовалось физическое
вмешательство в схему. Например, для запуска процессора на более высокой
частоте, требовалось заменить кварцевый резонатор в тактовом генераторе. Сегодня
тот же эффект достигается изменением одной опции в BIOS Setup. Модификации
схемы, которые раньше выполнялись с помощью паяльника, теперь выполняются с
помощью программируемой логики без физического вмешательства в устройство.
Все эти результаты эволюции платформы PC, безусловно, хороши и логичны.
Недостаток только в том, что возможности для удовлетворения любопытства и
исследовательского интереса существенно уменьшились, так как в домашних условиях
"залезть" внутрь микросхем чипсета и тем более что-то там модифицировать, к
сожалению, невозможно.
У энтузиастов, разгонявших IBM PC/XT в 80-х годах прошлого века повышением
тактовой частоты процессора Intel 8088 со штатных 4.77 MHz до 8-12 MHz,
сегодняшние эксперименты с частотами 5-10 GHz вызывают двойственные чувства. C
одной стороны, конечно, чем больше, тем лучше и о таких цифрах тогда можно было
только мечтать. С другой стороны, по причинам, рассмотренным выше, степень
проникновения исследователя в предмет исследования существенно уменьшилась.
Мы в очередной раз убеждаемся в том, что ищущий "изюминку" не обрадуется
килограмму изюма, а счастье есть состояние несовместимое с фундаментальными
свойствами пространства и времени. Так как пути устранения указанного
противоречия автору неизвестны, перейдем непосредственно к предметной области.
Чтобы разобраться в работе тактового генератора и схемотехнических аспектах
разгона, рассмотрим эволюцию подсистемы тактирования от "древней" IBM PC/XT до
сегодняшних платформ. В практической части статьи приведен пример, позволяющий
на уровне принципиальной электрической схемы и ассемблера посмотреть на
процессы, происходящие при переключении тактовой частоты в BIOS Setup.
1. Платформы PC/XT. Разгоняем с помощью паяльника.
Тактовый генератор в IBM PC/XT реализован на микросхеме Intel 8284, советский
аналог – КР1810ГФ84, описан в [26].
Задающий генератор использует кварцевый резонатор частотой 14.31818 MHz.
Тактовая частота процессора формируется путем деления на 3 частоты задающего
генератора: 14.31818 MHz / 3 = 4.773 MHz. Тактовый сигнал для системного таймера
формируется путем деления на 12 частоты задающего генератора: 14.31818 MHz / 12
= 1.193 MHz. Заменив кварцевый резонатор 14.318 MHz на 24.0 MHz, мы получим
тактовую частоту процессора в режиме "турбо" 24.0 MHz / 3 = 8.0 MHz.
Работоспособность системы на новой тактовой частоте будет зависеть от
величины технологического запаса быстродействия у процессора, подсистем памяти и
ввода-вывода. Отдельного внимания требует системный таймер. Напомним, что он
используется программным обеспечением для формирования интервалов времени,
продолжительность которых не зависит от быстродействия процессора, поэтому
повышение частоты тактирования таймера приведет к нежелательным последствиям:
будут спешить часы DOS Time, частоты звуковых сигналов, выводимых на PC Speaker,
будут завышены. Чтобы избежать таких последствий, система IBM PC/XT,
поддерживающая режим "турбо" должна содержать два тактовых генератора: для
процессора и для таймера. Вместе с тем, существовали некорректно написанные
программы, которые для формирования времязадающих функций использовали не
таймер, а процессор, рассчитывая на то, что тактовая частота всегда равна 4.773
MHz. Для обеспечения совместимости с такими программами, была введена кнопка
"Turbo", позволяющая переключаться между стандартной и повышенной частотой.
Заметим, что понятия "множитель" тогда не существовало, частоты тактирования
ядра процессора и шины всегда были равны. Следовательно, разгон процессора мог
быть выполнен только путем повышения частоты шины.
2. Платформы PC/AT 286, 386. Работаем с переключателями.
Во времена процессоров 80286, 80386 производители наладили выпуск
универсальных материнских плат, допускающих установку процессоров с различными
тактовыми частотами. Модельный ряд 80386DX содержал процессоры с частотами 16,
20, 25, 33, 40 MHz. Первые универсальные платы использовали панельку для
установки осциллятора (осциллятором здесь называется схема, содержащая кварцевый
резонатор и генератор, интегрированные в одном корпусе). Пользователь или
производитель платы должен был установить осциллятор, частота которого
соответствовала тактовой частоте процессора. Разумеется, системный таймер
тактировался от другого генератора.
Такой "детский конструктор" уже допускал разгон без паяльника (путем
установки осцилляторов с частотами, превышающими штатные), если конечно
осциллятор был установлен в панельке, а не запаян. Затем появились так
называемые частотные синтезаторы, способные из частоты одного задающего
генератора (обычно это классическая для платформы PC частота 14.31818 MHz)
сформировать все частоты, необходимые для работы платформы при поддержке
различных процессоров. Один из методов выполнения такого преобразования –
умножить опорную частоту на достаточно большой коэффициент, в результате
получится сигнал с частотой, из которой путем деления на целые коэффициенты
можно получить все требуемые частоты с приемлемой точностью. Данное
преобразование выполняется внутри микросхемы частотного синтезатора. Для
управления частотой выдаваемого тактового сигнала используются входы задания
частоты. Код, подаваемый на эти входы, задается переключателями (jumpers),
установленными на материнской плате. Теоретически, в таких системах уже
существовала возможность реализации программного управления тактовой частотой.
Для этого требовалось реализовать порт вывода (программно-доступный регистр),
выходы которого подключаются к входам задания частоты, вместо переключателей.
Записывая разные коды в этот порт, BIOS или другая программа может переключать
тактовую частоту. Но данное решение не стало популярным, во-первых, потому, что
такая гибкость в те времена еще не была востребована, а во-вторых, потому, что
большинство частотных синтезаторов тех времен не допускали переключение частоты
без выключения питания.
3. Платформы PC/AT 486. Первые процессоры с умножением частоты.
В процессорах класса 486 впервые появилось понятие "множитель". Например,
процессор 80486DX2-50 тактировался от частоты 25 MHz, на этой частоте работала
шина. Внутри процессора происходило умножение частоты тактового сигнала на 2, и
ядро работало на частоте 50 MHz. Разумеется, этот процессор работает медленнее,
чем 80486DX-50, у которого и шина и ядро тактируются от 50 MHz. Тогда почему же
разработчики приняли такое решение? Дело тут в том, что технологических
возможностей для роста частоты ядра значительно больше, чем для роста частоты
шины. Цепи системной шины реализованы в виде проводников на плате, соединяющих
процессор и "северный мост" чипсета. Цепи ядра реализованы внутри кристалла
процессора, здесь физическая длина проводников и количество буферных элементов,
через которые проходят сигналы, значительно меньше. Чтобы максимально
реализовать разгонные потенциалы, как ядра, так и шины, их требовалось запустить
на разных частотах, что и было сделано путем введения механизма умножения
частоты, который успешно применяется и в современных процессорах. Для
процессоров поколения 486 были достигнуты частоты 50 MHz (для шины) и 133MHz
(для ядра). Приведены штатные значения, без учета экспериментов по разгону.
Заметим, что переключатели задания частоты шины подключены к управляющим
входам тактового генератора, так как он вырабатывает частоту, а переключатели
задания множителя – к управляющим входам процессора, так как умножение
происходит внутри процессора.
4. Платформы Intel Pentium, AMD K5, K6. Гибкость заставляет задуматься.
Умножение частоты и возможность выбора множителя появились еще во времена
процессоров 486. Следующее поколение процессоров - Intel Pentium и AMD K5/K6,
использующее процессорный разъем Socket 7, базируется на той же идеологии
тактирования, но набор частот и множителей был существенно расширен. Перед
оверклокерами встает задача выбора оптимального (с точки зрения
производительности) режима работы процессора. Хотя численные значения частот и
множителей сегодня совсем другие, приведенный ниже принцип рассуждений применим
и для современных систем.
Дано: Тактовый генератор на плате поддерживает частоты шины 50, 55, 60, 66.6
MHz. Процессор поддерживает множители 1.5x и 2 x. Предел устойчивой работы
нашего процессора 120 MHz.
Найти: Оптимальный (с точки зрения производительности) режим работы
процессора.
Очевидно, у нас два варианта: 66.6 x 1.5 = 100 MHz или 60 x 2 = 120 MHz. В
нашем случае, мы не можем использовать 66.6 x 2 = 133.3 MHz, так как заявленный
порог устойчивости процессора 120 MHz. В первом варианте шина работает быстрее,
но ниже частота ядра, во втором варианте – наоборот. Сразу признаемся, что на
прямой вопрос "что лучше" однозначного ответа не существует, и вот почему.
Представим себе компактный фрагмент машинного кода, долго работающий с
компактным блоком данных, код и данные помещаются во внутренний кэш процессора.
Очевидно, что вскоре после начала выполнения, код и данные будут автоматически
скопированы процессором из ОЗУ во внутренний кэш и для доступа к ним не
потребуется обращений по системной шине. От этого момента и до завершения
выполнения нашего фрагмента процессор будет работать с производительностью,
зависящей от частоты ядра и не зависящей от частоты шины.
Теперь представим другую ситуацию – процессор копирует в памяти блок данных,
размером десятки мегабайт. Очевидно, в этом случае, процессор существенную часть
времени будет занят операциями на шине (чтение из блока-источника, запись в
блок-получатель), поэтому производительность здесь существенно зависит от
частоты шины, если, конечно эффект от быстрой шины не нивелирован медленной
оперативной памятью.
Мы рассмотрели два диаметрально противоположных примера. Ситуации,
встречающееся в программном обеспечении на практике, находятся "посередине". Но
тем не менее, на скорость работы одних программ больше влияет частота шины,
других – частота ядра. Даже в пределах одного приложения могут встречаться
фрагменты, как первого, так и второго типа. Поэтому, углубляясь в теоретические
рассуждения, не следует забывать и о методе "научного тыка".
5. Современные системы. Нажми на кнопку – получишь результат.
Понятия "частота шины" и "множитель", рассмотренные выше, благополучно дожили
до наших дней, изменились только численные значения этих параметров. Современная
платформа позволяет управлять тактовой частотой процессора и множителем из BIOS
Setup. Читателю, знакомому с цифровой и микропроцессорной схемотехникой,
очевиден путь решения этой задачи: код управления частотой, подаваемый на
тактовый генератор и код управления множителем, подаваемый на процессор
формируется посредством программно-доступных регистров (портов вывода), выходы
которых подключены к соответствующим управляющим линиям. Записывая данные в эти
регистры, BIOS, либо другая программа, может устанавливать требуемые значения
частоты и множителя. Архитектура регистров, реализующих данную функцию, зависит
от модели платформы, поэтому программы, реализующие такое управление, могут быть
написаны под одну конкретную плату (как пишется BIOS), либо они должны
распознавать тип платы и содержать модули поддержки под каждую плату.
В большинстве реализаций современных платформ, тактовый генератор выполнен в
виде отдельной микросхемы, программный доступ к его регистрам обеспечивается по
2-проводной последовательной шине SMB (System Management Bus). Заметим, что та
же шина используется для считывания микросхем SPD (Serial Presence Detect)
хранящих параметры модулей оперативной памяти. Контроллер шины SMB находится в
составе "южного моста" чипсета. Детальное описание шины SMB содержится в [17].
Информацию по контроллеру шины SMB можно найти в документации на "южные мосты"
чипсетов, например [10], [19], [20]. Документация на большинство тактовых
генераторов также доступна, например [21]. Шина SMB построена на базе протокола
I2C, предложенного фирмой Philips.
Важным свойством современных платформ является автоматическое определение
тактовой частоты процессора. Для этого процессор сам формирует код управления
частотой системной шины. Этот код жестко прошит в процессоре в соответствии с
его типом (не путать с множителем). Код подается от процессора на тактовый
генератор и управляет режимом работы последнего. Процессоры семейства Intel
Socket 775 используют сигналы BSEL[0,1,2] для выбора частоты системной шины.
BSEL расшифровывается как Bus Select.
Каким же образом автоматический выбор частоты в соответствии с типом
процессора и управление частотой из BIOS Setup существуют совместно?
Итак, мы включили питание, тактовый генератор принял от процессора код
управления частотой по линиям BSEL[2,1,0] и автоматически запустился на частоте,
соответствующей установленному процессору. Процессор начал выполнение стартовой
процедуры BIOS POST на штатной частоте. Затем, BIOS на одном из этапов
выполнения процедуры POST, интерпретирует содержимое памяти CMOS, в которой
хранится информация о состоянии опций Setup. Если в Setup установлена частота,
отличающаяся от штатной, BIOS перепрограммирует тактовый генератор, и он
запустится на новой частоте. Физически, это сводится к выполнению транзакций на
шине SMB, записывающих данные в регистры тактового генератора.
Именно так приводятся в исполнение установки BIOS Setup. Прежде чем выполнить
перенастройку тактового генератора, чипсета и других устройств в соответствии с
установками опций, BIOS проверяет контрольную сумму информации CMOS, а также
бит, индицирующий факт потери батарейного питания. Если выясняется, что
информация в CMOS недостоверна, перепрограммирования частоты не происходит,
процессор продолжает работать на штатной частоте. На этом основано действие
перемычки Clear CMOS, которая позволяет сбросить настройки Setup и запуститься в
штатном режиме, если плата не стартует после чрезмерного разгона.
(Информация на данном сайте более полная, чем на "родных" сайтах
производителей указанных микросхем.)
19) VIA VT82C686A South Bridge Datasheet. Revision 1.54. Для поиска документа
набирать строку "VT82C686".
20) VIA VT82C686B South Bridge Datasheet. Revision 1.71. Для поиска документа
набирать строку "VT82C686".
21) Cypress W230 Spread Spectrum FTG (Frequency Timing Generator) for VIA K7
Chipset. Для поиска документа набирать строку "W230".
Книги
22) В.Л. Григорьев. Микропроцессор i486. Архитектура и программирование.
Москва ТОО "ГРАНАЛ" 1993.
23) В.Г. Артюхов, А.А. Будняк. В.Ю. Лапий. С.М. Молявко, А.И. Петренко.
Проектирование микропроцессорной электронно-вычислительной аппаратуры.
Справочник. Киев "Тэхника" 1988.
24) К. Г. Самофалов, О.В. Викторов. Микропроцессоры. Библиотека инженера. Киев
"Тэхника" 1989.
25) 2B ProGroup: В.А. Вегнер, А.Ю. Крутяков, В.В. Серегин, В.А. Сидоров, А.В.
Спесивцев. Аппаратура персональных компьютеров и ее программирование. IBM
PC/XT/AT и PS/2. Москва "Радио и связь" 1995.
26) Ю.М. Казаринов, В.Н. Номоконов, Г.С. Подклетнов, Ф.В. Филиппов.
Микропроцессорный комплект К1810. Структура, программирование, применение.
Справочная книга. Москва "Высшая школа" 1990.