Přímý přístup do paměti - Direct memory access

Přímý přístup k paměti ( DMA ) je funkce počítačových systémů, která umožňuje určitým hardwarovým subsystémům přístup do hlavní systémové paměti ( paměti s náhodným přístupem ) nezávisle na centrální procesorové jednotce (CPU).

Bez DMA, když CPU používá naprogramovaný vstup/výstup , je obvykle plně obsazen po celou dobu operace čtení nebo zápisu, a proto není k dispozici pro provádění jiné práce. U DMA procesor nejprve zahájí přenos, poté provede další operace, zatímco přenos probíhá, a po dokončení operace nakonec obdrží přerušení od ovladače DMA (DMAC). Tato funkce je užitečná kdykoli, když CPU nedokáže držet krok s rychlostí přenosu dat, nebo když CPU potřebuje vykonávat práci při čekání na relativně pomalý přenos dat I/O. Mnoho hardwarových systémů používá DMA, včetně řadičů diskových jednotek , grafických karet , síťových karet a zvukových karet . DMA se také používá pro přenos dat uvnitř čipu ve vícejádrových procesorech . Počítače, které mají kanály DMA, mohou přenášet data do a ze zařízení s mnohem menší režií CPU než počítače bez kanálů DMA. Podobně může zpracovávací prvek uvnitř vícejádrového procesoru přenášet data do a ze své místní paměti, aniž by zabíral čas procesoru, což umožňuje souběžný výpočet a přenos dat.

DMA lze také použít pro kopírování nebo přesouvání dat v paměti „z paměti do paměti“. DMA může uvolnit nákladné paměťové operace, jako jsou velké kopie nebo operace shromažďování dat , z CPU na vyhrazený modul DMA. Příkladem implementace je technologie I/O Acceleration Technology . DMA je zajímavý pro počítačové architektury typu síť na čipu a v paměti .

Zásady

Třetí strana

Základní deska z NeXTcube počítače (1990). Dva velké integrované obvody pod středem obrazu jsou řadič DMA (l.) A - neobvyklý - speciální dedikovaný řadič DMA (r.) Pro magnetooptický disk používaný místo pevného disku v první řadě tento počítačový model.

Standardní DMA, také nazývaná DMA jiných výrobců, používá řadič DMA. Řadič DMA může generovat adresy paměti a iniciovat cykly čtení nebo zápisu z paměti. Obsahuje několik hardwarových registrů, které může CPU zapisovat a číst. Patří sem registr adres paměti, registr počtu bajtů a jeden nebo více řídicích registrů. V závislosti na tom, jaké funkce ovladač DMA poskytuje, mohou tyto řídicí registry určit určitou kombinaci zdroje, cíle, směru přenosu (čtení z I/O zařízení nebo zápis do I/O zařízení), velikost přenosová jednotka a/nebo počet bytů k přenosu v jedné sérii.

K provedení operace vstupu, výstupu nebo z paměti do paměti inicializuje hostitelský procesor řadič DMA s počtem přenesených slov a adresou paměti, která se má použít. CPU poté přikáže perifernímu zařízení zahájit přenos dat. Řadič DMA pak poskytuje adresy a řídicí a čtecí/zapisovací řádky do systémové paměti. Pokaždé, když je bajt dat připraven k přenosu mezi periferním zařízením a pamětí, řadič DMA zvyšuje svůj interní registr adres, dokud není přenesen celý blok dat.

Zvládnutí autobusů

V systému masteringu sběrnice , známém také jako systém DMA první strany, může CPU a periferním zařízením přidělit řízení paměťové sběrnice. Tam, kde se periferie může stát masterem sběrnice, může přímo zapisovat do systémové paměti bez zapojení CPU a podle potřeby poskytovat adresu paměti a řídicí signály. Musí být provedena určitá opatření, aby se procesor dostal do stavu pozastavení, aby nedošlo ke sporu o sběrnici.

Provozní režimy

Burst režim

V režimu série je celý blok dat přenesen v jedné souvislé sekvenci. Jakmile je řadiči DMA CPU udělen přístup k systémové sběrnici, přenese všechny bajty dat v datovém bloku před uvolněním řízení systémových sběrnic zpět do CPU, ale učiní CPU neaktivní po relativně dlouhou dobu. Tento režim se také nazývá „Režim přenosu bloku“.

Režim krádeže cyklu

Kradení cyklus režim se používá v systémech, ve kterých CPU by nemělo být zakázáno na délku času potřebného k roztržení režimy přenosu. V režimu krádeže cyklu získává řadič DMA přístup k systémové sběrnici stejným způsobem jako v režimu shluku pomocí signálů BR ( Bus Request ) a BG ( Bus Grant ) , což jsou dva signály ovládající rozhraní mezi CPU a Ovladač DMA. V režimu krádeže cyklu je však po jednom bajtu přenosu dat řízení systémové sběrnice odsuzováno na CPU prostřednictvím BG. Poté je nepřetržitě znovu požadován prostřednictvím BR, přičemž se přenáší jeden bajt dat na požadavek, dokud není přenesen celý blok dat. Neustálým získáváním a uvolňováním řízení systémové sběrnice řadič DMA v podstatě prokládá přenosy instrukcí a dat. CPU zpracuje instrukci, poté řadič DMA přenese jednu datovou hodnotu atd. Data nejsou přenášena tak rychle, ale CPU není nečinný tak dlouho, jako v režimu shluku. Režim krádeže cyklu je užitečný pro ovladače, které monitorují data v reálném čase.

Transparentní režim

Transparentní režim potřebuje nejvíce času k přenosu bloku dat, ale je to také nejefektivnější režim z hlediska celkového výkonu systému. V transparentním režimu řadič DMA přenáší data pouze tehdy, když CPU provádí operace, které nepoužívají systémové sběrnice. Primární výhodou transparentního režimu je, že CPU nikdy nepřestane vykonávat své programy a přenos DMA je časově zdarma, zatímco nevýhodou je, že hardware potřebuje určit, kdy CPU nepoužívá systémové sběrnice, což může být složité . Toto se také nazývá „ skrytý režim přenosu dat DMA “.

Soudržnost mezipaměti

Nesoudržnost mezipaměti v důsledku DMA

DMA může vést k problémům s koherencí mezipaměti . Představte si CPU vybavené mezipamětí a externí pamětí, ke kterým mohou přistupovat zařízení přímo pomocí DMA. Když CPU přistoupí k umístění X v paměti, aktuální hodnota bude uložena do mezipaměti. Následné operace na X aktualizují kopii X v mezipaměti, ale ne verzi X na externí paměť, za předpokladu mezipaměti pro zpětný zápis . Pokud mezipaměť není vyprázdněna do paměti před dalším pokusem zařízení o přístup k X, zařízení obdrží zastaralou hodnotu X.

Podobně, pokud kopie X v mezipaměti není zneplatněna, když zařízení zapisuje novou hodnotu do paměti, pak CPU bude pracovat na zastaralé hodnotě X.

Tento problém lze při návrhu systému řešit jedním ze dvou způsobů: Systémy , které jsou v mezipaměti, implementují v hardwaru metodu, nazývanou sběrnice snooping , přičemž externí zápisy jsou signalizovány řadiči mezipaměti, který poté provede zneplatnění mezipaměti pro zápisy DMA nebo vyprázdnění mezipaměti pro DMA čte. Nekoherentní systémy to nechávají na softwaru, kde pak OS musí zajistit, aby byly řádky mezipaměti před spuštěním odchozího přenosu DMA vyprázdněny a znehodnoceny před přístupem k rozsahu paměti ovlivněnému příchozím přenosem DMA. OS se musí ujistit, že mezitím k rozsahu paměti nepřistupují žádná spuštěná vlákna. Druhý přístup zavádí určitou režii do operace DMA, protože většina hardwaru vyžaduje smyčku pro zneplatnění každého řádku mezipaměti jednotlivě.

Existují také hybridy, kde je sekundární mezipaměť L2 koherentní, zatímco mezipaměť L1 (obvykle na CPU) je spravována softwarem.

Příklady

JE

V původním počítači IBM PC (a navazujícím PC/XT ) existoval pouze jeden řadič Intel 8237 DMA schopný poskytovat čtyři kanály DMA (číslované 0–3). Tyto kanály DMA prováděly 8bitové přenosy (protože 8237 byl 8bitové zařízení, ideálně přizpůsobené architektuře CPU /sběrnice i8088 počítače), mohly adresovat pouze první ( i8086 /8088-standard) megabajt paměti RAM a byly omezené na adresování jednotlivých 64  kB segmentů v tomto prostoru (i když zdrojový a cílový kanál mohou adresovat různé segmenty). Řadič navíc mohl být použit pouze pro přenosy do/ze zařízení I/O rozšiřující sběrnice nebo mezi nimi, protože 8237 mohl provádět pouze přenosy z paměti do paměti pomocí kanálů 0 a 1, z toho kanál 0 v PC (& XT ) byla věnována dynamické obnově paměti . To zabránilo tomu, aby byl používán jako „ Blitter “ pro obecné účely , a pohyby blokových pamětí v PC, omezené obecnou rychlostí PIO CPU, byly velmi pomalé.

S počítačem IBM PC/AT rozšířená sběrnice AT (známější jako ISA nebo „Industry Standard Architecture“) přidala druhý řadič 8237 DMA, který poskytuje tři další, a jak to zdůrazňuje střety zdrojů s dodatečnou rozšiřitelností XT v rámci původní PC, tolik potřebné kanály (5–7; kanál 4 se používá jako kaskáda k prvním 8237). Registr stránek byl také přepojen tak, aby adresoval plný adresní prostor paměti 16 MB CPU 80286. Tento druhý řadič byl také integrován způsobem, který dokáže provádět 16bitové přenosy, když je jako zdroj dat a/nebo cíl použito I/O zařízení (protože ve skutečnosti zpracovává pouze data sama pro přenosy z paměti do paměti, jinak jednoduše řízení toku dat mezi ostatními částmi 16bitového systému, čímž je šířka jeho vlastní datové sběrnice relativně nehmotná), zdvojnásobení datové propustnosti při použití horních tří kanálů. Kvůli kompatibilitě byly spodní čtyři kanály DMA stále omezeny pouze na 8bitové přenosy, a zatímco přenosy z paměti do paměti byly nyní technicky možné kvůli uvolnění kanálu 0 z nutnosti zvládnout aktualizaci DRAM, z praktického hlediska měly omezenou hodnotu, protože řadič měl následně nízkou propustnost ve srovnání s tím, co CPU nyní mohlo dosáhnout (tj. 16bitový, optimalizovanější 80286 běžící minimálně na 6 MHz, oproti 8bitovému řadiči uzamčenému na 4,77 MHz). V obou případech zůstal problém s hranicí segmentu 64 kB , přičemž jednotlivé přenosy nemohly procházet segmenty (místo toho „obepínat“ na začátek stejného segmentu) ani v 16bitovém režimu, ačkoli to byl v praxi spíše problém programování složitost než výkon, protože pokračující potřeba aktualizace DRAM (jakkoli zpracovaná) k monopolizaci sběrnice přibližně každých 15  μs zabránila použití velkých (a rychlých, ale nepřerušitelných) blokových přenosů.

Kvůli jejich zpožďovacímu výkonu (1,6  MB /s maximální 8bitová přenosová kapacita na 5 MHz, ale ne více než 0,9 MB/s v PC/XT a 1,6 MB/s pro 16bitové přenosy v AT kvůli sběrnici ISA režie a další rušení, jako je přerušení aktualizace paměti) a nedostupnost jakýchkoli rychlostních stupňů, které by umožňovaly instalaci přímých náhrad pracujících při rychlostech vyšších, než jsou standardní hodiny 4,77 MHz původního počítače, byla tato zařízení od konce 80. let minulého století fakticky zastaralá. Zejména nástup procesoru 80386 v roce 1985 a jeho kapacita pro 32bitové přenosy (i když velká vylepšení efektivity výpočtu adres a blokové paměti se u procesorů Intel po 80186 projevila tím , že přenosy PIO i přes 16bitovou sběrnici 286 a 386SX by stále mohly snadno překonat 8237), stejně jako vývoj dalšího vývoje ( EISA ) nebo náhrad ( MCA , VLB a PCI ) sběrnice „ISA“ s vlastními mnohem výkonnějšími subsystémy DMA (až maximum 33 MB/s pro EISA, 40 MB/s MCA, typicky 133 MB/s VLB/PCI) způsobilo, že původní ovladače DMA vypadaly spíše jako výkonový kámen než jako posilovač. Byly podporovány v rozsahu, v jakém jsou požadovány pro podporu vestavěného staršího hardwaru počítače na pozdějších počítačích. Kousky staršího hardwaru, který pokračoval v používání ISA DMA po 32bitových rozšiřujících sběrnicích, se staly běžnými, byly karty Sound Blaster, které potřebovaly zachovat plnou hardwarovou kompatibilitu se standardem Sound Blaster; a zařízení Super I/O na základních deskách, které často integrovaly vestavěný řadič disket , infračervený řadič IrDA, když je vybrán režim FIR (rychlý infračervený), a řadič paralelního portu IEEE 1284, když je vybrán režim ECP. V případech, kdy byly stále použity původní 8237 nebo přímé kompatibilní, může být přenos do nebo z těchto zařízení stále omezen na prvních 16 MB hlavní RAM bez ohledu na skutečný adresní prostor systému nebo množství nainstalované paměti.

Každý kanál DMA má registr 16bitové adresy a 16bitový registr počtu s ním spojený. Chcete -li zahájit přenos dat, ovladač zařízení nastaví adresu DMA kanálu a registry počtu společně se směrem přenosu dat, čtení nebo zápisu. Poté zadá hardwaru DMA zahájení přenosu. Po dokončení přenosu zařízení přeruší CPU.

Scatter-collect nebo vektorová I/O DMA umožňuje přenos dat do az více oblastí paměti v rámci jedné transakce DMA. Je ekvivalentní řetězení několika jednoduchých požadavků DMA. Motivací je vyložit z procesoru více úloh přerušení vstupu a výstupu a kopírování dat.

DRQ znamená požadavek na data ; DACK pro potvrzení dat . Tyto symboly, zobrazené na hardwarových schématech počítačových systémů s funkcí DMA, představují elektronické signální linky mezi procesorem a řadičem DMA. Každý kanál DMA má jeden řádek požadavku a jeden řádek potvrzení. Zařízení, které používá DMA, musí být nakonfigurováno tak, aby používalo oba řádky přiřazeného kanálu DMA.

16bitové ISA povolené masterování sběrnice.

Standardní přiřazení ISA DMA:

  1. Obnovení paměti DRAM (zastaralé),
  2. Uživatelský hardware, obvykle 8bitová zvuková karta DMA
  3. Řadič disket ,
  4. Pevný disk (zastaralý režimy PIO a nahrazený režimy UDMA ), paralelní port (port podporující ECP), některé klony SoundBlaster jako OPTi 928.
  5. Kaskádový ovladač PC/XT DMA,
  6. Pevný disk (pouze PS/2 ), uživatelský hardware pro všechny ostatní, obvykle 16bitová zvuková karta DMA
  7. Uživatelský hardware.
  8. Uživatelský hardware.

PCI

PCI architektura nemá centrální řadič DMA, na rozdíl od standardu. Místo toho může jakékoli zařízení PCI požadovat řízení sběrnice („stát se hlavním sběrnicí “) a požádat o čtení a zápis do systémové paměti. Přesněji řečeno, komponenta PCI vyžaduje vlastnictví sběrnice z řadiče sběrnice PCI (obvykle PCI hostitelský můstek a můstek PCI na PCI), který bude rozhodovat v případě, že několik zařízení požaduje vlastnictví sběrnice současně, protože současně může existovat pouze jeden master sběrnice. Když je komponentě uděleno vlastnictví, bude na sběrnici PCI vydávat běžné příkazy pro čtení a zápis, které budou vyžadovány řadičem sběrnice PCI.

Například na PC na bázi AMD Socket AM2 bude Southbridge přeposílat transakce do řadiče paměti (který je integrován v procesoru CPU) pomocí HyperTransport , který je následně převede na operace DDR2 a odešle je na Paměťová sběrnice DDR2. Výsledkem je, že přenos PCI DMA zahrnuje celou řadu kroků; to však představuje malý problém, protože zařízení PCI nebo samotná sběrnice PCI jsou řádově pomalejší než ostatní součásti (viz seznam šířek pásma zařízení ).

Moderní procesor x86 může využívat více než 4 GB paměti s využitím rozšíření fyzické adresy (PAE), 36bitového režimu adresování nebo nativního 64bitového režimu procesorů x86-64 . V takovém případě zařízení využívající DMA s 32bitovou adresovou sběrnicí není schopno adresovat paměť nad linkou 4 GB. Nový mechanismus DAC ( Double Address Cycle ), pokud je implementován na sběrnici PCI i na samotném zařízení, umožňuje 64bitové adresování DMA. V opačném případě by operační systém musel problém vyřešit buď pomocí nákladných dvojitých vyrovnávacích pamětí (nomenklatura DOS /Windows), známých také jako nárazové vyrovnávací paměti ( FreeBSD /Linux), nebo by mohl použít IOMMU k poskytování služeb překladu adres, pokud je k dispozici .

I/OAT

Jako příklad DMA enginu začleněného do univerzálního CPU některé čipové sady Intel Xeon obsahují DMA engine nazvaný I/O Acceleration Technology (I/OAT), který může uvolnit kopírování paměti z hlavního CPU a uvolnit tak další práci . V roce 2006 provedl vývojář linuxového jádra společnosti Intel Andrew Grover benchmarky pomocí I/OAT ke snížení počtu kopií síťového provozu a při přijímání pracovních zátěží nezjistil více než 10% zlepšení využití procesoru.

DDIO

Další výkonově orientovaná vylepšení mechanismu DMA byla zavedena v procesorech Intel Xeon E5 s funkcí Data Direct I/O ( DDIO ), která umožňuje „oknům“ DMA pobývat v mezipaměti CPU místo v systémové paměti RAM. Výsledkem je, že mezipaměti CPU se používají jako primární zdroj a cíl pro I/O, což umožňuje řadičům síťového rozhraní (NIC) DMA přímo do mezipaměti poslední úrovně (mezipaměť L3) místních procesorů a vyhnout se nákladnému načítání I/O data ze systémové RAM. Výsledkem je, že DDIO snižuje celkovou latenci zpracování I/O, umožňuje zpracování I/O provádět zcela v mezipaměti, zabraňuje tomu, aby se dostupná šířka pásma/latence RAM stala překážkou výkonu a může snížit spotřebu energie tím, že umožní RAM zůstane ve stavu s nízkým napájením delší.

AHB

V systémech na čipu a vestavěných systémech je typická infrastruktura systémové sběrnice komplexní sběrnice na čipu, jako je vysoce výkonná sběrnice AMBA . AMBA definuje dva druhy komponent AHB: master a slave. Rozhraní slave je podobné naprogramovaným I/O, přes které může software (běžící na integrovaném CPU, např. ARM ) zapisovat/číst I/O registry nebo (méně často) bloky místní paměti uvnitř zařízení. Zařízení může používat hlavní rozhraní k provádění transakcí DMA do/ze systémové paměti bez velkého zatížení CPU.

Proto zařízení s velkou šířkou pásma, jako jsou síťové řadiče, které potřebují přenášet obrovské množství dat do/ze systémové paměti, budou mít k AHB dva adaptéry rozhraní: hlavní a podřízené rozhraní. Důvodem je, že sběrnice na čipu, jako je AHB, nepodporují třístavení sběrnice ani střídání směru žádné linky na sběrnici. Stejně jako PCI není vyžadován žádný centrální řadič DMA, protože DMA je bus-mastering, ale v případě více masterů přítomných v systému je vyžadován arbitr .

Interně je v zařízení obvykle přítomen vícekanálový modul DMA k provádění více souběžných operací scatter-collect, jak je naprogramováno softwarem.

Buňka

Jako příklad použití DMA v multiprocesorovém systému na čipu obsahuje procesor IBM/Sony/Toshiba DMA engine pro každý ze svých 9 procesorových prvků včetně jednoho prvku Power processor (PPE) a osmi synergických procesorových prvků (SPE) . Protože pokyny pro načítání/ukládání SPE mohou číst/zapisovat pouze svou vlastní lokální paměť, SPE zcela závisí na přenosu dat do a z hlavní paměti a lokálních pamětí jiných SPE na DMA. DMA tedy funguje jako primární prostředek pro přenos dat mezi jádry uvnitř tohoto procesoru (na rozdíl od architektur CMP s koherentní mezipamětí, jako je zrušený univerzální GPU Intel , Larrabee ).

DMA in Cell je plně koherentní s mezipamětí (všimněte si však, že místní obchody SPE provozované DMA nepůsobí jako globálně koherentní mezipaměť ve standardním smyslu ). Jak pro čtení ("get"), tak pro zápis ("put") může příkaz DMA přenášet buď jednu oblast bloku o velikosti až 16 KB, nebo seznam 2 až 2048 takových bloků. Příkaz DMA je vydán zadáním dvojice lokální adresy a vzdálené adresy: například když program SPE vydá příkaz DMA put, specifikuje jako zdroj adresu vlastní lokální paměti a adresu virtuální paměti (ukazuje na buď hlavní paměť, nebo lokální paměť jiného SPE) jako cíl, společně s velikostí bloku. Podle experimentu dosahuje efektivní špičkový výkon DMA v buňce (3 GHz, při rovnoměrném provozu) 200 GB za sekundu.

Potrubí

Procesory s pamětí scratchpad a DMA (jako jsou procesory digitálního signálu a procesor Cell ) mohou těžit ze softwaru, který překrývá operace paměti DMA se zpracováním, pomocí dvojité vyrovnávací paměti nebo vícenásobného načítání. Například paměť na čipu je rozdělena do dvou vyrovnávacích pamětí; procesor může pracovat s daty v jednom, zatímco modul DMA načítá a ukládá data do druhého. To umožňuje systému vyhnout se latenci paměti a využívat přenosy shluků na úkor potřeby předvídatelného vzoru přístupu do paměti .

Viz také

Poznámky

Reference

externí odkazy