Влияние загрузки шины данных на масштабируемость приложений
В этой статье я расскажу о том, как загруженность шины данных влияет на масштабируемость (scalability) приложений. Под масштабируемостью мы будем понимать не только способность многопоточного приложения сокращать свое время выполнения по мере увеличения числа потоков. Мы также добавим сюда и способность однопоточного приложения, запущенного одновременно в несколько копий (instances), выполняться за тот же самый промежуток времени, что и одна копия. Хотя последний пример было бы правильнее охарактеризовать таким свойством как пропускная способность (throughput), так как он относится к «серверному» режиму запуска приложений. Т.е. это такой режим, при котором на сервере запускается однопоточное приложение, каждый раз когда к нему подключается новый клиент. Главная задача при разработке таких приложений — это снижение их зависимости от общих ресурсов, одним из которых может являться шина данных.
Ниже приведена картинка, на которой показано положение шины памяти в системе. Слева изображена схема для «допотопной» архитектуры Core 2, справа для менее старой — Nehalem. Все последующие архитектуры Intel имеют схожую схему с Nehalem (за исключением Intel MIC).

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

Будем запускать эту программу с разным количеством потоков и разным параметром STEP. Параметр STEP соответствует утилизации КЭШ-линии. Мы помним, что процессор обменивается с памятью порциями по 64 байта, которые называются КЭШ-линиями. Если нам нужно прочитать всего лишь один байт, процессор все равно скачает из памяти 64 байта. Такой обмен данными происходит из-за принципа пространственной локальности. Это первый принцип, который лежит в основе КЭШ. Процессор как бы предполагает, что если мы считали какое-то значение массива из памяти, то на следующем шаге нам понадобиться считать следующее значение из того же массива. Поэтому важно размещать данные как можно ближе друг к другу, чтобы снизить нагрузку на шину. Таким образом, при STEP = 1, утилизация КЭШ-линии составляет 100%, при STEP = 4, утилизация – 25%, STEP = 8, утилизация – 12,5% и при STEP = 64, утилизация – 1,56%. Фактически, последний параметр означает закачивание новой КЭШ-линии на каждой итерации внутреннего цикла.
Еще одно замечание: тестовая программа была собрана компилятором Intel с опцией –no-vec, чтобы получить скалярный код вместо векторного. Это было сделано с целью получения «красивых данных» для облегчения понимания теории.

На этом графике отображено время выполнения нашего приложения в зависимости от тестируемых параметров. Мы видим, что по мере того, как ухудшается утилизации КЭШ-линии (параметр STEP), масштабируемость, т.е. отношение времени для меньшего числа потоков ко времени для большего числа потоков, тоже становится хуже.
Теперь посмотрим, как меняется нагрузка на шину данных в зависимости от тестируемых параметров. Нагрузку мы будем измерять с помощью VTune Amplifer, используя анализ «Bandwidth».

Мы видим, что одновременно с ухудшением масштабируемости нагрузка на шину возрастает. Объяснение здесь простое – потокам всё больше требуется КЭШ линий и в силу ограниченности шины им приходится всё дольше и дольше простаивать в ожидании данных. Это и является причиной ухудшения масштабируемости. Также важно отметить, что значение нагрузки с какого-то момента перестает существенно изменяться и постепенно приближается к некоторому значению, которое называется пиковая нагрузка. В нашем случае пиковая нагрузка равна 19 Гб/сек.
Теперь рассмотрим что такое принцип временной локальности. Это еще один принцип, который лежит в основе КЭШ и говорит он следующее: если мы считали какой-то элемент из памяти, то, скорее всего, мы обратимся к этому элементу еще раз через какое-то время. Для демонстрации этого принципа возьмем самый плохой случай, где утилизация КЭШ-линии составляет 1,56%. Применим для этого случая обход цикла по блокам, не нарушая целостности данных и сохраняя семантику программы.

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

Такой подход не только сократил время выполнения приложения, но и что самое важное для нас, существенно улучшил масштабируемость. Эта оптимизация позволила снизить зависимость потоков от общего ресурса, т.е. от шины данных, и переключить их на КЭШ второго уровня, который является собственным ресурсом для каждого ядра, да и к тому же более быстрым. Мы также видим, что загрузка шины стала мизерной.
Итак, для того чтобы улучшить масштабируемость нашего приложения, мы должны использовать один из принципов локальности. А если мы хотим еще и значительно сократить время выполнения, то мы должны использовать оба принципа.
Кто-то скажет, что не рассмотрен случай использования инструкций типа movnti, предназначенных для разгрузки шины, но я отмечу, что об этом мы поговорим в следующей статье.
- Измерить пиковую нагрузку для шины данных в нашей системе
- Выяснить, как меняется загрузка шины в зависимости от увеличения числа потоков нашего приложения
- Если мы видим, что при увеличении числа потоков, нагрузка на шину быстро достигает пиковых значений (измеренных в п.1), то в этом и кроется причина наших бед (плохой масштабируемости). При этом мы должны понимать, что есть еще другие причины (например false-sharing), которые мы уже проверили.

На всякий случай рекомендую собирать эту программу без опции межпроцедурного анализа. Ее достаточно будет скомпилировать просто с опцией –O2. Здесь нужно учесть, что размер массивов не должен превышать размер оперативной памяти, иначе на измерения может оказать влияние paging операционной системы. Количество потоков должно быть не меньше количества ядер, а если включен Hyper-Threading, то оно должно быть не больше числа hardware потоков. Число повторений (REPEAT) может быть любым, главное, чтобы тест выполнялся существенное время и VTune выдавал одинаковое значение пропускной способности от запуска к запуску.
А теперь рассмотрим пример из реальной жизни. Возьмем приложение 470.lbm из пакета SPEC CPU2006. Это одна из версий известного метода для решения задач гидродинамики (полное название Lattice Boltzmann Method). Данная версия написана таким образом, чтобы сместить баланс нагрузки с процессора на шину памяти. Запустим приложение на двухсокетном сервере на базе Nehalem и посмотрим на масштабируемость.

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

Мы видим, что в нем нарушен принцип «пространственной локальности», т.е. в 19 массивов записываются модифицированные элементы из массива srcGrid (запись в массив dstGrid с большими смещениями для процессора всё равно, что запись в разные массивы). Самая главная проблема этого приложения – непоследовательная запись с шагом 20 элементов. Такая сложная запись обусловлена специфической структурой данных. Дело в том, что в процессе выполнения приложения один куб трансформируется в другой, и каждый элемент этого куба является структурой из 20 элементов типа double. Т.е. фактически мы имеем дело с массивом структур, хотя явно они не объявлены.

Для того, чтобы сделать запись линейной, нужно применить классическую оптимизацию, которая называется «трансформация массива структур в структуру массивов». О том, как применять эту оптимизацию можно почитать в статье «Optimization Study for Multicores. Muneeb Anwar Khan». После применения оптимизации и разбивки записи на блоки (для улучшения работы hardware prefetcher’ов) мы имеем следующий цикл:


Мы видим, что масштабируемость улучшилась благодаря уменьшению нагрузки на шину. Хотя нужно признать что время выполнения приложения в один поток немного увеличилось. Это связано с тем, что при трансформации данных нам пришлось добавить еще 19 массивов для srcGrid, а это увеличило нагрузку на hardware prefetcher. Интересный результат получается при запуске однопоточной версии этого приложения в восемь копий, т.е. в «серверном» режиме. (Приложение было собрано без опций распараллеливания.)

Одновременное выполнение восьми однопоточных копий на восьми ядрах занимает 252 секунды, что меньше чем восемь последовательных запусков многопоточной версии, которые выполняются 8 * 37 = 296 секунды. Это говорит о том, что в многопоточной версии существуют какие-то алгоритмические проблемы, связанные с распараллеливанием. Но это уже другая история.
- vtune amplifier xe
- scalability
- throughput
- performance analysis
- серверная оптимизация
- высокая производительность
- Блог компании Intel
- Программирование
- Параллельное программирование
Шина
Шина – совокупность линий, иногда просто проводников, соединяющая несколько компонентов в цифровой системе. Эти линии делятся на 3 типа – адреса, данных и управления. Иногда по одним и тем же проводникам в разные моменты времени передаются и адрес и данные – в этом случае говорят, что шина мультиплексирована. Подключенные к шине устройства подразделяются на 2 основных типа – master ( главный, способный управлять шиной, обычно это контроллер шины) и slave ( подчиненный). Остальные типы, встречающиеся гораздо реже, являются комбинациями первых двух.
Одна из первых шин в РС была 8-битная шина, вначале не имевшая никакого названия. Если взглянуть на современную материнскую плату, можно увидеть, что шина ISA состоит из двух неравных частей. Большая часть и является той предшественницей современной, вернее, теперь уже устаревшей шины ISA .
Значение ее для тех времен было огромно. Впервые пользователь мог наращивать и изменять конфигурацию системы, не прибегая к покупке новой машины. Можно сказать, что именно ее наличие и обеспечило коммерческий успех РС.
Со временем производительность микропроцессора и переферийных устройств возросла, мощность периферийных устройств тоже. 8-битная шина стала узким местом системы, не справляясь с возросшим потоком проходящей по ней информации. Нужна была новая шина, но при этом она должна быть совместимой с картами расширения, использовавшимися ранее – при покупке новой системы пользователи могли использовать некоторые компоненты старой. В отношении стоимости это был небольщой выигрыш (контроллеры дисков, старые видеокарты, порты ввода-вывода стоили уже тогда довольно дешево), но это сильно действовало психологически – при покупке машины можно было сэкономить на некоторых компонентах. Новая шина вначале называлась АТ -bus , но потом прижилось название ISA (Industry Standard Architecture) . Шина была совместима с своей 8-битной предшественницей, отличалась только частота тактового сигнала (до сих пор некоторые 8-битные карты работают на современных платах с Pentium III , заменяя сгоревшие встроенные порты ввода-вывода)
Шина имеет раздельные линии адреса, управления и данных. Частота тактового сигнала шины – 8 МГц(иногда в материнской плате предусмотрено ее повышение до 10МГц, но оно может привести к нестабильной работе старых ISA- карт). Следует иметь в виду, что скорость передачи данных по шине гораздо меньше, чем 8*10 6 *2 = 16 Мбайт / сек, так как передача одного слова данных происходит в течение 4-5 циклов тактового генератора.
Шина ISA 16-разрядная, с возможностью ввода состояний ожидания. Так как сохранена совместимость с 8-битными картами, на шине имеется контакты( MEM16 – для памяти и IO16 – для карт ввода-вывода) позволяющий определить, какая карта – 8 или 16-битная присутствует на шине. Если сигнал активен – 16 бит записываются или читаются за 1 такт, если неактивен – за 2 такта, по 8 бит в каждом такте.
На шине есть линии прерывания IRQ (Interrupt Request) и прямого доступа в память DMA (Direct Memory Access). О них стоит рассказать подробнее.
Линии прерывания служат для того, чтобы сигнализировать процессору (в нашем случае – контроллеру шины, который транслирует прерывания шины в прерывания процессора) о том, что на шине произошло некоторое событие, требующее переключения процессора с выполнения основной задачи на задачу обработку этого события. В некоторой области памяти существует таблица, где хранятся адреса процедур обработки прерывания (эта таблица называется таблицей векторов прерываний). Как только сигнал прерывания получен процессором, он выполняет команду перехода (безусловного или условного) на строку таблицы, соответствующей данному прерыванию. Затем по адресу, полученному из таблицы, производится переход в ту область памяти, где хранится процедура обработки прерывания.
Прямой доступ к памяти ( DMA) – процедура, позволяющая освободить центральный процессор от задачи чтения данных из устройства ввода-вывода и записи их в память для выполнения других задач. В этом случае операция чтения – записи производится самим внешним устройством ( которое должно быть достаточно «интеллектуально”) или контроллером DMA. Для выполнения прямого доступа в память устройство ввода-вывода вставляет на соответствующих линиях шины (они называются DRQ 1-DRQ7 –DMA Request) сигнал запроса прерывания. Если прямой доступ к памяти возможен, процессор выставляет сигнал DACK 1-DACK7 (DMA Acknowledge) разрешения DMA и передает управление шиной внешнему устройству или контроллеру DMA , которые и формируют все необходимые сигналы управления и синхронизации. Процессор в это время может выполнять другие задачи, требующие его » внимания ” .
Адресное пространство, или диапазон адресов, к которым можно обращаться с шины ISA составляет 2 24 или 16 Мслов. Однако на практике редко встречаются карты, позволяющие адресовать все адресное пространство шины. Дело в том, что многие старые карты не анализируют разряды адреса старше 10 и поэтому могут пересекаться по адресам с картами, которые их используют. Так, например, для старых карт адреса 0 xF3F0 и 0x3F0 будут одинаковыми (регистр данных жесткого диска) , поэтому при установке двух карт – новой с адресом 0xF3F0 и старой с адресом 0x3F0 на шине возникнет конфликт (так называется ситуация, когда несколько устройств пытаются в одно и то же время выдать данные на шину)
Шина ISA сохранилась в комьютерах до сих пор, несмотря на многочисленные попытки гигантов компьютерной индустрии (Intel, Microsoft) убрать ее из PC. По сегодняшним меркам, ISA – очень медленное устройство, обращение к которому тормозит работу всей системы. Но простота проектирования устройств на ней и огромное количество уже выпущенных для нее карт расширения, в том числе специальных, не позволяют отказаться от ее использования. Кроме того, для некоторых устройств (например, модемов) скорость шины ISA вполне достаточна.
IBM никогда не публиковало спецификации шины ISA , с целью затруднить изготовление устройств на ней сторонними производителями, так что существующие описания являются лишь результатами измерения временных параметров работающих карт расширения производства IBM
Шины
5.5.4 Шина USB 5.5.5 Шина SCSI 5.5.6 Шина IEEE 1394 5.1 Классификация шин Как уже отмечалось, совокупность линий (проводников на материнской плате), по которым обмениваются информацией компоненты и устройства PC (рис. 1), называются шиной (Bus). Шина предназначена для обмена информацией между двумя и более устройствами. Шина, связывающая только два устройства, называется портом. Обычно шина имеет места для подключения внешних устройств, которые в результате сами становятся частью шины и могут обмениваться информацией со всеми другими подключенными к ней устройствами. Линии шины делятся на три группы в зависимости от типа передаваемых данных: ü Линии данных (шина данных) ü Линии адреса (шина адреса) ü Линии управления (шина управления) Наличие трех групп линий является отличительным признаком шины от других систем соединения. Шины в PC различаются по своему функциональному назначению. ü Системная шина (или шина CPU) используется микросхемами Chipset для пересылки информации к и от CPU. ü Шина кэш-памяти предназначена для обмена информацией между CPU и кэш-памятью. ü Шина памяти используется для обмена информацией между оперативной памятью и CPU. ü Шины ввода/вывода подразделяются на стандартные и локальные. Этим списком не исчерпывается весь набор шин PC. В зависимости от своего функционального назначения современные PC могут быть оборудованы такими шинами, как USB. SCSI, FireWire. которые устанавливаются в слоты расширения или интегрированы в материнскую плату. Их работу обеспечивает соответствующий контроллер.
![]() |
Рис. 1 Назначение линий шины Шина имеет собственную архитектуру, позволяющую реализовать важнейшие ее свойства — возможность параллельного подключения практически неограниченного числа внешних устройств и обеспечение обмена информацией между ними. Архитектура любой шины включает следующие компоненты: ü Линии для обмена данными (шины данных) ü Линии для адресации данных (шины адреса) ü Линии для управления данными (шины управления) ü Контроллер шины Контроллер шины осуществляет управление процессом обмена данными и служебными сигналами и обычно выполняется в виде отдельной микросхемы либо интегрируется в микросхемы Chipset. Например, контроллер Chrpset i440BX шины PCI интегрирован в микросхему 82443ВХ. Шина данных По этой шине происходит обмен данными между CPU, картами расширения, установленными в слоты, и памятью. Особую роль при этом играет так называемый режим DMA (Direct Memory Access). Управление обменом данными в этом режиме осуществляется соответствующим контроллером, минуя CPU. DMA-контроллер, реализованный ранее на микросхеме 82С206, в настоящее время интегрируется в одну из микросхем Chipset, например 82443ВХ. Чем выше разрядность шины, тем больше данных может быть передано за определенный промежуток времени и выше производительность PC. Компьютеры с процессором 80286 имели 16-разрядную шину данных, с CPU 80386 и 80486 — 32-разрядную, а компьютеры с CPU семейства Pentium имеют уже 64-разрядную шину данных. Шина адреса Процесс обмена данными возможен лишь в том случае, когда известен отправитель и получатель этих данных. Каждый компонент PC, каждый регистр ввода/вывода и ячейка RAM имеют свой адрес и входят в общее адресное пространство PC. Для адресации к какому-либо устройству PC и служит шина адреса, по которой передается уникальный идентификационный код (адрес). Для ускорения обмена данными используется устройство промежуточного хранения данных — RAM, при этом решающую роль играет объем данных, которые могут временно храниться в ней. Объем зависит от разрядности адресной шины (числа линий) и, тем самым, от максимально возможного количества адресов, генерируемых процессором на адресной шине, иными словами, от количества ячеек RAM, которым может быть присвоен адрес. Очевидно, что количество ячеек RAM не должно превышать 2 n , где n — разрядность адресной шины. В противном случае часть ячеек не будет использоваться, поскольку процессор не сможет адресоваться к ним. В двоичной системе счисления выражение для определения максимально адресуемого объема памяти выглядит следующим образом: Объем адресуемой памяти = 2 n n — число линий шины адреса. Процессор 8088, например, имел 20 адресных линий и мог, таким образом, адресовать память объемом 1 Мбайт (2 20 = 1048576 байт = 1024Кбайт). В PC с процессором 80286 разрядность адресной шины была увеличена до 24 бит, а современные процессоры 80486. Pentium, Pentium MMX и Pentium II имеют уже 32-разрядную шину адреса, с помощью которой можно адресовать 4 Гбайт памяти. Шина управления Для успешной передачи данных не достаточно установить их на шине данных и задать адрес на шине адреса. Для того чтобы данные были записаны (считаны) в регистры устройств, подключенных к шине, адреса которых указаны на шине адреса, необходим ряд служебных сигналов: записи/считывания, готовности к приему/передаче данных, подтверждения приема данных, аппаратного прерывания, управления и инициализации контроллера DMA и др. Все эти сигналы передаются по шине управления. 5.2 Основные характеристики шины Разрядность шины Важнейшей характеристикой шины является разрядность шины (иногда говорят ширина шины), которая определяется количеством данных, параллельно «проходящих» через нее. Здесь и в самом деле напрашивается прямое сравнение с автобусом (bus — автобус, шина). Чем больше в автобусе посадочных мест, тем больше людей можно в нем перевезти. Первая шина ISA для IBM PC была 8-разрядной, т. е. по ней можно было одновременно передавать лишь 8 бит. Шина ISA — 16-разрядная, а шины ввода/вывода VLB и PCI — 32-разрядные. Системные шины современных PC на базе процессоров пятого и шестого поколения — 64-разрядные. Пропускная способность шины Второй характеристикой шины является пропускная способность, которая определяется количеством бит информации, передаваемых по шине за секунду. Для определения пропускной способности шины необходимо умножить тактовую частоту шины на ее разрядность. Например, для 16-разрядной шины ISA пропускная способность определяется так: (16 бит х 8,33 МГц) : 8 = (133,28 Мбит/с) : 8 = 16.66 Мбайт/с Отметим, что при расчете пропускной способности, например шины AGP, следует учитывать режим ее работы. Благодаря увеличению в 2 раза тактовой частоты видеопроцессора и изменению протокола передачи данных удалось повысить пропускную способность шины в 2 (режим 2х) или в 4 (режим 4х) раза, что эквивалентно увеличению тактовой частоты шины в соответствующее количество раз (до 133 и 266 МГц соответственно). 5.3 Интерфейс Внешние устройства к шинам подключаются посредством интерфейса. Под интерфейсом (Interface — Сопряжение) понимают совокупность различных характеристик какого-либо периферийного устройства PC, определяющих организацию обмена информацией между ним и центральным процессором. Это электрические и временные параметры, набор управляющих сигналов, протокол обмена данными и конструктивные особенности подключения. При этом обмен данными между компонентами PC возможен только в случае совместимости их интерфейсов. Принцип IBM-совместимости подразумевает стандартизацию интерфейсов отдельных компонентов PC, что, в свою очередь, определяет гибкость системы в целом, т. е. возможность по мере необходимости изменять конфигурацию системы и подключать периферийные различные устройства. В случае несовместимости интерфейсов (например, интерфейс системной шины и интерфейс винчестера) используются контроллеры. Кроме того. гибкость и унификация системы достигается за счет введения стандартных промежуточных интерфейсов, таких как интерфейсы последовательной и параллельной передачи данных, являющиеся необходимыми для работы наиболее важных периферийных устройств ввода и вывода. 5.4 Системные шины Системная шина предназначена для обмена информацией между CPU, памятью и другими устройствами, входящими в систему. Шины GTL+ и EV6 Системная шина GTL+ (Р6) разработана корпорацией Intel для процессоров шестого поколения. Разрядность шины — 64 бита. а тактовая частота — 66, 100 u 133 МГц. Пропускная способность шины составляет 528. 800 и 1,06 Мбайт/с соответственно. На шине GTL+ «висят» CPLJ, модули оперативной памяти, шина РС1 и AGP (при их наличии в системе». Шина EV6 разработана компанией Digital Equipment для CPU Alpha 21264. В мире PC она используется корпорацией AMD для систем с CPU K-7. Ниже перечислены основные ее отличия от шины GTL+. ü Передача информации осуществляется на обоих фронтах сигнала, что позволяет вдвое увеличить пропускную способность шины. Спецификация шины позволяет повысить ее тактовую частоту до 377 МГц. ü Шина является каналом взаимодействия CPU и Chipset, причем для многопроцессорных систем каждому CPU выделяется отдельный канал. Поэтому разрядность и тактовая частота шины памяти не зависят от аналогичных характеристик шины EV6. Поскольку многие современные системы «общаются» с памятью, минуя CPU, то появляется возможность использовать 128-разрядную шину памяти, работающую с тактовой частотой. определяемой характеристикой используемых модулей памяти (100, 133, 200 МГц). 5.5 Шины ввода/вывода 5.5.1 Шина ISA Шина ISA долгие годы являлась стандартом в области PC (Industry Standart Architecture, ISA — Промышленная стандартная архитектура) и считается самой «старой» в семействе шин, однако до сих пор используется даже в новейших моделях PC. Дело в том, что имеется еще множество периферийных устройств, использующих стандарт ISA (мышь, клавиатура, модемы, ручные сканеры, FDD и т. п.), для которых быстродействия этой шины более чем достаточно. Корпорация Intel совместно с Microsoft разработала стратегию (спецификации PC 98 и PC 99) постепенного отказа от шины ISA. Согласно этой концепции на первом этапе производителям материнских плат следует исключить слоты ISA, что должно вынудить производителей карт расширения полностью перейти на производство PCI-карт. На следующем этапе планируется полностью отказаться от ISA-разъемов на материнской плате. Предполагается подключать дисководы, мышь, клавиатуру, сканер и другие устройства к шине USB, а для подключения, например, винчестеров, приводов CD-ROM и DVD-ROM, видеокамер использовать новую шину IEEE 1394. Согласно спецификациям PC 98 и PC 99, разработанным корпорациями Intel и Microsoft, шина ISA должна «умереть» в 1998 или 1999 году. Однако, учитывая огромный парк PC и комплектующих, а также высокую стоимость всех нововведений в компьютерном мире, можно с уверенностью сказать, что 16-разрядная шина ISA прослужит еще не один год. 8-разрядные шины Родоначальником в семействе шин ISA была 8-разрядная шина (8 Bit ISA Bus), которая использовалась в компьютерах класса XT. Как известно, пропускная способность шины определяет производительность всей системы. Очевидно, что при этой разрядности и тактовой частоте 4,77 МГц пропускная способность шины очень низкая. 16-разрядная шина Если вы посмотрите на слот 16-разрядной шины. обозначаемой иногда AT BUS, то увидите, что он состоит из двух частей, одна из которых в точности соответствует слоту 8-разрядной шины ISA. а на контакты второй выведены линии для дополнительных адресов ввода/вывода, прерываний и каналов DMA. На этом основании короткие 8-разрядные карты можно устанавливать в 16-разрядный слот. Сделать это наоборот, конечно же, невозможно. Передача байта данных по шине ISA происходит следующим образом. Сначала на адресной шине выставляется адрес ячейки RAM или порта устройства ввода/вывода, куда следует передать байт, затем на линии данных выставляется байт данных, по одной из линий шины управления передается сигнал записи WR (строб записи). Причем контроль записи (проверка. успели записаться данные или нет) не производится. Поэтому тактовая частота шины ISA выбрана равной 8,33 МГц, чтобы даже самые медленные устройства гарантированно успевали производить по шине обмен данными (командами). Основная проблема шины ISA состоит в том, что при оптимальной тактовой частоте процессоров 80386 и 80486 она является как бы «горлышком бутылки» (Boutleneck — Узкое место), поскольку данные не могут передаваться по шине с той же скоростью, с какой их обрабатывает CPU. Поэтому процессор в ожидании данных вынужден простаивать (цикл ожидания). Это и явилось причиной появления шин других стандартов. 5.5.2 Шина PCI Шина PCI (Peripheral Component Interconnect) была разработана фирмой Intel для своего нового высокопроизводительного процессора Pentium. В современных материнских платах тактовая частота шины PCI задается как половина тактовой частоты системной шины, т. е. при тактовой частоте системной шины 66 МГц шина PCI будет работать на частоте 33 МГц, при частоте системной шины 75 МГц — 37,5 МГц. Основополагающим принципом, положенным в основу шины PCI, является применение так называемых мостов (Bridges), которые осуществляют связь между шиной PCI и другими шинами (например, PCI to ISA Bridge). Важной особенностью шины PCI является то, что в ней реализован принцип Bus Mastering, который подразумевает способность внешнего устройства при пересылке данных управлять шиной (без участия CPU). Во время передачи информации устройство, поддерживающее Bus Mastering, захватывает шину и становится главным. При таком подходе центральный процессор освобождается для выполнения других задач, пока происходит передача данных. Применительно к устройствам IDE (например, винчестер, CD-ROM) Bus Mastering IDE означает наличие определенных схем на материнской плате, позволяющих осуществлять передачу данных с жесткого диска в обход CPU. Это особенно важно при использовании многозадачных операционных систем типа Windows 95/98, Windows NT, OS/2. В настоящее время шина PCI стала стандартом де-факто среди шин ввода/вывода. Поэтому рассмотрим ее архитектуру (рис.2) несколько подробнее. В чем же секрет победного шествия шины PCI в мире PC? Ответить можно так. ü В шине PCI используется отличный от шины ISA способ передачи данных. Этот способ, называемый «способом рукопожатия», заключается в том, что в системе определяются два устройства: передающее (Iniciator) и приемное (Target). Когда передающее устройство готово к передаче, оно выставляет данные на линии данных и сопровождает их соответствующим сигналом (Indicator Ready), при этом приемное устройство записывает данные в свои регистры и подает сигнал Target Ready, подтверждая запись данных и готовность к приему следующих. Установка всех сигналов, а также чтение/запись данных производится строго в соответствии с тактовыми импульсами шины, частота которых равна 33 МГц (сигналу CLK). ü Основное преимущество PCI-технологии заключается в относительной независимости отдельных компонентов системы. В соответствии с концепцией PCI, передачей пакета данных управляет не CPU, а включенный данных в RAM (или их считывание) либо при обмене данными между двумя любыми компонентами системы. ü В соответствии со спецификацией PCI 1.0 шина PCI — 32-разрядная, а РС1 2.0 64-разрядная. Таким образом, полоса пропускания шины составляет, соответственно, 33 Мгц х(32 бит: 8) — 132 Мбайт/с и 33 МГц х(64 бит: 8) = == 264 Мбайт/с. ü Шина PCI универсальна (или самодостаточна). Поскольку системная шина и шина PC соединены с помощью главного моста (Host-Bridge), то последняя является самостоятельным устройством и может использоваться независимо от типа CPU. ü
![]() |
В соответствии со спецификацией PCI 5.0 ширина шины увеличена до 64 разрядов, слоты PCI имеют дополнительные контакты, на которые подается напряжение 3,3 В. Большинство современных микросхем PC работает при таком напряжении. Примером могут служить CPU DX4 и Pentium корпорации Intel. ü Система PCI использует принцип временного мультиплексирования, т. е. когда для передачи данных и адресов применяются одни и те же линии. ü Важным свойством шины PCI является ее интеллектуальность, т. е. она в состоянии распознавать аппаратные средства и анализировать конфигурации системы в соответствии с технологией Plug&Play, разработанной корпорацией Intel. Как только первые материнские платы с шиной PCI появились на рынке, фирмы-изготовители приступили к производству соответствующих карт расширения. Шина PCI закрепилась и в «параллельном» компьютерном мире. Фирмы DEC и Apple заявили, что будут использовать шину PCI в своих компьютерах.между ним и шиной PCI мост (Host Bridge Cash e/DRAM Controller). Процессор может продолжать работу и тогда, когда происходит запись 5.5.3 Шина АGР Несмотря на все преимущества шины PCI, ее возможностей становится недостаточно в условиях растущей нагрузки на систему. Причина заключается в том, что новое поколение графических микросхем работает одновременно с 3-мерной графикой и видео. Только для управления пользовательским, 1рафическим интерфейсом требуется половина пропускной способности шины. Чтобы, не меняя уже сложившийся стандарт на шину PCI, ускорить ввод/ вывод данных на видеоадаптер и, кроме того, увеличить производительность PC при обработке трехмерных изображений без установки специализированных дорогостоящих двухпроцессорных видеоадаптеров, в 1997 г. фирмой Intel был разработан стандарт на шину AGP (Accelerated Graphics Port). AGP является каналом передачи данных между видеоадаптерами RAM. Шина AGP — это локальная высокоскоростная шина ввода/вывода, предназначенная исключительно для нужд видеосистемы. Она связывает видеоадаптер (3 D-акселератор) с системной памятью PC, поэтому на материнской плате имеется только один разъем (слот) AGP..
![]() |

Шина AGP была разработана на основе архитектуры шины PCI, поэтому она также является 32-разрядной. Вместе с тем, у нее имеется ряд важных Рис.3 Структурная схема видеосистемы на основе шины AGP отличий от шины PCI, позволяющих в несколько раз увеличить пропускную способность. ü Использование более высоких тактовых частот (режимы 2, 4) ü Демультиплексирование (режим SBA) ü Пакетная передача данных ü Режим прямого исполнения в системной памяти (DiME) Рассмотрим эти особенности более подробно. Режимы 2х и 4х Если шина PCI в стандартном варианте (32-разрядная) имеет тактовую частоту 33 МГц, что обеспечивает теоретически пропускную способность шины PCI 33х32 = 1056 бит/с = 132 Мбайт/с, то шина AGP тактируется сигналом с частотой 66 МГц, поэтому ее пропускная способность составляет 66х32 = = 264 Мбайт/с, (это соответствует так называемому режиму 1х). Помимо режима 1х, стандартом AGP Revision 1.0 предусмотрен режим 2х. при котором передача данных производится не только по переднему, но и по заднему фронту тактового импульса. В режиме 2 эквивалентная тактовая частота составит 132 МГц, а пропускная способность — 528 Мбайт/с. Заметим, что режим 2 идеально подходит для процессоров семейства Pentium и старше, у которых внешняя шина данных, как известно, является 64-разрядной, позволяет за один такт выполнить две 32-разрядных, команды или обработать два 32-разрядных слова. В последних версиях шины AGP (AGP Revision 2.0), использующих пониженное напряжение питания. За один такт синхронизации удается выполнить уже не две, а четыре передачи (режим 4х), при этом скорость передачи данных через шину составляет около 1 Гбайт/с. Кроме того, наиболее современные видеоадаптеры, выполненные на основе прогрессивных технологий 0,25 мкм и 0,18 мкм, обычно устойчиво работают на более высоких частотах шины AGP, чем 66 МГц (например, при использовании в Chipset Intel 440BX тактовой частоты системной шины около 133 МГц вместо положенных 100 МГц тактовая частота шины AGP, определяемая как 66% частоты системной шины, составит не 66, а около 90 МГц). Таким образом, пропускная способность интерфейса AGP значительно выше, чем интерфейса PCI. Pipelining — конвейерная (пакетная) передача данных При обращении к памяти через шину ввода/вывода обязательно возникают задержки, т. е. между моментом выставления кода адреса и моментом получения кода данных проходит какое-то время. При обмене через шину PCI эта задержка возникает при каждом обращении. Шина AGP, в отличие от PCI, предусматривает pipelining — конвейерную (пакетную) передачу данных (рис. 5.8), при которой новый запрос (код адреса) выставляется на шине сразу же после предыдущего, т. е. запросы выстраиваются в очередь (ее длина может достигать 256). Все запрошенные данные передаются по шине также в виде непрерывного пакета. В результате этого задержка получения данных может возникнуть только один раз, что значительно повышает скорость обмена данными через шину AGP по сравнению с обменом через шину PCI. Демультиплексирование ‘Как известно, шина PCI является мультиплексированной (переключаемой): одни и те же 32 линии ADO — AD31 сначала используются для передачи кода адреса, а затем — кода данных. Иногда такой режим называют AD (Address — Data).
Шина AGP также может работать в режиме AD, однако она допускает применение режима SBA (Side-Band Addressing — Адресация по боковой полосе), при котором для передачи кода адреса используются восемь дополнительных линий разъема AGP, именуемых SBO — SB7. Поскольку код адреса, как и код данных — 32-разрядные, то такое разделение является частичным демультиплексированием (для Рис. 4 Архитектура шины USB полного демультиплексирования надо выделить 32 линии вместо 8, а это весьма дорого). Заметим, что название Side-Band Addressing не совсем точно отражает суть данного режима, поскольку термин Side Band (Боковая полоса частот) традиционно используется применительно к радиоканалам, для которых уместно говорить об основной и боковой полосе выделенных частот. В шине AGP, как известно, выделяется не дополнительная полоса частот, а отдельная 8-разрядная линия передачи данных. Режим SBA используется только в режиме 2х, причем при пакетной передаче. Для выполнения адресации в режиме SBA используется три такта синхронизации (при этом, с учетом режима 2х, по проводам SBO — SB7 передается 6 байт). В течение первых двух тактов передаются 4 байта адреса, а в течение третьего такта — 1 байт длины запроса и 1 байт команды. Провода ADO — AD31 шины AGP в режиме SBA используются исключительно для передачи данных, поэтому скорость передачи данных в данном режиме существенно выше, чем в режиме AD. 5.5.4 Шина USB Спецификация периферийной шины USB (Universal Serial Bus) была разработана фирмами — лидерами компьютерной и телекоммуникационной промышленности — Compaq, DEC, IBM, Intel, Microsoft, NEC и Northern Telecom — для подключения периферийных устройств вне корпуса PC. Шина USB поддерживает технологию Plu&Play. Скорость обмена информацией по шине USB составляет 12 Мбит/с. На новых материнских платах имеется специальный разъем для подключения концентратора USB (USB-Hab).К компьютерам, оборудованным шиной USB, можно подсоединять периферийные устройства (клавиатуру, мышь, джойстик, принтер и др.). не выключая питание. Как только устройство будет подключено, автоматически осуществляется его конфигурирование. Все периферийные устройства должны быть оборудованы разъемами USB, и подключаться к PC через отдельный выносной блок, именуемый USB-хабом или концентратором, с помощью которого к PC можно подключить до 127 периферийных устройств. Для использования шины USB под управлением операционных систем Windows 95/98, Windows NT и OS/2 Warp разработаны специальные драйверы. Согласно спецификациям PC 98 и PC 99 корпорация Intel планирует полностью заменить шину ISA шиной USB для подключения периферийных низкоскоростных устройств ввода/вывода, и шиной Fire Wire (IEEE 1394) для подключения устройств хранения информации (CD-ROM, HDD и др.) и »вода видеоданных. 5.5.5 Шина SCSI Шина SCSI (Small Computer System Interface) обеспечивает скорость передачи данных до 320 Мбайт/с и предусматривает подключение к одному адаптеру до восьми устройств (винчестеры и приводы CD-ROM SCSI, сканеры, фото- и видеокамеры и др.) В отличие от рассмотренных выше шин, шина SCSI реализована в виде кабельного шлейфа. С шиной PC (ISA или PCI) шина SCSI связывается через хост-адаптер (Host Adapter). Каждое устройство, подключенное к шине, имеет свой идентификационный номер (ID). Обычно хост-адаптеру, который должен иметь высший приоритет, назначается ID7. Типичные назначения ID для различных устройств приведены в табл. 5.7. Любое устройство, подключенное к шине SCSI. может инициировать обмен с другим устройством. Как видно из рис. 5 скорость обмена данными через интерфейс SCSI ограничена производительностью шины ввода/вывода. Таким образом, данные могут передаваться, например, по 16-разрядной шине SCSI со скоростью до 20 Мбайт/с.

Очередным этапом развития шины SCSI явилась Ultra SCSI, которая использует тактовую частоту шины 20 МГц. Пропускная способность 8-разрядной шины составила 20 Мбайт/с. 16-разрядная шина Ultra SCSI, называемая Wide Ultra SCSI (или Fast 40), имеет пропускную способность 40 Мбайт/с. Увеличение пропускной способности шины SCSI привело к уменьшению максимально допустимой длины кабеля. В связи с этим был разработан новый метод дифференциальной передачи данных, получивший название LVD (Low Voltage Differential). Применение данного метода позволило удвоить пропускную способность шины до 40 Мбайт/с для спецификации Ultra2 SCSI и 80 Мбайт/с для Wide Ultra2 SCSI (или Fast 80). В сентябре 1998 г. появилась шина Ultra3 SCSI, которая имеет 63 изменения по сравнению с предыдущими версиями. После выпуска первых промышленных образцов новая спецификация получила название Ultra 160. Пропускная способность шины увеличилась до 160 Мбайт/с. Основными особенностями Ultra 60 являются: ü Двойная синхронизация при передаче данных (Double Transition Clocking) ü Контроль целостности данных за счет использования циклического кода с избыточностью (CRC) ü Контроль окружения (Domain Validation), который заключается в проверке возможностей соединительных кабелей, терминаторов, карт с целью обеспечения оптимальной производительности шины. Следующим развитием шины SCSI явилась Ultra320. В табл. 5.8 приведены основные характеристики различных спецификаций шины SCSI (слово «Narrow» перед названием 8-разрядной шины SCSI обычно опускается). Реальным соперником SCSI может стать последовательная шина IEEE 1394 (High Performance Serial Bus), чаще называемая Fire Wire. 5.5.6 Шина IEEE 1394 IEEE 1394 — это стандарт на высокоскоростную локальную последовательную шину, который был разработан на основе технологии Fire Wire фирмами Apple и Texas Instruments. Он является частью нового стандарта Serial SCSI (SCSI-3). Шина IEEE 1394 предназначена для обмена цифровой информацией между PC и другими электронными устройствами. Благодаря низкой стоимости и высокой скорости передачи данных эта шина становится новым стандартом шины ввода/вывода для PC. Ее изменяемая архитектура и одно-ранговая топология делают FireWire идеальным вариантом для подключения жестких дисков и устройств обработки аудио- и видеоинформации. Эта шина также идеально подходит для работы мультимедийных приложений в реальном времени, особенно связанных с нелинейным монтажом видеофрагментов. Локальная последовательная шина IEEE 1394 способна передавать данные со скоростью 100, 200, 400, 800 и 1600 Мбит/с (12,5, 25, 50, 100 и 200 Мбайт/с), а при работе с файлами некоторых типов — до 1 Гбит/с. Такая высокая скорость достигается за счет передачи информации в пакетном режиме. Кроме того, шина IEEE 1394 обеспечивает одновременную работу нескольких устройств, передающих данные с разными скоростями, точно так же, как и SCSI. Шина использует простой 6-проводный кабель (рис. 5.14), состоящий из двух различных пар линий, предназначенных для передачи тактовых импульсов и информации, а также двух линий питания. Как и USB, шина IEEE 1394 полностью поддерживает технологию Plug&Play, включая возможность «горячего» подключения (установка и извлечение компонентов без отключения питания PC). Структура шины IEEE 1394 не так сложна, как структура параллельной шины SCSI. Устройства, подключаемые к ней, могут потреблять ток до 1,5 А при напряжении от 8 до 40 В. Производительность шины IEEE 1394 выше производительности Ultra-Wide SCSI, а разъем значительно меньше разъема SCSI. Кроме того, она и стоит дешевле. Шина IEEE 1394 построена по разветвляющейся топологии и позволяет использовать до 63 узлов в цепочке. К каждому узлу можно подсоединить до 116-ти устройств. Если этого недостаточно, то можно дополнительно подключить до 1023 шинных перемычек, которые могут соединять более 64 000 узлов. Для передачи сигналов без искажений длина стандартного кабеля, соединяющего два узла, не должна превышать 4,5 м. Подключать к компьютеру через интерфейс IEEE 1394 можно практически все устройства, способные работать с SCSI. К ним относятся все виды накопителей на дисках, включая жесткие, оптические, CD-ROM, цифровые видеодиски (DYD). цифровые видеокамеры, устройства записи на магнитную ленту и многие другие периферийные высокоскоростные устройства. Такие возможности делают эту шину одной из самых перспективных для объединения компьютера с бытовой электроникой. В настоящее время уже выпускаются адаптеры IEEE 1394 для шины PCI. Контрольные вопросы. 1 Опишите классификацию шин. 2 Как различают шины по функциональному назначению? 3 Какие компоненты включает архитектура шины? 4 Опишите шину данных. 5 Опишите шину адреса. 6 Опишите шину управления. 7 Опишите основные характеристики шины. 8 Дайте определение интерфейса. 9 Опишите системные шины. 10 Опишите шину ISA. «20. Проблемы внутрибольничных инфекций» — тут тоже много полезного для Вас. 11 8- и 16-разрядные шины. 12 Опишите шину PCI. 13 В чем состоит особенность шины АGР? 14 Опишите шину USB. 15 Опишите шину SCSI. 16 Укажите особенность шины IEEE 1394.
CAN шина
Всем привет! Я начинающий разработчик и увлекся Embedded стороной вопроса. Лучший способ запомнить информацию — написать какой нибудь конспект и поделиться им. Ниже моя краткая выжимка о CAN шине и передаче данных через нее:
Шина CAN (Controller Area Network).

Шина представляет из себя пару проводников, в нашем случае витую пару разделенную резисторами сопротивлением 120 Ом (Называется этот резистор Терминаторам). Состоит из линии высокого напряжения (H — high) и низкого напряжения (L-low).
Скорость 1 mb/s при длине шины до 40 метров (Автомобиль или комната).
Скорость 10 kb/s при длине шины до 1000 метров (здание).
Приемопередатчики равноправны в шине CAN.

Когда никто не передает сигнал по шине и в H и в L по 2,5 вольта. Когда сигнал есть — на H 3,5V а на линии L — 1,5 В. По разнице между H и L приемопередатчики понимают, что началась передача. Поэтому шина CAN не чувствительна к наводкам. Вольтаж на витой паре может быть другой — шина понимает о начале приема или передачи по разнице между L и H.
Когда на вход передатчику приходит ноль — передатчик увеличивает на H напряжение. Все остальные приемопередатчики понимают, что началась передача сигнала. Кодирование выполняется в формате NRZ:
Dominant bit — состояние когда на шине H>L — соответствует 1-це.
Recess bit — состояние когда на линии нет сигнала воспринимается как ноль.
Смена бит происходит по частоте передатчика. Частота приемников может незначительно отличаться вследствие чего большая последовательность повторяющихся сигналов может привести к рассинхронизации. Поэтому применяется
Bit stuffing — 5. Если идет 5 одинаковых бит — передатчик выставляет противоположный бит. Все приемники игнорируют этот бит. Если же приемники видят подряд 6 одинаковых бит — они понимают что произошла ошибка и игнорируют сообщение.
Collision Resolution (CR) — если два передатчика начинают одновременно передавать — приоритет получает тот кто передает больше единиц. Допустим два передатчика начали одновременно вещать. Оба передают 3 единицы, на 4 бите один из них не выставляет сигнал, но фиксирует что на шине есть перепад — таким образом он понимает, что сигнал вместе с ним кто то передает параллельно и замолкает.
CR эффективнее Collision Detection в ethernet так как в CD в случае обнаружения двух передающих передатчиков замолкают оба и начинают передачу через какой то случайный промежуток времени.
Протокол передачи информации DATA FRAME. Передача данных когда устройство делится данными.

S — стартовый бит — всегда Dominant bit. Все приемники синхронизируются по нему. На вход приемо передатчику приходит ноль и он подает напряжение на шину H создавая тем самым разницу.
ID — уникальный номер сообщения(команды). По нему приемники понимают нужно ли им это сообщение или оно адресовано кому то другому. В стандартном исполнении CAN 11 бит, в CAN2.0b — 29 бит.
D length — указывает какой длины в байтах будет блок данных.
Data — само сообщение от 0 до 8 байт.
CRC — контрольная сумма размером 2 байта.

ACK. После передачи CRC приемник получающий сообщение выставляет подтверждающий бит если сумма сходиться. Передатчик видит что приемник получил сообщение и далее выставляет 7 бит Reces сигнала — EOF.
Для всех кто увлекается Электроникой и Электротехникой — рекомендую канал Электротехника и электроника для программистов. Если что то не понятно или неправильно изложено — пишите поправлю. Собственно первоисточник статьи — лекция 403 CAN шина- введение.
Как ниже в коментариях справедливо заметили в Википедии конечно больше информации.
Ну и перепечатывать википедию смысла не вижу. Приложу тут ссылочку.


