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 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    dnes 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 5
    21.4. 19:11 | Komunita

    Thunderbird 128, příští major verze naplánovaná na červenec, přijde s nativní podporou Exchange napsanou v Rustu.

    Ladislav Hagara | Komentářů: 25
    21.4. 04:44 | Komunita

    Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL, Wikipedie). Novým vedoucím je Andreas Tille.

    Ladislav Hagara | Komentářů: 7
    KDE Plasma 6
     (71%)
     (10%)
     (2%)
     (18%)
    Celkem 678 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Jaderné noviny – 20. 3. 2014: Volatilní rozsahy paměti

    9. 4. 2014 | Luboš Doležel | Jaderné noviny | 3001×

    Akuální verze jádra: 3.14-rc7. Citáty týdne: Alan Cox, Andrew Morton, David Miller. Volatilní rozsahy paměti a MADV_FREE.

    Obsah

    Akuální verze jádra: 3.14-rc7

    link

    Aktuální vývojová verze jádra je 3.14-rc7 vydaná 16. března. Linus už z toho má lepší pocit. Jediný týden a jaké změny přinese. Před týdnem, když jsem vytvářel rc6, jsem neměl dobrou náladu: ve vydání byla spousta změn a vnímal jsem to tak, že rc8 a možná i rc9 by byly reálnou možností. Teď uběhl týden a rc7 vypadá mnohem lépe. Aktuálně říká, že může jít o poslední -rc ve verzi 3.14.

    Stabilní aktualizace: řadu 3.12 nyní spravuje Jiří Slabý; jeho první vydání 3.12.14 vyšlo 14. března.

    Citáty týdne: Alan Cox, Andrew Morton, David Miller

    link

    Na bezpečnosti mi záleží, měli bychom práci odvádět pořádně. Máme tu další velký skok v nezbytnosti zabezpečení, který bude přinejmenší stejně velký jako skok mezi internetem typu „univerzita, všichni jsou hodní“ a internetem dneška.

    -- Alan Cox

    Ano, je to tak trochu hack, ale je to jednoduché a přímé a explicitní a zjevné. Škodu páchá nenápadná hackovitost.

    -- Andrew Morton

    Obvykle, když někdo říká „nemůžu“, tak mi to spíš zní jako "Rozhodl jsem se přestat snažit přemýšlet o tom, jak to vyřešit."

    -- David Miller

    Volatilní rozsahy paměti a MADV_FREE

    link

    Rozhraní „smrskávače“ [shrinker] v jádře umožňuje subsystému pro správu paměti informovat ostatní subsystémy o tom, že se paměti nedostává a měla by být nějaká paměť uvolněna, pokud je to jen možné. Objevily se různé pokusy o to přidat podobný mechanismus, který by umožnil jádru požádat procesy v uživatelském prostoru, aby pročistily paměť, ale všechny narazily kvůli známým problémům se složitostí a obecnou obtížností začleňování změn ve správě paměti. To ale nezabránilo vývojářům v tom, aby se o to pokoušeli; nedávno byly zaslány dva nové patche podobného ražení.

    Oba tyto patche implementují variaci na téma zvané volatilní rozsahy paměti. Tyto rozsahy představují oblasti v adresním prostoru procesu, které obsahují data, jež je možné v případě nutnosti regenerovat. V případě, že se jádru nebude dostávat paměti, tak si může vzít stránky z volatilního rozsahu, a to s jistotou, že se z toho proces používající danou paměť zotaví, třebaže se ztrátou výkonu. Dokud je ale paměti dostatek, tak nebudou volatilní rozsahy jádrem odebírány a data tam cachovaná mohou být volně používána aplikací.

    Většina práce na volatilních rozsazích je motivovaná snahou o vytvoření náhrady pro mechanismus ashmem z Androidu, který je s hlavní částí subsystému pro správu paměti lépe integrován. Pro tuto funkčnost se ale najde i jiné využití.

    Volatilní rozsahy

    link

    Během uplynulých let se objevila spousta verzí patchů pro volatilní rozsahy. Někdy byly implementovány pomocí systémového volání posix_fadvise(); jindy byly dodány do fallocate(). Další verze je zase přidávaly jako dodatečnou funkci do madvise(). 11. verze patche pro volatilní rozsahy se ale vydává úplně jiným směrem. Namísto toho přidává nové systémové volání:

    int vrange(void *start, size_t length, int mode, int *purged);
    

    V této podobě vrange() pracuje s length bajty paměti začínajícími na adrese start. Pokud je režim mode nastaven na VRANGE_VOLATILE, tak tento rozsah paměti bude označen jako volatilní. Pokud je naopak režim VRANGE_NONVOLATILE, pak je označení jako volatilní odstraněno. V tomto případě ale některé nebo všechny stránky dříve prohlášené za volatilní mohly být odebrány jádrem; v takovém případě je *purged nastaveno na nenulovou hodnotu na znamení toho, že předchozí obsah paměti už není k dispozici. Je-li *purged nulové, tak aplikace ví, že obsah paměti není ztracen.

    Proces může nadále přistupovat k paměti ve volatilním rozsahu. Pokud se pokusí přistoupit ke stránce, která byla odebrána jádrem, tak dostane signál SIGBUS na znamení toho, že stránka je pryč. Proto programy, které jsou na přijetí tohoto signálu připravené, mohou volatilní rozsahy používat bez potřeby volat vrange() před přistoupením k paměti.

    Tato verze patche se od svých předchůdců liší dalším významným způsobem: fungují jen s anonymními stránkami, zatímco předchozí verze fungovaly pouze se systémem souborů tmpfs. Práce s anonymními stránkami pomáhá patch zjednodušit, jak je to jen možné, aby se zvětšila šance, že bude revidován a nakonec začleněn, ale bere si to svou daň: nemožnost pracovat s tmpfs znamená, že volatilní stránky nebudou vhodnou náhradou z ashmem. V plánu je podporovat případ, kdy se za pamětí skrývá soubor (což kód zesložiťuje), ale až jakmile bude panovat shoda ohledně zákadního patche.

    Interně pracuje vrange() na úrovni virtuální oblasti paměti (virtual memory area, VMA). Všechny stránky v rámci VMA buď jsou volatilní, anebo ne; VMA mohou podle potřeby být při voláních vrange() slučovány nebo rozdělovány. Díky tomu by vrange() mělo být rozumně rychlé, jelikož není nutné procházet každou stránku v rozsahu.

    MADV_FREE

    link

    Jiný způsob řešení podobného problému můžeme spatřit v patchi MADV_FREE. Tento patch přidává nový povel do stávajícího volání madvise():

    int madvise(void *addr, size_t length, int advice);
    

    Podobně jako vrange() také madvise() pracuje s rozsahem paměti určeným volajícím; to, co se dělá, je rozlišeno argumentem advice. Volající může použít MADV_SEQUENTIAL, aby řekl jádru, že ke stránkám v tomto rozsahu bude přistupováno sekvenčně, nebo MADV_RANDOM, aby řekl jádru pravý opak. Volání MADV_DONTNEED způsobí, že jádro okamžitě převezme určené stránky a zahodí jejich obsah.

    Nová operace MADV_FREE se podobá MADV_DONTNEED, ale je tu jeden důležitý rozdíl. Namísto okamžitého odebrání stránek je toto volání označí k „pozdějšímu uvolnění“ někdy v budoucnu. Pokud by jádru začala docházet paměť, pak právě takto označené stránky by byly jádrem odebírány jako první; pokud se aplikace pokusí takovou stránku použít po jejím odebrání, tak jádro poskytne novou stránku plnou nul. Pokud je ale paměti dostatek, tak zůstanou stránky označené pomocí MADV_FREE na místě; další přístup k těmto stránkám odstraní příznak přidaný přes MADV_FREE a data budou ve stavu jako před voláním madvise().

    Aplikace nemá jak zjistit, zda nebyl obsah stránek odstraněn, aniž by prozkoumala obsažená data. Proto by program mohl implementovat něco jako volatilní rozsahy tak, že si na začátek každé stránky před použitím MADV_FREE umístí strukturu, jež dovede poznat, a před přístupem k dalším datům by si ověřil, že je struktura stále na svém místě. To se ale nezdá být zamýšleným způsobem používání.

    MADV_FREE se zdá být zaměřené na implementace alokátorů paměti v uživatelském prostoru. Kdykoliv aplikace uvolní sadu stránek, tak alokátor použije MADV_FREE, aby jádru oznámil, že na obsahu stránek už nezáleží. Pokud by aplikace ve stejném rozsahu rychle alokovala více paměti, tak se použijí stejné stránky, tudíž se vyhne režii uvolňování stránek a nulování nových. Ve zkratce je MADV_FREE způsobem, jak říci "Na datech v tomto rozsahu mi nezálěží, ale brzo možná tento rozsah opětovně použiji."

    Stojí za zmínku, že MADV_FREE je již podporován na jádrech BSD, takže na rozdíl od vrange() by nešlo o funkci specifickou pro Linux. Pochopitelně by to znamenalo zlepšení přenositelnosti programů, které tuto funkci na BSD systémech používají.

    V době psaní tohoto textu se žádnému z patchů nedostalo příliš reakcí. Ke skutečnému revidování pravděpodobně dojde až na letošním Linuxovém sumitu o systémech souborů a správě paměti, který začíná 24. března.

           

    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ář

    10.4.2014 14:01 Honz
    Rozbalit Rozbalit vše Re: Jaderné noviny – 20. 3. 2014: Volatilní rozsahy paměti
    Termín Ashmem mi připmíná Cimrmanovu báseň s tajemným názvem Ažmimá...
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.