abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 17:55 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE.

    Ladislav Hagara | Komentářů: 0
    včera 14:55 | IT novinky

    Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.

    Ladislav Hagara | Komentářů: 10
    včera 11:44 | Zajímavý software

    NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    včera 10:55 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.

    Ladislav Hagara | Komentářů: 0
    6.6. 20:55 | IT novinky

    IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.

    Ladislav Hagara | Komentářů: 0
    6.6. 10:44 | Zajímavý článek

    Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.

    Ladislav Hagara | Komentářů: 41
    6.6. 01:00 | Nová verze

    Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    6.6. 00:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    5.6. 16:44 | IT novinky

    Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.

    Ladislav Hagara | Komentářů: 10
    5.6. 10:44 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.

    Ladislav Hagara | Komentářů: 0
    Rozcestník

    Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky

    6. 7. 2016 | Redakce | Jaderné noviny | 3049×

    Stav vydání jádra. Citáty týdne: Linus Torvalds, projekt Google Brillo. Virtuálně mapované jaderné zásobníky.

    Stav vydání jádra

    Současný vývojový kernel má označení 4.7-rc4, vydán byl 19. června. Linus řekl, že je „celkem malý“ a neobsahuje „nic moc znepokojujícího“. Vývojový cyklus postupuje kupředu s obvyklými druhy změn. „Statistiky vypadají úplně normálně: dvě třetiny tvoří ovladače, zbytek jsou z poloviny aktualizace architektury a z poloviny všechno ostatní (menší aktualizace souborových systémů, nějaká dokumentace a drobné patche)."

    Stabilní aktualizace: minulý týden žádné nevyšly.

    Citáty týdne

    Výkon není něco, co by se dalo přidat potom. Pokud první verze patche není dost výkonná, neměli bychom ji považovat za hotovou.

    -Linus Torvalds

    Všechna zařízení s Brillo – včetně těch již uvedených na trh – budou používat jádra sestavená z jediného společného stromu, který následuje aktuální LTS upstream. To eliminuje jednu z kombinačních testovacích proměnných (verze jádra), protože bude stejná na všech zařízeních. Vzhledem k tomu, že aktualizace jádra každého zařízení bude třeba tak jako tak testovat, na vyžadovaném testování každého zařízení se nic nemění, naopak získáme funkce, bezpečnostní aktualizace a opravy chyb při mnohem menším vloženém úsilí.

    Jaderný tým Brillo bude ve společném jádře Brillo průběžně doplňovat změny LTS jádra z ustreamu a záplaty pro Android; také bude pomáhat s přísunem patchů pro porty konkrétních výrobců. Ti již nebudou muset trávit čas backportováním upstreamu a změn specifických pro Android do několika stromů a verzí jádra pro různé konkrétní produkty.

    -Projekt Google Brillo plánuje dělat věci zdánlivě jinak.

    Virtuálně mapované jaderné zásobníky

    Zásobník v linuxovém jádře je dost možná slabým místem návrhu systému. Je tak malý, že jaderný vývojáři si neustále musejí dávat pozor, co na zásobník ukládají, aby nedošlo k jeho přetečení. Jenže ono k tomu dochází i tak, i když široko daleko není žádný útočník, který by se snažil přetečení zásobníku si vynutit – a jak nedávno demonstroval Jann Horn, útočníci mají důvody o to usilovat. Pokud k přetečení dojde, jádro je tak špatně umístěno, že problém nezaregistruje, natož že by mohlo nějak reagovat. V průběhu historie jádra se zásobník příliš nezměnil, ovšem poslední práce mají potenciál učinit zásobník o poznání robustnějším.

    Jak se pracuje se zásobníky ve stávajících jádrech

    Každý proces má svůj vlastní zásobník, který používá, běží-li v jádře. V současných jádrech má tento zásobník 8 KB nebo (na 64bitových systémech) 16 KB paměti. Zásobník se nachází v přímo mapované paměti jádra, takže musí být fyzicky souvislý. Tento požadavek může být problematický sám o sobě, protože jak dochází k fragmentaci paměti, může být nalezení dvou nebo čtyř fyzicky souvislých stránek složité. Využití přímo mapované paměti také vylučuje použití ochranných stránek (guard pages) – nepřístupných stránek, které by zachytily přetečení zásobníku – protože přidání ochranné stránky by vyžadovalo zabrání skutečné fyzické stránky paměti.

    V důsledku neexistuje přímá indikace v případě, že k přetečení dojde. Místo toho přetékající zásobník prostě přepíše jakoukoli paměť, která se nachází pod alokovaným rozsahem (pod proto, že zásobník na většině architektur roste směrem dolů). Přetečení se dá detekovat umístěním kanárků na zásobník a vývojářské nástroje umožňují sledovat využití zásobníku. Ale pokud je na produkčním systému přetečení vůbec detekováno, bývá to většinou příliš pozdě po dané události a poté, co došlo ke škodám neznámého rozsahu.

    Aby toho nebylo málo, velmi důležitá datová struktura – struktura thread_info – je umístěna ve spodní části zásobníku. Takže pokud dojde k přetečení jaderného zásobníku, jako první bude přepsána právě struktura thread_info, která poskytuje přístup téměř ke všemu, co jádro o běžícím procesu ví. Asi netřeba dodávat, že tohle činí přetečení zásobníku pro útočníky o to zajímavějším: je těžké odhadovat, co se bude nacházet v paměti pod zásobníkem, ale vlastnosti struktury thread_info jsou dobře známé.

    Snad nikoho nepřekvapí, že jaderní vývojáři velmi tvrdě pracují na tom, aby přetečením zabránili. Podrobně zkoumají (obvykle pomocí automatických proměnných) alokace na zásobníku a rekurze obecně není povolena. Ale překvapení mohou mít mnoho podob, od nedbalé deklarace proměnných po nečekaně hluboko zanořená volání funkcí. K takovým problémům je zvláště náchylný subsystém úložišť, kde se mohou libovolně kupit souborové systémy, technologie úložišť a síťový kód. Tento typ překvapení vedl k rozšíření zásobníku na jádrech architektury x86-64 na 16 KB ve vydání 3.15, jenže zásobníky nelze zvětšovat donekonečna. Protože pro každý proces v systému existuje jeden zásobník, každé zvětšení velikosti se projeví podstatně vícekrát.

    Problém s přetékáním zásobníku zřejmě bude ještě nějakou dobu pro vývojáře výzvou, ale jádro by mělo umět reagovat lépe, když už k přetečení dojde. Klíčem k řešení tohoto problému je, jak ukazuje sada patchů pro virtuálně mapované zásobníky Andyho Lutomirského, změna způsobu alokace jaderných zásobníků.

    Virtuálně mapované zásobníky

    Téměř veškerá paměť, ke které jádro přistupuje přímo, je přístupná skrze adresy v přímo mapovaném rozsahu. Tento rozsah je velkým kusem adresního prostoru, který je mapován do fyzické paměti jednoduše, lineárně, takže v praxi to vypadá, jakoby jádro pracovalo přímo s fyzickými adresami paměti. Na 64bitových systémech se takto mapuje veškerá paměť; naopak 32bitové systémy nedovedou takto mapovat veškerou paměť, která se na současných systémech nachází, takže je třeba to dělat poněkud složitěji.

    Linux je ovšem systém s virtuální pamětí, takže jádro používá pro přístup k paměti virtuální adresy i v přímo mapovaných oblastech. Jak už to bývá, jádro rezervuje další rozsah adres pro virtuálně mapovanou paměť; tento rozsah se použije, dojde-li k mapování paměti pomocí vmalloc(), a tak se nazývá „rozsah vmalloc“ (vmalloc range). Alokované oblasti v tomto rozsahu jsou spojovány po stránkách za chodu a nejsou fyzicky souvislé. Tradičně se tato oblast používá k získání relativně velkého kusu paměti, který musí být virtuálně souvislá, ale může být fyzicky rozptýlená.

    Neexistuje (téměř! – viz níže) žádný důvod, proč by zásobníky jádra měly být fyzicky souvislé, takže by v zásadě mohly být alokovány jako jednotlivé stránky a mapované do rozsahu vmalloc. Tím by se odstranilo jedno z největších použití (fyzicky souvislých) alokací v jádru, díky čemuž by systém při fragmentované paměti byl robustnější. Také by to umožnilo umístění nepřístupných ochranných stránek kolem alokovaných zásobníků bez zbytečného plýtvání pamětí (protože vše, co je potřeba, je položka v tabulce stránek), což by jádru umožnilo okamžitě detekovat přetečení alokovaného zásobníku. Andyho patch dělá právě toto – alokuje jaderné zásobníky v rozsahu vmalloc. Když už byl u toho, přidal také elegantní zacházení s přetečením: zobrazí se řádná chybová hláška a dojde k zabití příslušného procesu.

    Sada patchů sama o sobě je relativně jednoduchá, většina patchů se zabývá nepříjemnými specifiky jednotlivých architektur, což je potřeba, aby patch set správně fungoval. Vypadá to na významné vylepšení jádra, recenze jsou vesměs pozitivní, ačkoliv zůstává několik zásadních, leč nevyřešených problémů.

    Nepříjemné detaily

    Jedním z nich je výkon. Podle Andyho se alokováním zásobníku v rozsahu vmalloc prodlouží vytvoření procesu pomocí clone() o 1,5 µs. Některé druhy zátěže jsou mimořádně citlivé na režii spojenou s vytvářením procesů a touto změnou by utrpěly, takže se asi není čemu divit, že na to Linus reagoval slovy, že „tento problém je třeba vyřešit dřív, než dojde k začlenění.“ Andy si myslí, že většina režie by se dala vyřešit zrychlením vmalloc() (který nikdy nebyl pořádně optimalizován na výkon). Linus místo toho navrhl udržovat malou cache, složenou z předem alokovaných zásobníků, pro každý procesor. V každém případě dal jasně najevo, že chce, aby se regrese vyřešila ještě před začleněním.

    Další možná režie, kterou se dosud nepodařilo přesně změřit, je nárůst počtu výpadků při překladu. Přímo namapovaná oblast využívá mapování obrovských stránek, takže se celé jádro (všechen kód, data a zásobníky) vejde do jediného záznamu v TLB (translation lookaside buffer). Rozsah vmalloc naopak vytvoří nové okno s využitím mapování jednotlivých stránek. Vzhledem k tomu, že reference na jaderné zásobníky jsou běžné, je možnost TLB miss reálná, pokud se k těmto zásobníkům přistupuje skrze rozsah vmalloc.

    Mezi další podstatné detaily patří to, že ačkoliv alokace z rozsahu vmalloc obsahují ochranné stránky, k jejich umístění dochází až po alokaci. Při běžné paměti na haldě dochází právě zde k překryvům. Protože však zásobníky rostou směrem dolů, dojde k překryvu paměti už před alokací. V praxi to znamená, že dokud je ochranná stránka umístěna na začátek rozsahu vmalloc, současný kód zajistí, aby se ochranné stránky nacházely mezi každými dvěma alokacemi, takže by starší stránka měla být právě tam. Ale vzhledem k tomu, že ochranné stránky jsou jedním z hlavních cílů této sady patchů, bude zapotřebí nějakých vylepšení, abychom si mohli být jisti, že se budou nacházet vždy na začátku každého zásobníku.

    Paměť mapovaná do rozsahu vmalloc má jedno specifické omezení: nedá se jednoduše použít pro I/O s přímým přístupem k paměti (DMA). To proto, že I/O očekává paměť fyzicky souvislou, a proto, že funkce mapování virtuálních adres na fyzické neočekávají adresy v tomto rozsahu. Dokud se žádný jaderný kód nepokouší provádět DMA ze zásobníku, nemělo by jít o problém. DMA ze zásobníku je problematický také z jiných důvodů, ale ukazuje se, že v jádře se nachází kód, který tak přesto činí. Ten bude potřeba před nasazením patche do praxe opravit.

    A konečně, jádra s touto sadou patchů budou schopna detekovat přetečení jaderných zásobníků, ale stále zde zůstává problém se strukturou thread_info, která se nachází vespod každého zásobníku. Překryv, který přepíše pouze tuto strukturu a nikoliv zásobník jako celek, nebude detekován. Řešením je strukturu thread_info zcela odstranit z jaderných zásobníků. Současná sada patchů toto zatím neumí, ale Andy slíbil, že se na tento problém podívá, jakmile patche budou přijaty.

    Přijetí můžeme očekávat, jakmile se podaří vyřešit současné problémy. Přidání schopnosti detekovat přetékající zásobníky a nakládat s nimi eliminuje zásadní vektor útoku a učiní z Linuxu bezpečnějším a robustnějším systémem. Na takové změny si těžko stěžovat.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    6.7.2016 08:46 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Současný vývojový kernel má označení 4.7-rc7, vydán byl 19. června.

    Já vím, že si čtenáři stěžovali, že jsou překlady pozadu, ale realitu byste předbíhat nemuseli. :-) Verze 4.7-rc7 ještě nevyšla, 19.6. vyšla -rc4.

    7.7.2016 01:12 ByCzech
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Dohnat a předehnat! :-D
    6.7.2016 22:32 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Zásobník se nachází v přímo mapované paměti jádra, takže musí být fyzicky souvislý. Tento požadavek může být problematický sám o sobě, protože jak dochází k fragmentaci paměti, může být nalezení dvou nebo čtyř fyzicky souvislých stránek složité.
    To je teda navrhovali dost špatně :-/. Resp se to jeví jako pěknej hack, když to při přechodu na vícestránkové stacky neudělali robustně.
    V důsledku neexistuje přímá indikace v případě, že k přetečení dojde.
    Znamenám si, pokud někdy vymyslím CPU architekturu, tak přidám range check registry ;-).
    Paměť mapovaná do rozsahu vmalloc má jedno specifické omezení: nedá se jednoduše použít pro I/O s přímým přístupem k paměti (DMA). To proto, že I/O očekává paměť fyzicky souvislou, a proto, že funkce mapování virtuálních adres na fyzické neočekávají adresy v tomto rozsahu.
    Jo když byli v Intel tak hloupí (nebo naopak marketingově vychcaní), že při přechodu na PCI neudělali nějakou scatter gather DMA engine jednotku ... :-(
    7.7.2016 07:18 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Mám dojem, že IOMMU zavedená kvůli izolaci PCI zařízení při virtualizaci řeší nesouvislou fyzickou paměť. Nebo by alespoň logické bylo, aby to uměla, když stejně musí všechny přístupy do paměti překládat.
    8.7.2016 05:47 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    To bylo k DMA nebo ke stacku? Stack by měl poslouchat normální MMU v procesoru. U DMA by ta IOMMU musela mít ještě něco, co přenese stránky paměti bez použití CPU. Ale i tak by prostě Intel zaspal, Naposled, kdy se DMA na x86 hodila bylo na ISA sběrnici a ani můj c2d žádnej takovej engine nemá.
    8.7.2016 06:34 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    To bylo k DMA. IOMMU se uplatní i při DMA, protože IOMMU je věc mimo CPU. A drobná poznámka v DMA-API-HOWTO o CONFIG_NEED_SG_DMA_LENGTH mi dává naději, že s IOMMU a DMA lze používat scatter-gather.
    8.7.2016 20:33 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Jo aha. Já to myslel tak, že kdyby už v době PCI udělali samostatnej řadič, co umí scatter-gather, tak by šla IOMMU nejdřív dělat softwarově a pak by to už jen šlo cestou vývoje do hardwarové IOMMU akcelerace. V reálu šla cesta tak, že pokud člověk nechtěl používat CPU na přenos dat, tak si musel pořídit PCI device s busmasterem a samozřejmě každej výrobce si naimplementoval vlastní šířky přenášených polí apod.

    7.7.2016 10:32 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Jo když byli v Intel tak hloupí (nebo naopak marketingově vychcaní), že při přechodu na PCI neudělali nějakou scatter gather DMA engine jednotku ... :-(
    Ono nejde jen o Intel, ale i o ostatní architektury, na kterých Linux běhá.
    8.7.2016 05:49 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    No právě ono to vypadá, že všichni ostatní to DMA mají :-D (to se tu tuším jednou Ponkrác rozčiloval, že DMA umí každej, ale bez ní to je ta pravá inženýřina). Minimálně to měly Sun workstationy se SPARCem (jedna PCI karta od nich to vyžaduje, bez DMA enginu to jede přes PCI tak maximálně 1MBps). Dokonce i blbej microblaze může mít DMA engine :-D.
    8.7.2016 12:30 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    No DMA řadič většinou mají, ale velmi často jen jednoduchý, který umí pracovat jen se souvislými bloky fyzické paměti. Jádro má API na alokaci souvislých DMA bufferů, které to řeší. Jenže některé drivery spoléhaly na to, že paměť na stacku je také fyzicky souvislá a lze ji tak použít pro DMA buffer přímo.
    8.7.2016 18:42 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Hele u microblaze nevím, ale tam je to softcore, takže si to můžeš vždycky patchnout. U ARMu (OMAP3) se dají DMA požadavky řetězit a můžeš dělat snad i šílenosti jako jedna strana inkrementace a druhá dekrementace (to si možná pletu s novějšíma, ale určitě se inkrementovat třeba o 100 bajtů).

    Jednoduchej (ale univerzální) copypaste měla PXA27x XScale a to je 12 let zpátky.
    10.7.2016 01:33 Atom321 | skóre: 20
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    No, zrovna EDMA na OMAPech je poměrně mocný nástroj. Je to stavěné na přenos dat z kamery do DSP a z DSP do framebufferu. Dají se s tím dělat psí kusy - např. rotovat bitmapy a podobně. Myslím, že dokonce podporuje virtuální adresaci jako takovou. Takže tam by určitě problém nebyl.

    I tak by s DMA scatter/gather musely umět pracovat ty drivery, což nejspíš neumějí, protože k tomu doteď nebyl důvod.
    little.owl avatar 7.7.2016 12:44 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Podpora scatter/gather na PCIe je zalezitost vlastnich zarizeni a limitace je spise na Linux DMA API, ktere predpoklada souvislou fyzickou pamet.
    A former Red Hat freeloader.
    8.7.2016 05:52 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    PCI(e) bus master není to samý co DMA engine. Bus master je na kartě, kdežto DMA engine je samostatná jednotka někde v čipsetu (v "jazyce" PCI by tomu odpovídala karta se dvěma PCI rozhraníma s busmasterem a nějakým jednoduchým bufferem - pozor velmi špatná analogie :-D).

    Jde o to, že některé PCI zařízení busmaster nemají (není povinný) a tak do nich musíš hezky cpát data byte po bajtu přes CPU.
    little.owl avatar 8.7.2016 23:41 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Ja netvrdim, ze je to DMA engine, ale ze nabizi scatter/gather mode. DMA bylo soucasti ISA sbernice a po zkusenostech se to uz do PCI(e) nedalo - bus-mastering je mnohem lepsi reseni - vas pozadavek pro nejaky centralni DMA engine nema moc smysl.
    A former Red Hat freeloader.
    9.7.2016 04:51 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Mám dva x86 "počítače" spojené PCI mostem. Ten sice umí na obou stranách bus master, ale jen jako reakci na zápis/čtení z druhé strany. Veškeré přenosy musí tedy obstarávat CPU. Na SPARCu ale byla speciální jednotka, která umožňovala zahájit přenos z jedné adresy na jinou. Tam tedy jenom stačilo, aby CPU nastartoval přenos v té jednotce.

    Neříkám, že by to musela být ISA implementace (to fakt ne, omezení na 0-16MB v RAM apod.), ale i na blbé memcpy by se taková jednotka hodila.
    little.owl avatar 9.7.2016 22:42 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Mám dva x86 "počítače" spojené PCI mostem. Ten sice umí na obou stranách bus master, ale jen jako reakci na zápis/čtení z druhé strany.
    A v cem je problem? Na jedne strane poslu blok dat, na strane druhe prijmu, pres PCI bus-master DMA.
    Veškeré přenosy musí tedy obstarávat CPU.
    Snad jen kontrolovat, vetsina toku by mela jit mimo CPU.

    Volani po dedikovanem DMA zarizeni je ozivovani konceptu, ktery se moc neosvedcil mimo specialisovane architektury. Prosadil se koncept, kdy sbernice bude podporovat pouze zakladni (non-)posted transakce, nebude mit definovanou topologii, ale zakladni bloky jako bridge a svym designem nebude hazet klacky pod nohy implementaci radice, od velmi primitivniho a levneho az i po nejaky obsahujici treba pokrocily DMA engine provadejici konverzi dat on-the-fly. Nad PCIe protokolem lze jednoduse implementovat genericke specialisovana rozsireni pro radice jako NVM Express pro PCIe SSD disky, ktere uz maji explicitni podporu pro scatter/gatter prenosy. V dobe, kdy brzy bude standard 8-16 CPU jader, je lepsi alokovat cast jedno jadra pro pokryti situace jednoducheho PCIe radice, a vyuzit MSI-X a memory-mapped IO k implementaci scatter/gather prenosu s prijatelnym overheadem.

    Intel nabizi Intel QuickData na Xeon, coz je v podstate DMA engine. Nakolik to funguje netusim, ale souvisejici I/O Acceleration Technology (IOAT) byla z kernelu po sedmi letech vyhozena, nebot to zpusobovalo korupci pameti, takze historie se nam zase tak nejak opakuje.
    Na SPARCu ale byla speciální jednotka, která umožňovala zahájit přenos z jedné adresy na jinou.
    Tim mate na mysli konkretne co? Sbus, ktery byl nakonec nahrazen PCI? IMHO, SPARC DMA engine standardne pripojeny na Sbus neumel scatter/gather transfery.
    Neříkám, že by to musela být ISA implementace (to fakt ne, omezení na 0-16MB v RAM apod.), ale i na blbé memcpy by se taková jednotka hodila.
    A proc? Na male bloky dat je optimalizovane memcpy (treba nad AVX2) vetsinou lepsi nez DMA, uz jen proto ze operuje nad cim dale vetsimi CPU cache a ne nad pomalou DDR a nemusite se starat o cache coherence. Velke datove transfery jsou zalezitosti I/O na PCIe se zabudovanym radicem, a pokud nekdo potrebuje kopirovat velke bloky v pameti beze zmeny pres CPU, ma nejspise hloupe navrzenou aplikaci.
    A former Red Hat freeloader.
    10.7.2016 00:45 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    A v cem je problem? Na jedne strane poslu blok dat, na strane druhe prijmu, pres PCI bus-master DMA.
    Ten bridge je jen pasivní překlad z jedné domény do druhé (žádné sdružování do bloků apod.). Procesor neumí vygenerovat přenos bloku dat, ale zapisuje jen slovo po slově. Takže místo třeba 1x 256B bloku se provede 64x 32bit transakcí. Transakce 32bit slova po slově dosáhne tak stěží 2MBps dohromady v obou směrech. S univerzálním DMA enginem by se posílaly bloky bezproblému.
    Snad jen kontrolovat, vetsina toku by mela jit mimo CPU.
    To by byla DMA, když je to memcpy na x86, tak je to prostě kopírovací smyčka, kde to dělá CPU.
    Volani po dedikovanem DMA zarizeni ...
    Tak ten DMA engine by klidně mohl bejt v čipsetu jako PCI device. Vtip je prostě v tom, že jediné zařízení, co neumí blokovej busmaster je CPU (s vyjímkami jako cache linka do RAM, ale to vlastně není PCI).

    Jj I/OAT, ale to je až v Xeonech, PCI bylo už v posledních 486 (SiS496/7 umí obsáhnout celej 4GB prostor).
    Tim mate na mysli konkretne co? Sbus, ktery byl nakonec nahrazen PCI? IMHO, SPARC DMA engine standardne pripojeny na Sbus neumel scatter/gather transfery.
    Hele tak to přesně nevím, ale ta karta je SunPCI II a měla do toho Sunu přidávat podporu pro Windowsy :-D. Je to normální PCI 64bit karta a funguje teda i na x86 kompu. Akorát ty přenosy jsou příšerně pomalý, pokud se maj posílat třeba komunikační pakety. Povrchně jsem zkoumal původní SPARC platformu a prej to mělo DMA engine, co prostě mohla říct sem do RAM zkopíruj 64kB dat z tohodle PCI regionu. To, že by to fungovalo i na PCI je pak logický předpoklad, aby ta karta vůbec mohla efektivně komunikovat.
    A proc? Na male bloky dat je optimalizovane memcpy (treba nad AVX2) vetsinou lepsi nez DMA, uz jen proto ze operuje nad cim dale vetsimi CPU cache a ne nad pomalou DDR a nemusite se starat o cache coherence.
    To je pravda, ale neznamená to, že to nejde udělat lépe.

    Mě teda přišlo, že se třeba pakety kopírujou v kernelu všude možně.
    a pokud nekdo potrebuje kopirovat velke bloky v pameti beze zmeny pres CPU, ma nejspise hloupe navrzenou aplikaci.
    No právě, že s inteligentním DMA přenosem můžeš třeba transponovat matici ;-) (proto furt nadávám na PXA Xscale, protože tam ani nešlo pootočit obraz na LCD o 90 stupňů - leda pixel po pixelu přes CPU).
    little.owl avatar 10.7.2016 15:50 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Ten bridge je jen pasivní překlad z jedné domény do druhé (žádné sdružování do bloků apod.). Procesor neumí vygenerovat přenos bloku dat, ale zapisuje jen slovo po slově. Takže místo třeba 1x 256B bloku se provede 64x 32bit transakcí. Transakce 32bit slova po slově dosáhne tak stěží 2MBps dohromady v obou směrech.
    Vam stale nedochazi, ze problem je na strane PCI zarizeni, ktere potrebuje prenaset velke bloky dat a pritom podporuje jen 32 bitovy prenos, ktery ma velkou rezii, a implementuje zlomek toho, co je mozne implementovat nad PCI a co zvlada i nejhloupejsi sitova karta za 10 dolaru. Soude podle toho, co popisujete, je lepsi propojit vase PC kabelem pres dve sitove karty a vas PCI bridge odnest do recyklacniho centra.
    S univerzálním DMA enginem by se posílaly bloky bezproblému.
    CPU jadro je velmi univerzalni, flexibilni a plne programovatelny DMA engine a jejich pocet v soucasnych procesorech utesene roste.
    Mě teda přišlo, že se třeba pakety kopírujou v kernelu všude možně.
    A mne prijde, ze se kopirovani snazi omezit.
    No právě, že s inteligentním DMA přenosem můžeš třeba transponovat matici ;-)
    Psal jsem:
    Volani po dedikovanem DMA zarizeni je ozivovani konceptu, ktery se moc neosvedcil mimo specialisovane architektury.
    a transponovat matici behem DMA prenosu je pomerne specializovana vec a opet bych to na PC hodil na AVX, pripadne na GPU. Pouzivam programovatelne DMA enginy na TI platformach jiz deset let, takze tusim co to prinasi v praxi, a proto jsem spise proti tomu, aby se to davalo do univerzalniho PC jako genericky blok. To ze ani Intel neni schopen v kernelu udrzovat dlohodobe plne funkcni podporu I/OAT me obavy jen potvrzuje.
    A former Red Hat freeloader.
    10.7.2016 16:58 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Možná vás bude zajímat, že poslední dobou se chystají obecné FPGA bloky s přístupem do paměti. Poslední generace PowerPC serverů je už má, prototypy už mají výrobci Aarch64 serverů, lidi od x86 a MIPS zatím mají jenom řeči (resp. Intel koupil Alteru). V případě Power8 FPGA tahá data přes PCIe skrze zvláštní řadič, který zajišťuje koherenci mezí cachí CPU a cachí FPGU.
    little.owl avatar 10.7.2016 17:23 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    To muze byt cesta, pouzivam roky FPGA PCI karty, na nichz lze implementovat i onen DMA engine a je dosti mozne, ze i soucasne GPU pujdou podobnym smerem. Reseni na PC vidim v generickem, flexibilnim a programovatelnem HW, ktery pak softwarove pokryje i specializovane pouziti, nikoliv ve specializovane HW jednotce.
    A former Red Hat freeloader.
    10.7.2016 17:36 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Jo to půjde, akorát FPGA je pomalý a v implementacích může nastat taková nekompatibilita, že to neušéfuje ani UEFI :-P.
    little.owl avatar 10.7.2016 17:57 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Pomale mi to neprijde, jen ponekud drahe a programovat je lze i v OpenCL, viz. treba Nallatech.
    A former Red Hat freeloader.
    10.7.2016 18:17 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Maximální rychlost sekvenční logiky je zhruba 500MHz, ale složitější věci maj i třeba jen 150MHz max.
    little.owl avatar 10.7.2016 21:29 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Za prve, je to jiz o neco rychlejsi. Za druhe, sila FPGA je v parallelnich algoritmech, na sekvencni algoritmy pouziji procesor. Za treti odkazovane karty zalozene na Alter Aria 10 integruji dual-core ARM Cortex-A9, ktery sdili radic pameti (DDR4) s FPGA, takze se limituji problemy s cache a lze to vhodne kombinovat.
    A former Red Hat freeloader.
    10.7.2016 22:38 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Je to rychlejší, ale sběrnici taktovanou třeba na 1066 MHz to stejně nejspíš nedá :-/. Sekvenční logikou myslím HDL pojem sekvenční/kombinační (prostě něco co má zpětné vazby).
    10.7.2016 17:35 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Vam stale nedochazi, ze problem je na strane PCI zarizeni, ktere potrebuje prenaset velke bloky dat a pritom podporuje jen 32 bitovy prenos, ktery ma velkou rezii, a implementuje zlomek toho, co je mozne implementovat nad PCI a co zvlada i nejhloupejsi sitova karta za 10 dolaru.
    Tak já bych taky radši, kdyby měl ten bridge vlastní buffer a busmasteroval si bloky. Ale už to, že existuje (a další verze implementoval dokonce Intel) ukazuje, že má PCI nedostatky.
    Soude podle toho, co popisujete, je lepsi propojit vase PC kabelem pres dve sitove karty a vas PCI bridge odnest do recyklacniho centra.
    Přesně tak, taky to bylo ze začátku o řád rychlejší :-D. Bohužel ten bridge je velmi rozšířený a je skoro všude.
    CPU jadro je velmi univerzalni, flexibilni a plne programovatelny DMA engine a jejich pocet v soucasnych procesorech utesene roste.
    Bohužel stále ne na x86 desktopu/notebooku :-(.
    A mne prijde, ze se kopirovani snazi omezit.
    Nedostatečně ;-).
    a transponovat matici behem DMA prenosu je pomerne specializovana vec a opet bych to na PC hodil na AVX, pripadne na GPU.
    V případě RAM→GPU je AVX plýtvání procesorového času. A GPU s rotací bitmapy je lepší mít rozdělenou na dva modulární HW.
    9.7.2016 12:04 majvan | skóre: 5 | blog: Fandime linuxu | Trenčín
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Mozem vediet, ako PCI specifikacia podporuje scatter gather prenosy?
    little.owl avatar 9.7.2016 22:45 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Jaderné noviny - 23. 6. 2016: Virtuálně mapované jaderné zásobníky
    Specifikace PCI scatter/gather prenosy primo nepodporuje, ale umoznuje je s prijatelnym overheadem implementovat.
    A former Red Hat freeloader.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.