Hyperthreading & P4 Xeon

Milan Kerslager milan.kerslager na pslib.cz
Úterý Leden 14 21:47:15 CET 2003


On Tue, Jan 14, 2003 at 06:55:33PM +0100, Jarda Mikulík wrote:

> >>A to ja si myslim ze vykon 4 distributed.net bude na 2 procesorech s 
> >>HT (=4 virt. CPU) dohromady vyssi, nez na 2 CPU bez HT.
> >
> >    Tak nemyslete a zkuste to, muzete referovat vysledky...
> >
> >PS: Pokud je to castecne podobne vektorovemu poctu, budete IHMO docela 
> >(nelibe) prekvapen...
> 
> Já si moc na drahou platformu Intel nepotrpím. Ale z toho co prezentuje 
> Intel by to mělo být tak jak jsem napsal, nicméně jsem napsal "myslím" 
> protože to nevím přesně a dokud nebudou k dispozici testy nebo si to 
> neotestuju sám tak to nebude asi vědět nikdo.
> Pokud ale HT zpomaluje práci procesů nevím proč nás tedy potom Intel 
> krmí tím, že je opak pravdou...

Pokusim se to vysvetlit (cesky).

Finta HT je v tom, ze se vyuziji vicenasobne vyrobene komponenty v CPU.
CPU muze mit treba 2 FPU (matematicky koprocesor), aby vyuzil
superskalarity (tj. jsou-li za sebou 2 matematicke instrukce, ktere jsou
na sobe nezavisle [druha nepouzije pri vypoctu vystup te prvni], muze je
zpracovat procesor najednou, pripadne lze provadet instrukce
spekulativne dopredu).

Nicmene skutecne nasazeni 2 FPU uvnitr CPU nevede ke zdvojnasobeni
vykonu, protoze neni pravidlem aby byly za sebou porad matematicke
instrukce (a jeste k tomu nezavisle).

Protoze je tedy vytizeni techto redundantnich ("nadbytecnych") soucasti
CPU nizke, vytvoril Intel na svych CPU logiku, ktera umozni v jednom CPU
mit "jako" 2 (tj. HyperThreading). V tom pripade se ridici jednotky obou
virtualnich CPU "pretahuji" o zdroje, ktere uvnitr fyzickeho CPU jsou.

Z logiky vyplyva, ze pak bude vyuziti redundantnich casti CPU vyssi,
nicmene vykon nevzroste 2x, protoze se cely mechanismus obcas "zasekne"
(protoze jeden z virtualnich CPU obsadi vsechny zdroje [napr vsechny
FPU], ktere jsou k dispozici a druhy musi pak cekat, az budou uvolneny).

Prakticky je to potreba pak zmerit. Podle zde uvedeneho odkazu na studii
IBM je navyseni vykonu u multithreadovych aplikaci cca 40-50%, coz se
dalo cekat (tj. neni to navyseni o 100%, tj. dvojnasobne), ale neni to
take treba 10% nebo 1% pripadne -20% (blby pripad). Je to *pouze* ve
specialnich pripadech (viz dale).

Jenze to neni jednoduche - pokud zavedete HT a budete honit 1 aplikaci a
OS (Operacni system) nebude mit o HT paru, dojde k tomu, ze OS bude
prehazovat bezici program z jednoho virtualniho CPU na druhy. Dojde tedy
k znehodnoceni udaju v cache CPU (ta vyznamne urychluje praci s pameti,
coz je majoritni cinnost CPU).

Pokud bude OS vedet, ze mate HT, bude se snazit udrzet bezici proces
porad na stejnem virt. CPU a vyuzit tak maximalne cache mezi CPU a RAM
(tj. zamezit degradaci vykonu vlivem vylevani cache) a snizit take rezii
(toho prehazovani).

Jenze to porad neni ono. Nebude-li aplikace multithreadova (tj. aplikace
sama se sklada z vice procesu - 1 napr. obsluhuje grafiku, druhy pocita
scenu a treti komunikuje s protihracem), dojde k tomu, ze HT omezi
interni zdroje CPU (neco musi zbyt na druhy virtualni CPU). Takze narust
vykonu bude zaporny (vase aplikace pobezi jen na "polovine" CPU).

Pokud ovsem aplikace skutecne bude multithreadova (a vsechny thready
budou porad neco pocitat), podari se vam "vytezit" vice z vaseho CPU
(zvysite vyuzivani jeho redundantnich prvku - viz vyse).

Takze zaver je - Linux musi umet HT podporovat, jinak je to v pytli a
jeho nasazeni nepovede ke zvyseni vykonu a zaroven musite pouzivat
aplikace, kde to ma smysl (napr. zde uvedeny odkaz na Tomshardware, kde
pouzili specialni kodek na kodovani DivX).

V kazdem pripade cistokrevny SMP (tj. rekneme 2 procesorovy system) bude
rychlejsi, nez 1 CPU za zapnutym HT, ktery vytvori 2 virtualni CPU
(protoze cistokrevny SMP bude mit zkratka vice [dvojnasobek] systemovych
prostredku, ktere bude vyuzivat pri zpracovani strojovych instrukci).
Nicmene takovy cistokrevny SMP bude mit (samozrejme) nizssi vyteznost
komponent CPU (viz vyse) a bude take drazsi (o tyto komponenty a o
obvody, ktere kvuli tomu budou muset byt na zakladni desce navic, aby se
tam ty 2 CPU vesly).

Jinak pokud OS umi pracovat s vice CPU, pak samozrejme zapnutim v HT
BIOSu uvidi 2 "ruzne" CPU (cili to jakoby umi), protoze to je HW
zalezitost. Nicmene to neznamena, ze mate vyhrano (viz vyse).

Protoze implementace respektovani HT vedla k zasadnimu zasahu do
scheduleru (tj. casti OS, ktera se stara o pridelovani CPU jednotlivym
spustenym uloham v systemu), muze byt jeji pouziti (dnes) rizikove (muze
tam byt chybka).

Ve Windows je to slozitejsi - M$ tezko ted vyda kvuli HT novy OS, ale
muze to zachranit chytre napsana aplikace (viz ten DivX). Ale moc
systemove reseni to tedy zrejme neni (tedy pokud nemaji NT v jadre neco,
co se da pro HT a s nim spojene problemy pouzit - a to neni nemozne,
protoze "lepeni" procesu v SMP systemu na 1 CPU je obvykla snaha
navrharu scheduleru [tedy pokud jim neni milejsi jednoduchost]).

-- 
                        Milan Kerslager
                        E-mail: milan.kerslager na pslib.cz
                        WWW:    http://www.pslib.cz/~kerslage/


Další informace o konferenci Linux