Свързване на устройствата и управляващата логика



Дата20.08.2018
Размер222.76 Kb.
#81029
PCI-Express

В настоящата статия, ще се постарая да покрия максимално общо-техническата част, свързана с PCIe, без да навлизам в специфичните сървърни приложения, като hot-pluging/swaping и някои пакетно-обслужващи функции. Също така в основното сравнение, няма да засегна пряко в детайли особеностите на АGP интерфейса, тъй като той се явява модификация на 66MHz PCI стандарт, който ще бъде разгледан в отделна глава.

С агресивното си налагане на най-новата си платформа от серията i900, Интел официално обяви намеренията си, за най-мащабната от много време насам подмяна, на oсновен индустриален стандарт – Peripheral Component Interconnect. Със своя богат набор от характеристики и възможности за реализация, PCI-Express (PCIe, за по-кратко), се цели с един замах да вкара в новия век основната периферна шина, която в сегашния си вид се ползва повече от десетилетие.

Този резултат от договореностите в PCI-SIG комитета е пример, за един от редките моменти в тази индустрия, когато взаимното приемане на общ стандарт може да направи прехода към него възможно най-бърз и до някъде гладък. Показателен е факта, че в много кратко време, всички основни доставчици (IHV) на системна логика за управление (core logic), обявиха намеренията си за реализация на новия интерфейс в продуктите си.

Преди да премина към същинското представяне и разглеждане на новия стандарт, нека си припомним накратко архитектурата на основните компоненти в един обикновен PC.



Свързване на устройствата и управляващата логика
На повечето от вас, без съмнение им е до болка позната базовата схема на свързване по дънната платка в един РС.

Обща схема на това свързване е представен на следната фигура:




Фиг. 1
Принципно свързване на компонентите

Управляващата логика, играе ролята на много-платформен превключвател (switch/router) и направлява входно-изходния трафик между различните устройства.

От доста години, традиционно, управляващата логика е разделена физически на две части – южен и северен мост (bridge), които събирателно се наричат схемен набор системна логика или за по-кратко – чипсет (chipset). Това разделяне, не е без причина. Във всяка система присъстват три приоритетни устройства, за които е нужно да имат бърза връзка по между си. Това са централния процесор, оперативната памет и видео-адаптера.

Основната част на видео-адаптера е графичния процесор (GPU). Модерните графични процесори в компютрите играят, едва ли не, ролята на втори централен процесор (CPU), изхождайки от тяхната значимост и степен на използване от приложния софтуер (най-вече игри). Поради тази причина, той има нужда от привилегирован достъп до ресурсите на останалите две устройства – процесора и оперативната памет (в частност контролера, който я управлява). В резултат на това, и трите устройства са свързани “гъсто” едно към друго, в отделен мост на чипсета - северния.

Останалата част от управляващата логика е събрана във другия мост – южния. Той поема грижата, да направлява трафика между най-разнообразни нови или наследствени (legacy) периферии – PCI, ISA, USB, xATA, FireWire, DMI, CSA, V-Link и много други “частни” или с отворен стандарт шини.

Трафикът от и към тези устройства, се управлява и насочва от южния мост към северния, за да могат заявките за прекъсвания и достъп до определени адреси в оперативната памет да се обслужват, както и редовия поток от данни.




Фиг. 2
Северен и южен мост

Както се вижда от фигурата, PCI шината е закачена за южния мост. С изключение на отпадналите вече ISA/VLB, тази шина се явява най-старата периферна връзка в целия този комплекс, по отношение на преносен капацитет и мащабируемост. Следователно, тя се нуждае най-много от осъвременяване.

Като временно обобщение от до сега казаното, можем да направим извода, че вътрешността на един съвременен компютър, е една доста богата “колекция” от най-разнообразни по капацитет и сигнализация шини. Тази смесица от твърде разнообразни протоколи за свързване на устройства към южния мост, е един непрекъснат процес на “хакване” в опит, да се заобиколи все по-тягостното ограничение на PCI шината. Именно това подтикваше разработчиците, да вграждат всеки новопоявил се интерфейс пряко в южния мост в отчаяния си стремеж, да се избегне задушаващата PCI шина.

В резултат на всички тези тенденции, съвременният южен мост е заприличал на едно своеобразно Швейцарско ножче – един “букет” от входно-изходни интерфейси и конкуриращи се схеми за направляване на целия този разнообразен трафик. Единствено, развитието на полупроводниковата техника, изразяващо се в по-високата степен на интеграция, бе в състояние да подпомага този процес на “нагъчкване” на едно място на толкова много интерфейсни стандарти. В един идеален свят, една-единствена шина трябва да е достатъчна, за да обслужва връзките между всички периферни устройства (включително графичния адаптер) и също така, към най-приоритетните възли в системата – централния процесор и оперативната памет.

Разбира се, в нашата действителност тази концепция от вида на “one bus to rule them all” е твърде малко вероятна да се получи, дори с възможностите на PCIe или с “приказната” Infiniband. Въпреки, че този идеал за една-единна шина за цялата периферия, няма да бъде постигнат, има надежда за въвеждане на някакъв ред в гъмжащия хаос от интерфейси. И това е именно PCIe.
Въвеждане в света на PCI

Преди да премина към разглеждането на PCIe, в голяма помощ ще ни бъде запознаването с настоящото положение на основния стандарт за периферна шина – PCI, и нейните възможности и ограничения.

PCI, дефиниран в началото на 90-те години на ХХ век, определя следните характеристики на шината: 32-бита разрядност за предаване на данни и 33MHz честота тактовия сигнал, в резултат на което се получава теоретичен пропускателен капацитет от 132МВ/сек. За времето си, това беше повече от достатъчно, но нарастващите нужди на останалата част от системата - повече изчислителна мощ, следователно по-голяма нужда от бърз обмен на данните, въведе разработването и внедряването на последващи модификации на базовия PCI стандарт. По-късните модификации, включваха 66MHz шина с 32 или 64-битова разрядност, даващи съответно 264 и 528МВ/сек. теоретичен капацитет. Но за това, по-късно.

PCI стандарта използва споделен тип шина, за свързване на крайните устройства с управляващата логика, известна като shared bus topology.

Всички PCI устройства са закачени към единна обща шина и използват този споделен ресурс, за да обменят информация, както по между си, така и с останалите възли в системата:


Фиг. 3
Споделена шина

Поради факта, че една шина се използва от всички устройства, се налага да се осъществи някакъв арбитражен механизъм, за това кой и как да поеме контрола над този общ ресурс, особено когато няколко устройства едновременно, трябва да получат достъп до шината.

Веднъж, щом дадено устройство получи достъп до шината, то приема статут на bus master, т.е. поема контрола над управлението върху нея и свободно може да “разговаря” с централния процесор, например, докато не се получи приоритетна заявка за прекъсване на това управление, от страна на въпросния арбитражен механизъм в южния мост.

Вглеждайки се отново в схемата, представяща общото свързване на устройствата в една система (фиг. 2), виждаме как са разположени нещата в действителност.

Там централния процесор и чипсета (северния и южния мост), изпълняват общата роля на host (или root). Повече детайли, относно тези отговорности на процесора и чипсета, ще разгледаме по-късно. За сега е достатъчно да спомена, че приемника (host) ръководи цялата операция, по засичане и настройване на отделните PCI устройства, като по подразбиране приемника държи контрола над шината и раздава приоритетите. Или с други думи - предназначението на PCI шината е, да осъществи физическата връзка между устройствата и приемника, като последния упражнява контрола над споделения ресурс между тях - шината.

Основното предимство на топологията от типа обща шина е, че е лесна и евтина за вграждане и реализация. Или поне така е на теория. Веднъж, щом изискванията за повече пропускателна способност и мащабируемост започнат да нарастват, тази топология рязко влошава своите практически качества и въвежда някои специфични и често непреодолими ограничения.

Нека да разгледаме някои от тези ограничения с цел, както да си дадем представа за настоящото положение с PCI, така и да избистрим качествата на наследника му – PCIe.

От гледна точка на централния процесор, PCI устройствата са достъпни посредством доста праволинеен load-store механизъм. На разположение за тази задача е плоско (flat) адресируемо пространство в паметта, изцяло за нуждите на PCI периферията, което за процесора си е обикновена част от цялата налична памет, но вместо код и данни, в нея се съдържат адресните обхвати на всяко PCI устройство.

И така, по същия начин, по който процесора осъществява достъп до паметта, чрез операции по четене и запис, той прави същите действия и при нужда да получи достъп до някое PCI устройство – просто зарежда неговия определен адрес, намиращ се в паметта.

Когато компютъра се намира в началния етап на стартиране, цялата PCI подсистема трябва да се инициализира, чрез присвояване на части от PCI адресното пространство за всяко устройство закачено към шината, за да могат последните да бъдат достъпни за централния процесор.

Щом веднъж, всички PCI устройства бъдат обхвати и знаят своите си адреси в паметта, те започват да “слухтят” за наличието на всякакви команди и данни по шината, които могат да са предназначени за тях. Щом някое PCI устройство “чуе” адрес по шината, който притежава, то веднага започва да чете данните, които следват този адрес.

Горната схема работи много добре, когато на PCI шината са закачени само няколко устройства. Но естеството на този вид споделена шина е, че всяко допълнително устройство към нея, внася определено количество шум (noise), докато се ослушва за адреси и данни, заедно с всички останали устройства.

В следствие на това, колкото повече “слухтящи” устройства са закачени към шината, толкова повече се повишава електрическото натоварване и нивото фоновия шум може да достигне нива, при които отделни устройства да не могат правилно да разпознаят собствените си адреси и данни към тях.


Споделяне на шината

За да ви улесня в сложния лабиринт от термини и схващания, ще дам пример от позната тото ни ежедневие:

Представете си една голяма сграда с много офиси, на разположението на които има само една телефонна линия. Служителите работят в техните си отделения, като по цял ден слушалките на техните телефони са вдигнати и всеки слуша в тях, дали секретарката на директора, няма да извика неговото име: “Г-н Иванов, г-ца Петрова е при мен на рецепцията и иска да говори с Вас; включвам я на линията – говорете...”.

Само с няколко служителя, тази простовата схема на работа е лесно приложима, евтина, макар и не много удобна за ползване – до тук добре. Но я да си представим, какво ще е положението със стотици служители: количеството на фоновия шум във всяка слушалка ще е нетърпим и доста трудно ще бъде за всеки отделен служител, да чуе по общата линия своето име в общата врява.

Този феномен на влошаване на сигнала, в резултат на растящото натоварване на общата шина, заедно с проблемите на честотната характеристика, е причина затова, една PCI шина да е ограничена до пет add-on устройства (разширителни платки) и то в най-добрия случай. Пряко запоените за дънната платка устройства, имат предимството да получават сигнал с далеч по-добри характеристики така, че дори повече от 5 устройства са възможни в някои случаи.

Както и да е, ако все пак трябва да се ползват повече от 5 add-on устройства в една система, в практиката се налага осъществяването на “мостово” свързване между няколко PCI шини (PCI-to-PCI bridge), посредством своеобразни повторители:




Фиг. 4
Мостово надграждане на PCI шината

Тази дървовидна структура на мостовото свързване, е най-показателната разлика между старата структура на PCI и point-to-point (peer-to-peer) интерфейсите от ново поколение – HyperTransport и Infiniband.

Приемникът, на върха на тази структура, управлява цялата мрежа от мостови схеми и крайни устройства – както споменах вече, той е отговорен за засичането на всяко отделно устройство в PCI топологията и неговото последващо настройване, по време на стартиране на системата.

Това прави всяко устройство, закачено към шината подчинено (slave) с едно-единствено главно (master) такова – самия приемник. И понеже приемникът, трябва да “изброи” всички налични устройства по шината и да ги настрои, по време на стартирането на системата (boot time), допълнителни възможности, като “гореща” подмяна или включване на крайни устройства (hot-plug/swap) е невъзможна.




Организация на трафика по PCI шината

Общо казано, целия трафик по PCI шината, функционално е разделен на два чифта.



Първия чифт се състои от адрес и данни. Данните са цялата информация, която протича по шината от и към крайното устройство, а адресът е местонахождението на това устройство (или някаква област в него), където информационния поток е адресиран. В този смисъл, всяка шина, която поддържа включването на множество устройства към нея, трябва да разграничава тези два вида трафик.

Втория чифт, който и едновременно застъпва първия, се състои от команди и четене/запис. Командният трафик, съдържа определен тип конфигурационни или контролни параметри (т.е. специфичен тип данни). На кратко казано, командния трафик съдържа в себе си адреси и данни от първия чифт. Примери за команден трафик са инициализиращите инструкции за дадено устройство, сигнал за рестартиране, конфигурационен параметър, които кара устройството да превключи в даден режим на работа и т.н. Изобщо, командния трафик, е начина централния процесор да контролира потока от данни, който влиза или излиза от даденото устройство.

Трафикът на четене/запис е може би най-важния от всички, защото се състои от съществената информация, върху която се работи. Например, един PCI RAID контролер използва трафика на четене/запис, за да приема или предава отделните файлове от дисковите устройства, които за закачени към него. Звуковия адаптер пък, по този начин извлича данните, които по-късно се преобразуват в сигнали и се чуват през говорителите и т.н. Също, както командния трафик, трафика на четене/запис съдържа адреси с прикрепени данни и може да се счита, като част от първия чифт трафик, който разгледахме в по-горе.

Различните шини и техните управляващи протоколи, прилагат различни начини за справяне с тези четири припокриващи се видове трафик. Например, много шини се състоят от две части – адресна шина и шина за самите данни. Трафика с адресите преминава по първата шина, а данните по втората, без да се бъркат взаимно. Предимството на тази конструкция е предимно само за данните – трафика за тях е малко по-безпрепятствен и с по-ниско закъснение.

Разбира се, този начин на физическо разделяне на двата типа трафик е скъп и до някъде сложен, за реализация. За това, по-рентабилното решение е да се “вмъкват” адресите и данните на една-единствена шина. Този подход е известен, като multiplexing. Това редуване на два вида трафик означава, че първо трябва да се вмъкнат адресите и след тях самите данни. PCI протокола използва точно този подход – адресите и данните се вмъкват, на редуващ се принцип, по единствената 32-битова шина и така се предават.

Сега си припомнете примера с офис-сградата и единствената телефона линия в нея: “Г-н Иванов, г-ца Петрова е при мен на рецепцията и иска да говори с Вас; включвам я на линията – говорете...”. В случая, фразата “г-н Иванов” ще бъде адресът, а разговора между г-н Иванов и г-ца Петрова – трафика от данни.

Очевидно погледнато, вмъкването на адреси и данни на една шина е по-малко ефективно, от гледна точка на полезната пропускателна способност, но за това пък, опроводяването на допълнителни изводи за още една шина, не е безплатно.

По-късните ревизии на PCI стандарта, определят наличието на допълнителна side-band шина, служеща за предаване на специфичен команден трафик. Тази допълнителна шина е по-малка, но въпреки това, увеличава общата цена на вграждане, консумацията на енергия и т.н. така, че не се явява оптимално решение.

Някои настоящи спецификации на PCI постулират метод, за използване на стандартните операции по четене/запис, за да се предава команден трафик до PCI устройствата. Този метод се нарича Message Signal Interrupt (MSI) и за него има нарочно заделено място в адресното пространство за PCI устройствата, за предаване на контролно съобщение, наречено прекъсване (interrupt). Това място в паметта, предназначено за тези съобщения, представлява едно своеобразно табло за обяви, в което процесора си записва съобщенията за прекъсване, които се четат после от PCI устройствата. Както ще видим по-нататък в статията, PCIe разширява MSI спецификацията отвъд прекъсванията, включвайки целия контролен трафик. Но за това, после.



И така, да обобщим до сега казаното, за PCI шината:

PCI такъв, какъвто е днес, страда от някои големи недостатъци, пречещи да предостави нужната пропускателна способност и мащабируемост за днешните и бъдещи периферни устройства. Това е в резултат най-вече, на неговата строго-паралелна и споделена шина, както и на “простоватия” load-store модел, за осъществяване на връзките между устройствата и останалата система, който е доста по-муден от гъвкавия пакетно-ориентиран (routed) мрежов модел.
PCI-X: По-бързо и по-широко, но с "греховете" на PCI

PCI-X беше опит, да се разширят възможностите на PCI стандарта по възможно най-безболезнен начин и така, да му осигури още няколко години път за развитие и приложение. Всъщност, новите спецификации на практика, не решаваха нито един хроничен проблем, като цяло. А някои от тях, дори се влошиха.

PCI-X спецификацията, ефективно удвоява разрядността на шината от 32 на 64-бита, като по този начин се повишава възможността за паралелно предаване на повече данни, както и се разширява адресното пространство. Работната честота също е повишена на 66MHz с възможност, за още една стъпка до 133MHz, като така върховата пропускателна способност достига до 1GB/sec.

Последната ревизия 2.0 на PCI-X стандарта (PCI-X 266/533), позволява използването както на предния, така и на задния фронт на тактовия сигнал, за пренос на данни. По този начин, теоретичния капацитет за пренос на данни се удвои още два пъти, но практическата ползва от това беше неубедителна.

Несъмнено, всички тези подобрения увеличиха капацитета и производителността, като цяло, но за сметка на това, цената за вграждане се повиши до непосилни нива за потребителския пазар. Колкото по-бърза и широка ставаше PCI-Х, толкова се усилваха недостатъците, характерни за този стандарт, които разгледахме по-рано. Всичко това, изисква много по-строг контрол на качеството при производство, по-скъпи материали и компоненти, за да намалят до колкото се може отрицателните последици от шума по шината и да се гарантира целостта на информацията, предавана по нея.

Повишената тактова честота на шината, не е единствената причина за усилване на шумовия фон по нея. Понеже PCI-X е и по-широка, в резултат на опроводяването на допълнителните изводи, се появява и допълнително смущение, изразяващо се в принудителна индукция между отделните печатни писти, в резултат от повишеното общо количество електрически сигнали, които трябва да се предават заедно по шината. Това, комбинирано с повишеното електрическо натоварване при факта, че има повече от едно устройство на шината, усилва многократно ефекта от фоновия шум и мерките за неговото подтискане, взимат своята цена.

Всички тези обстоятелства – повишена работна честота, по-широка шина и дори използването на двата фронта на тактовия сигнал, комбинирано с допълнително оскъпяващия ECC метод за поправка на едно-битови грешки, запазиха PCI-X далеч от масовия пазар. И си струва да отбележим, че повечето от тези проблеми, които изброих, са изключително характерни за DDR и особено за DDR-II DRAM интерфейсите.

И след всичкия този “ужас и болка”, май забравихме да припомним, че PCI-Х шината все пак, трябва да споделя ресурса си с няколко устройства и в доста случаи, това рязко намалява полезната пропускателна способност.
Разбира се, спасението винаги идва в последния момент.

PCI-Express: Следващото поколение

PCI-Express, преди пазарната си реализация, беше основна част от проекта 3GIO. Всъщност, вземайки под внимание строгия сериен характер на технологията и пълната обратна съвместимост, спокойно можем да го наричаме Serial-PCI, но да оставим шеговитите сравнения със SATA настрана.

Въпреки, че окончателните спецификации на стандарта бяха завършени и приети още през 2002 г., едва през 2004 г. започна масовото предлагане на PCIe устройства.

Най-значимото подобрение, което доведе новия стандарт, е топологията на свързване на крайните устройства – point-to-point (точка-до-точка):




Фиг. 5
Превключвателя, като общ ресурс



Фиг. 6
Шината, като общ ресурс

В топологията от вида point-to-point, споделен превключвател (switch) заменя споделената шина, като общ ресурс по който, всички устройства осъществяват връзка.

За разлика от споделената шина, където всички устройства трябва да се договарят за нейното “справедливо” използване, при споделения превключвател, всяко устройство има равноправен и независим достъп до приемника (host), посредством собствена шина която в случая с PCIe, се нарича “връзка” (link).

Като един същински маршрутизатор (router) или дори автоматична телефонна централа, PCIe превключвателя пренасочва трафика и осъществява point-to-point връзките между две устройства, например.

В диаграмата на фиг. 5, централния процесор може да обменя данни с дадено PCIe устройство просто, като “набира” неговия адрес и оставя частна неприкосновена линия по между им. Тази “частна” линия в случая, се явява PCIe връзката (link).

Разбира се, както е аналогията с телефонното обаждане или дори Интернет връзката между клиент и сървър, двете устройства само си мислят, че наистина разполагат със собствена частна линия помежду си. Всъщност, информационния поток между тях е разбит на малки дискретни части (пакети), които PCIe превключвателя пренасочва напред-назад, между двете комуникиращи си страни.



Kaчество на обслужване

Ефектът от пакетно-базирания метод за управление при PCIe, се изразява във възможността целият контрол над трафика, да се съсредоточи на едно единствено място – превключвателя. При PCI, където споделения ресурс е самата шина, отделните устройства трябва да се съобразяват помежду си, посредством арбитражен механизъм, за това кой и как да използва общата шина. При модела с общ превключвател и отделна, независима връзка към всяко устройство, първия осъществява целия контрол над общия ресурс, който в случая е самия превключвател.


Съсредоточавайки маршрутизирането на трафика и разпределението на ресурсите на едно-единствено място, PCIe открива възможността за една твърде нетипична до сега функция периферна шина - Quality of Service (QoS). PCIe превключвателя, може да дава приоритет на отделни пакети така, че потоците данни в реално време (например, видео или звук) да получат по-висок приоритет над пакетите, които не са времево-зависими. Това може да се изрази в по-малко пропуснати кадри, по-плавно зареждане на големи текстури от оперативната памет и следователно по-малко накъсвания при игра, по-ниско закъснение при звукозапис и т.н.

Обратна съвместимост
Както предполагам знаете, PCIe е обратно съвместим с PCI и настоящите (и по-стари) операционни системи, могат да заредят и работят на PCIe компютър, без нуждата от модификации и надстройки. Ако се питате, как плоския и ограничаващ load-store модел на PCI може да бъде съвместим с гъвкавия пакетно-базиран модел на PCIe, то отговарът е изненадващо прост.

PCI и PCIe, както много други транспортни системи за данни, осъществяват част от OSI Network Stack модела. Няма да разисквам тука подробности, около OSI мрежовия стек, а само ще засегна общата връзка с основната тема на статията.

PCIe реализира първите четири слоя (layers) от OSI стека, които определят физичната страна на предаването на сигналите по отделните писти, чак до по-горното ниво, където са разположени интерфейсите за зареждане и съхранение на данни, които се използват от софтуера.

Системните дизайнери на PCIe протокола, са решили да оставят този load-store интерфейс и плоското адресируемо пространство непроменени, така че наследствените приложения – програми, драйвери и операционни системи, да имат “прозрачен” достъп, до крайните PCIe устройства. Оставащите две нива от OSI стека обаче, взимат тези “наследствени” заявки, характерни за PCI, и ги обръщат в PCIe пакети, като включват в тези пакети маршрутизираща и поточна информация, както и CRC-32 (Cyclic Redundancy Check) информация, поставят всичко това в “рамка” (frame) и готовия пакет се изпраща по шината до крайното му направление. Физическото и бинарно подсигуряване на данните и трафика като цяло, е грижа на физическия слой. Когато пакетите са вече "рамкирани" с начални и крайни байтове, се прилага byte scrambling (разбъркване) с цел да се намали взаимната индукция от множеството съседни сигнали и след това нарочно 8b/10b кодиране подсигурява достатъчен брой битове за времето на предаване на серията от сигнали.

И така, даденото приложение все още си мисли, че записва или чете адрес в паметта, когато си говори с PCIе устройство, но на заден план е налице съвсем друга мрежа от протоколи и сигнализации, пренасочвайки съответните заявки до техните направления.

Това ни връща назад до точката, в която разгледахме командните и контролни сигнали. Както загатнах вече, PCIe взима целия PCI side-band трафик и ги обръща в MSI сигнали така, че последните да могат да бъдат затворени (encapsulated) в пакети и маршрутизирани, като всеки друг read/write трафик. Разбира се, това означава, че всички видове трафик (и сигнали), било то команди или четене/запис, се предават по една единствена шина (връзка, в случая).

Важно да отбележим до този момент е, че двата основни чифта трафик, са логически разделени, докато се предават по PCIe, дори и те да не са разделени физически в различни шини. Първия чифт трафик, адреси и данни, са обединени под формата на пакет. Ядрото на този пакет, се състои от съответния адрес заедно с парчето данни, следващо адреса. И така, структурата на един пакет “смесва” тези два вида сигнали.

Пакетите, от своя страна, попадат в две собствени категории – командни и категория на четене/запис. Всъщност, ако трябва да употребим езика на пакетно-базираната мрежова комуникация, е редно да говорим за пакети от команди и пакети от данни, като последните се водят и пакети на четене/запис.


Пренасочване на трафика по новите "магистрали"

Когато разработващия екип на PCIe, е разсъждавал върху надграждането на PCI стандарта, един от основните въпроси на дневен ред е бил броя на контактните изводи, обслужващи всяко устройство. В главата за PCI-Х, разгледахме затрудненията, свързани с повишената степен на паралелизъм (фонов шум, трудности в високите тактови честоти и т.н.). PCIe премахва тези пречки, чрез подхода си към сериализация на потока от сигнали.

Както споменах вече, физическото опроводяване (шината) между PCIe превключвателя и крайното устройство, се нарича връзка (link). Всяка връзка от своя страна, се състои от една или повече “магистрали” (lanes) и всяка магистрала е способна да пренася един байт (byte) в двете направления наведнъж. Този вид комуникация в двете посоки едновременно, се нарича пълен дуплекс (full-duplex) и в случая е възможна, защото всяка магистрала представлява чифт проводници (писти), по всеки от който се предават сигнали в двете посоки – send and receive.


Фиг. 7
Връзки и магистрали

За да може да се осъществи предаването на PCIe пакетите, които за съставени от множество байтове, едно-магистрална връзка трябва да “разбие” всеки пакет на поредица от последователно наредени байтове и в последствие, да ги предаде в незабавна последователност (burst transmit succession). Устройството, което е на единия край на връзката, трябва да събере всички байтове и да ги “сглоби” в завършен пакет. Това сглобяване и разглобяване на пакетите, трябва да става достатъчно бързо, така че целия процес да е прозрачен за по-горните нива на ОSI стека. Всичко това, изисква определено високо ниво на производителност, от двете страни на PCIe връзката. Предимството на този метод е, че поради високата скорост на серийно предаване, е нужна минимална степен на опроводяване на шината. По този начин казано, серийната връзка е начин да се обърне високата производителност на дадена управляваща логика в широк пропускателен капацитет, което е в противовес на стария подход при PCI и PCI-X, където допълнителното успоредно опроводяване (и с това, броя на контактните изводи) обезпечаваше нужната честотна лента.

И така, благодарение на повишаването на изчислителната мощ на управляващата логика, последната става по-евтина за осъществяването на по-голям пропускателен капацитет, отколкото повишения паралелизъм на шината. И това, не е само така при PCIe, a се отнася за всички модерни серийни протоколи.

По-рано посочих, че една връзка е съставена от една магистрала така, че нека да продължа в тази насока. Една от хубавите особености на PCIe протокола, е способността да се съберат няколко магистрали и така, да се повиши общия капацитет на връзката. В следствие на това, може да комбинират 2, 4, 8 и т.н. магистрали и по този начин, да се повиши общия капацитет на връзката.

Връзка, съставена от една магистрала се обозначава, като x1 link, връзка съставена от две магистрали – x2 link, от четири магистрали – x4 link и т.н. PCIe протокола определя следните стандартни широчини на връзките – х1, х2, х4, х8, х16 и х32.

Прирастът на пропускателния капацитет при PCIe над този на PCI е меко казано, значителен! Единична PCIe магистрала има преносен капацитет от 2,5Gb/sec. във всяка посока, едновременно. Две магистрали, обединени в една връзка са способни на 5Gb/sec. Тези високи скорости на пренос са добре дошли, за все по-нарастващите изисквания на корпоративния и потребителски пазар, както и отварят пътя за нови приложения със съществуващата периферия, особено за видео-ускорителите.


Пионерът на PCIe - графичния процесор

Когато преди време, от компанията Alienware първи представиха работещ прототип на PCIe базирано SLI решение, се чуха доводи, че инженерите на фирмата просто са “преименували” някои от новите възможности на PCIe стандарта. Ако сте чели внимателно до сега, вероятно ще отбележите, че нито една особеност на PCIe стандарта, не се отнася специално до този вид съвместна работа, на два графични ускорителя.

Това е така, защото същността на PCIe – висока двупосочна пропускателна способност, пакетно-мрежови протокол за обмен на данни и т.н., позволява “по рождение” всичките тези възможности, изискващи такава функционалност.

Компютърната 3D графика и анимация, борави с големи обеми от данни, които на всичкото отгоре, трябва да се предвижват възможно най-бързо между основните възли в една система – графичен ускорител, процесор и оперативна памет. При по-старите системи, в повечето случаи AGP шината се явяваше най-бавното звено в тази “триада”, по реално използваем капацитет. С годините, всички ние можехме да наблюдаваме, в каква степен AGP шината беше враг - номер едно, за графичните подсистеми, когато производителите добавяха все повече и по-бърза локална памет към видео-адаптерите. И всичко това, за да се намали до колкото може, нуждата от използване на AGP интерфейса за пренос на времево-критичните данни.

Положението се променя, когато в играта идва PCIe. Два видео-ускорителя включени в двойка х16 PCIe слота, ще имат на разположение целия капацитет на собствените си PCIe връзки, както по между си, така и до централния процесор и оперативната памет най-малкото, поради простия факт, че не трябва да се договарят за никакъв споделен ресурс повече.

Разбира се, графичната система е един от многото потенциални кандидати, за разширяване на възможностите си, посредством PCIe.


Време е за преговори

Както повечето от вас знаят, дори от личен опит вече, в настоящите SLI дънни платки (с изключение на сървърите решения, базирани на nForce Pro, и наскоро обявения nForce4 SLI-x16) въпреки че разполагат с два (в някои случаи, дори с три) слота с физическа дължина, отговаряща на х16 връзка, в действителност когато се ползват с SLI режим, те си споделят единична х16 реална връзка, разделена на 2х8 такива между слотовете. Следните картинки, ще ви внесат малко пояснение:




Фиг. 8
Някои възможни PCIe комбинации



Фиг. 9
Стандартно оразмерени PCIe слотове


По време на стартиране на системата, PCIe устройствата преговарят с превключвателя, за да се разберат за ширината на връзката (брой магистрали) към всяко устройство. Целия този процес на договаряне за ширината на връзката, зависи единствено и само от физически засечения брой магистрали, съставящи всяка PCIe връзка към дадено устройство, както и броя на магистралите опроводени на самата разширителна платка.

И така, всяко PCIe устройство има точно определен брой магистрали със съответните изводи по печатната платка. Графичните адаптери например, са опроводени за х16 PCIe връзка и затова такава платка, трябва да се постави в съответстващия по брой на магистралите PCIe слот. Ако физическия слот има по-малко опроводени магистрали, тогава PCIe интерфейса в графичния ускорител няма да може да се възползва от пълния капацитет на PCIe връзката, за който е бил предназначен. Ако пък слота е по-дълъг и съответно има повече опроводени магистрали, то излишъка от тях просто ще бъде пренебрегнат, по време на преговорния процес, между PCIe превключвателя и графичния адаптер в случая.

Както и да е, само защото разширителната платка и PCIe слота имат равна дължина, физически отговаряща на х16 връзка това не означава, че опроводените магистрали трябва да са със същия брой. Техният брой може да е по-малък и в този случай, излишните контакти на разширителната платка бе бъдат изключени (не употребени), а по време на стартирането на системата превключвателя и крайното устройство, ще се договорят само на базата на наличния брой използваеми магистрали, които ги свързват. Същото положение ще бъде и в случай на излишък от магистрали в една връзка – те просто няма да се използват, отново по решение на това, какво са се наговорили двете страни в процеса.

На (фиг. 9) горе, може да видите онагледени, разнообразните възможности и ситуации, при една PCIe връзка.

Преговорния процес за широчината на всяка PCIe връзка, въвежда непозната до сега гъвкавост, на системно ниво, позволяващо осъществяването на нови дизайнерски решения при проектирането на дънните платки и системите, като цяло. Разбира се, от гледна точка на крайния потребител, тези нововъведения в скования и подреден до сега свят на периферната шина, може да бъдат малко объркващи – различни слотове, различен брой опроводени PCIe магистрали и т.н.

Най-бързия пример е със SLI системите – два графични адаптера в такава ситуация, трябва да споделят обща х16 връзка, разделена физически между слотовете на две х8 връзки и следователно всеки адаптер, ще се договори със PCIe превключвателя, че въпреки неговата опроводеност за х16 връзка, той ще може да се възползва от половината на този капацитет, просто защото толкова са наличните магистрали.



Връзка между стария и новия свят

В тази последна глава, ще разгледам един неизбежен въпрос, идващ със смяната на почти всеки стандарт – осъществяване на физическа съвместимост, между старата и нова инфраструктура. Причината за това е ясна – огромната наследствена база от крайни устройства, която не може за една нощ да бъде подменена или преработена за новия стандарт.

PCI-to-PCIe прикачването (bridging) превежда PCIe пакетите обратно в обикновена PCI сигнализация, позволявайки на старите устройства да работят, включени към новия PCIe интерфейс. Това свързване може да се осъществи на почти всяко място по веригата – от дънната платка до самото крайно устройство.

От nVidia, първи взеха решение да използват външна “мостова” схема за АGP-to-PCIe прикачване, под формата на HSI (High Speed Interconnect) чип, който се разполага на платката на крайното устройство (в случая - графичния адаптер). Тази мостова схема на всичкото отгоре е и двупосочна - може да превежда както АGP към PCIe, така и обратно. Първите графични ускорители на компанията, предназначени за PCIe, бяха от семейството GeForceFX и носеха означението PCX.

Разбира се способностите на HSI не спираха до тук. Конструкторите му са предвидили да компенсират, до колкото може, голямата разлика между капацитетите на AGPx8 стандарта и новия х16 PCIe, като повишиха скоростта на обмен на данни между графичния процесор и HSI до неофициалните AGPx12 и х16 капацитети. Освен това, скоростта с която този чип преработваше пакетите и сигналите бе завишена, за да се минимизира принудителното закъснение от наличието на допълнителен възел между графичния ускорител и останалата система, което изискваше реализацията на някакво охлаждане.

По-късно, от компанията вграждаха пряко кристала на HSI моста в корпуса на графичния процесор NV40, като така го пригаждаха за работа в PCIe система.

Въпреки това, свързаните по този начин към PCIe устройства, си остават по своята функционална същност, съобразени с техия първоначален интерфейс.

ATi, за разлика от техния основен конкурент, доста по-късно реализираха такова мостово прикачване, посредством техния Rialto чип. Той е по-прост по функционалност от решението на nVidia – може да превежда сигнали само в една посока, от PCIe към AGP. Компанията предпочете от началото, да предложи графични процесори с PCIe интерфейс, макар и с цената на повишени производствени разходи в резултат принудителната поддръжка на паралелен набор от AGP и PCIe продуктови линии.

Разбира се, графичните ускорители, не са единствените кандидати, жадни за по-бързата шина. Веднага след тях, Gigabit мрежовите адаптери се появиха за новия интерфейс - някои, като вградено решение на дънната платка, други като разширителни платки, съвместими с х1 PCIe интерфейса. RAID контролерите, звуковите адаптери, DVB, TV тунерите... всички те са на първа линия за собствена високоскоростна и достъпна серийна шина, без да се налага повече да я споделят с други устройства.

Така или иначе, скоро всички производители с налагането и утвърждаването на PCIe платформите по всички пазарни ниши, ще осъвременят продуктовите си линии, започвайки да предлагат преработени решения на съществуващата си база, както и нови такива.


Използвани източници:


- http://arstechnica.com/articles/paedia...
- http://www.amd.com/us-en/Processors...
- http://zone.ni.com/devzone/conceptd...







Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница