Шина — королева джунглей. Просто и ясно о шинах и памяти
В наших статьях часто встречаются выражения а-ля “ пропускная способность ”, “ задержки памяти ”, “ DDR SDRAM ” и другие. Во всей этой терминологии легко запутаться. Поэтому мы решили написать статью, где популярно расскажем о том, как работают память и шины, а также узнаем о влиянии пропускной способности и задержек памяти на производительность системы. Теория и практика Термин “пропускная способность” определяет количество данных, передаваемых шиной за единицу времени. Пропускная способность измеряется в мегабайтах в секунду (Мбайт/с) или в мегабитах в секунду (Мбит/с). Здесь важно не путать эти два значения, поскольку скорость в мегабайтах в восемь раз больше скорости в мегабитах (1 байт = 8 бит). Существует два типа шин: последовательные и параллельные. Для наглядности представим кусочки информации в виде автомобилей, а шину — дорогой. Последовательная шина — это узкое шоссе в две полосы. По первой полосе машины движутся в одном направлении, по второй — в обратном. Параллельная шина — это многополосное шоссе, где по каждой полосе движутся автомобили. Современные параллельные шины очень широкие — число полос в них может достигать 64 или даже 128! Правда, прокладывать 128 полос в одном направлении, а затем в другом — очень накладно. Поэтому параллельные шины часто используют одни и те же полосы для передачи данных в обоих направлениях. Скажем, в первую секунду шина работает в одном направлении, во вторую — в обратном. Стоит отметить, что не все полосы передают данные. Многие шины используют часть полос для передачи “служебной информации” — адреса, управления шиной и так далее. Скорость работы последовательных шин принято выражать в мегабитах в секунду, а параллельных — в мегабайтах в секунду. Если в жизни мы всю свою работу сверяем по часам, то в компьютере для этой цели используются тактовые импульсы. Компьютер — это целый мир, где все комплектующие живут тактами. Легче всего представить импульсы в виде звонков в школе: между двумя звонками проходит один урок. За это время все ученики должны выполнить определенную работу. Так и в компьютере. За период одного такта (промежутка между импульсами) процессор должен выполнить задачу и выдать ответ. За такт шина передает данные с одного конца на другой. И так по кругу. Количество тактов за единицу времени называется частотой — она измеряется в герцах. Скажем, частота процессора 1 ГГц соответствует одному миллиарду тактов в секунду. Чтобы процессор работал быстрее, можно поднять тактовую частоту. За счет этого уменьшатся промежутки между тактовыми импульсами. Но увеличивать тактовую частоту можно лишь до какого-то предела. Рано или поздно процессор перестанет успевать выполнять работу в отведенный срок, и компьютер даст сбой. Характеристики современных шин
Шина Тип Пропускная способность
PCI Параллельная, 32 бита 32 бита x 33 МГц / 8 = 132 Мбайт/с
Памяти SDRAM PC100 Параллельная, 64 бита 64 бита x 100 МГц /8 = 800 Мбайт/с
Памяти SDRAM PC133 Параллельная , 64 бита 64 бита x 133 МГц /8 = 1064 Мбайт/с
Памяти DDR400 (один канал) Параллельная, 64 бита 64 бита x 200 МГц x 2 (DDR) /8 = 3200 Мбайт/с
Памяти DDR400 (два канала) Параллельная, 128 бит 128 бит x 200 МГц x 2 (DDR) /8 = 6400 Мбайт/с
FSB800 у Pentium 4 Параллельная, 64 бита 64 бита x 200 МГц x 4 (QDR) /8 = 6400 Мбайт/с
Порт COM Последовательная Примерно 0,1 Мбит/с
USB Последовательная 12 Мбит/с
Hi-Speed USB Последовательная 480 Мбит/с
FireWire Последовательная 400 Мбит/с
PCI Express x1 Последовательная 250 Мбит/с
Тяжело в учении… Обратите внимание на показатели пропуcкной способности в заметке “ Характеристики современных шин ”. Пропуcкная способность показывает, сколько данных шина может передать за единицу времени. Однако при этом не учитываются “капризы” передатчиков на обоих концах шины. В таблице указаны теоретические пиковые пропускные способности, но такие значения в большинстве случаев нельзя получить на практике. **
**
Рис. 1. Работа шины памяти.
Посмотрим, как же высчитывается теоретическая пиковая пропускная способность и что она обозначает. Для этого мы возьмем самый актуальный пример — шину памяти. Взгляните на упрощенную схему шины памяти ( рис. 1 ). На ней процессор напрямую подключен к оперативной памяти (на практике используется комбинация “системная шина — шина памяти”). В левой части рисунка изображена память, в правой — процессор. Мелкие тактовые импульсы сверху соответствуют частоте процессора, более широкие импульсы снизу — частоте шины памяти. Полный такт состоит из одного переднего фронта (стрелка вверх — получение данных) и одного заднего фронта (стрелка вниз — отправка данных). Частота процессора намного выше, чем частота шины памяти, поэтому каждый такт шины соответствует нескольким тактам процессора (в нашем случае — трем). На рисунке шину памяти мы представили в виде множества полос, тогда как на практике одноканальные интерфейсы памяти состоят из 64 линий. Розовые столбцы соответствуют передаваемой информации на каждый такт шины памяти, причем на рисунке информация представлена в виде квадратов — байтов. Каждый такт шина передает восемь байтов или 64 бита (по числу линий).
Рис. 2. Сверху — быстрая и короткая шина памяти. Снизу — пример медленной и “длинной” шины.
Представьте себе, что задние фронты импульсов являются “крючками”, к которым память может прицепить 8 байт и передать их на процессор. Поскольку тактовые импульсы никогда не прекращаются, мы получаем нечто вроде конвейера, на котором во время каждого такта появляются свободные “крючки” — они- то и передают данные из памяти на процессор. Но каждый раз, когда на “крючок” не “прицепляются” данные, мы впустую тратим пропускную способность. В идеальном случае “крючки” всегда заполнены, и пропускная способность будет задействована полностью. По различным причинам, которые мы обсудим позже, на практике этого достичь крайне трудно. К сожалению, шина памяти реагирует на запросы процессора с определенной задержкой. То есть между запросом и получением данных из шины памяти должно пройти какое-то время. Значение задержки мы обозначили как расстояние от процессора до памяти — длина шины памяти. Чем больше расстояние, тем дольше задержка. Рассмотрим следующий пример. На рис. 2 показана система с менее скоростной шиной памяти и большими задержками. Медленная и “длинная” шина на рисунке обладает меньшей пиковой пропускной способностью, чем более скоростная шина (сверху), поскольку она передает меньше 8-байтных блоков за данный период времени. Если в первом случае каждый такт шины памяти равнялся трем тактам процессора, то во втором — такт шины памяти равен уже четырем тактам процессора. Поскольку длина тактовых импульсов процессора не меняется, то на медленной шине процессор будет ждать данные дольше, и время от запроса до получения данных процессором увеличится. Первая шина передаст за 12 тактов процессора четыре 8-байтных блока (12/3), вторая — всего три (12/4). Рассчитаем теоретическую пиковую пропускную способность. Если медленная шина работает на частоте 100 млн. тактовых импульсов в секунду (100 МГц) и передает 8 байт за каждый такт, пиковая пропускная способность составит 800 Мбайт/с (8 байт х 100 МГц = 800 Мбайт/с). Вторая шина, которая также передает 8 байт за каждый такт, но работает на скорости 133 МГц, обладает пропускной способностью 1064 Мбайт/с (8 байт х 133 МГц).
Однако не все так просто. Как только мы начнем учитывать возможности приемника (процессора) и передатчика (памяти), мы обнаружим, что реальная пропускная способность системы существенно отличается от теоретического значения. …Легко в бою Ранее мы уже говорили о том, что реализовать параллельную шину с одновременной передачей данных в двух направлениях — накладно. Поэтому все шины работают в каждом направлении поочередно: либо память передает данные, а процессор принимает, либо наоборот. Поскольку в одно и то же время передавать данные может кто-то один, каждое из устройств перед передачей данных запрашивает разрешение на управление шиной. Скажем, если процессору нужно передать запрос в память, то сначала он должен получить управление шиной и только после этого сможет передать информацию. Когда память примет запрос, она начнет искать соответствующие данные и готовить их для передачи обратно на процессор. После того как данные будут готовы, память возьмет управление над шиной и передаст информацию на процессор. Таким образом, на запрос данных из памяти тратится определенное время. Все задержки, сложенные вместе, составляют задержку чтения (промежуток времени между тем, когда процессор размещает запрос на системной шине (FSB), и тем, когда запрошенные данные будут получены). Предположим, что задержка чтения для системы на наших рисунках составляет три такта шины памяти. В этом случае каждый раз, когда процессор передает запрос на данные, ему приходится ждать три такта перед тем, как данные будут получены. Если процессор осуществит 100 запросов данных, то это означает
Рис. 3. Проходят три пустые такта и один полезный.
300 потерянных тактов. Максимально возможная пропускная способность, которую может достичь система после учета задержек при чтении, называется обеспечиваемой пропускной способностью (sustained bandwidth). На рис. 3 красный тактовый импульс является единственным, передающим 8 байт. Остальные три импульса — пустые, так как произошла задержка чтения. Шина памяти заполнена только на 1/4. Теоретическая пропускная способность 64-битной (8-байтовой) 100 МГц шины составляет 800 Мбайт/с, обеспечиваемая — всего 200 Мбайт/с. Чтобы обойти эффект снижения пропускной способности, связанный с задержкой чтения, современные системы используют множество “уловок”. Одна из таких — снижение количества запросов чтения, которые должен выдать процессор для получения определенного количества данных. Если память знает, какие данные процессору будут нужны следующими, она вышлет их вместе с теми, которые CPU уже запросил. Подсистема памяти выдает не только запрошенный байт, но также и группу последовательных — соседних байтов.
Рис. 4. Пакетная передача данных — 4 группы по 8 байт, в сумме 32 байта.
Рассмотрим рис 4. Оранжевый тактовый импульс соответствует так называемому критическому слову (critical word). Оно называется критическим потому, что содержит байт, который был запрошен непосредственно процессором. В большинстве архитектур SDRAM подсистема памяти высылает критическое слово в первую очередь, а следом идут остальные данные. Именно так и работает память SDRAM в пакетном режиме (burst mode). Память высылает на шину четыре блока по 8 байт (или один пакет). Там же присутствует задержка в три тактовых импульса между отсылкой запроса и поступлением на шину первого из четырех слов (если задержка чтения в нашей системе составляет 3 такта шины памяти). Поэтому первое критическое слово имеет задержку в 3 такта, и каждый последующий 8-байтный блок — задержку в один такт. Это соответствует задержкам DRAM пакетного режима типа 3-1-1-1. Общее время, которое требуется на передачу всех данных по шине, составляет 3+1+1+1=6 тактов шины памяти. Кстати, если бы пакетного режима не существовало, то на передачу того же количества данных ушло бы 3+3+3+3=12 тактов шины памяти. Чтобы высчитать пропускную способность системы с пакетом на четыре такта, мы должны учесть общее число тактов, необходимое на передачу всех четырех 8-байтных блоков. В описанной нами системе четыре блока будут передаваться каждые 6 тактов. Так что на шине 100 МГц максимальная обеспечиваемая пропускная способность составит 533 Мбайт/с (4 блока x 8 байт х 100 МГц / 3 такта + 1 такт + 1 такт + 1 такт). Это значение существенно меньше теоретической пиковой пропускной способности 800 Мбайт/с, которую мы вычислили чуть раньше. Когда при вычислении пропускной способности учитывают пустые такты, связанные с задержками, значение оказывается намного ниже. Кстати, чем больше будет длина пакета, тем эффективнее будет работать шина. Но длину пакета в силу различных причин нельзя увеличивать бесконечно. Наши рисунки с использованием пустых тактов наглядно представляют задержки. Но не следует думать, что шина на самом деле имеет длину в несколько тактов, — в один момент времени на шине присутствует несколько блоков данных. В системах SDR и DDR шина памяти физически имеет длину в один такт. Это означает, что шина передает только один 8-байтный блок в один момент времени, а не четыре или больше, как показано на рисунках. Пустые такты — простой шины. Выше мы рассмотрели некоторые способы, которые применяют для повышения эффективности использования доступной пропускной способности. Помимо повышения эффективности работы шины можно пойти другим путем — увеличить саму пропускную способность. Идеальным способом увеличить пропускную способность является переход на большую частоту работы шины. При этом мы получаем больше тактов за секунду, что позволяет увеличить объем передаваемой информации. Увеличение частоты шины приводит еще и к тому, что каждый такт шины начинает соответствовать меньшему числу тактов процессора и на выполнение запроса уходит меньше времени. От высокой скорости шины в первую очередь выигрывает пакетная передача данных (можно передавать больше пакетов данных), но, вместе с тем, повышение частоты почти не отражается на скорости
Рис. 5. Широкая и медленная шина против быстрой и узкой.
получения критического слова. Еще одним способом увеличения пропускной способности является повышение числа разрядов шины — ее ширины. Если вы удвоите ширину шины с сохранением прежней тактовой частоты, за один такт можно будет передавать в два раза больше данных без увеличения скорости. Например, 64-битная шина может передать пакет из четырех групп по 8 байтов за четыре такта, в то время как 128-битная шина — всего за два. При удвоении частоты шины можно уменьшить суммарную задержку чтения, тогда как если в два раза увеличить ширину шины — задержка не изменится. В системе с более скоростной шиной память может быстрее передать критическое слово процессору. На рис. 5 показано, что быстрая, но узкая шина выдает критическое слово процессору быстрее, чем широкая, но медленная шина. Для некоторых приложений критическое слово не является таким уж важным (чаще всего для игр, они передают большие потоки данных по шине). Подобные системы больше выигрывают от высокой пропускной способности, чем от высокой скорости получения критического слова. Инженерам же дешевле и проще увеличить ширину шины, чем ее частоту, поэтому сегодня широкие шины памяти становятся все популярнее. **
**
Рис. 6. Шина DDR. Обратите внимание, что реальная тактовая частота в два раза меньше, чем на рис. 1, хотя пропускная способность осталась прежней.
Относительно легкий путь увеличения пиковой пропускной способности шины заключается в пересылке данных по передним и задним фронтам импульсов одновременно (DDR — double data rate). Такой принцип реализовать проще, чем увеличивать частоту шины. Давайте посмотрим на шину DDR. Поскольку шина может передавать данные в обе стороны сразу, она способна переслать четыре порции 32-байтового пакета всего за два такта (SDR — за четыре такта). То есть теоретическая пиковая пропускная способность шины DDR в два раза выше ее физической частоты. Однако переход на DDR-шину дает меньший эффект, чем удвоение физической частоты SDR. Это связано с тем, что задержка чтения у 200 МГц шины SDR меньше, чем у 100 МГц DDR. Удвоение скорости передачи при сохранении
Рис. 7. Сравнение шин DDR и SDRAM на одинаковой физической частоте. Вверху показана система DDR, а внизу — SDR.
физической частоты не влияет на задержку чтения и на время получения критического слова. При удвоении теоретической пропускной способности шины путем перехода на технологию DDR не меняются задержки чтения памяти. Система DDR передает все четыре части пакета к процессору быстрее, но критическое слово поступает на процессор точно за такое же время, как у SDR. И хотя технология DDR позволяет увеличить пиковую и обеспечиваемую пропускную способность, но, увы, и она не свободна от недостатков. Memento Теоретическая пиковая пропускная способность, которую производители железа любят указывать везде, где только можно, на самом деле не соответствует реальным показателям. На практике на производительность любой шины влияет множество факторов, и самый значимый — задержка доступа. Инженеры придумали множество способов для повышения эффективности работы шины. Один из самых популярных подходов заключается в использовании пакетного режима. В этом случае задержки чтения будут максимальными только для первой порции данных, а все остальные следуют с минимальными задержками. Другое решение для повышения эффективности работы шины — банальное увеличение ее пропускной способности. Это достигается с помощью повышения частоты шины, увеличения ее ширины, а также перехода на технологию DDR. Но, как бы хороши ни были эти способы, добиться от шины идеальной пропускной способности практически невозможно. Так что при выборе памяти всегда помните, что важно учитывать не только ее теоретическую пиковую пропускную способность, но также ее задержки и частоту.