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 00:11 | Nová verze

    Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.

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

    Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.4. 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 11
    26.4. 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 9
    26.4. 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 41
    25.4. 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 14
    25.4. 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 3
    25.4. 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    25.4. 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    25.4. 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 839 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Jaderné noviny - 22. 10. 2008

    25. 11. 2008 | Jirka Bourek | Jaderné noviny | 3297×

    Aktuální verze jádra: 2.6.27. Citáty týdne: Andres Salomon, Linus Torvalds, Hugh Dickins. Začleňovací okno 2.6.28, část druhá. Příčina chyby poškozující e1000e. Přepracování vmap().

    Tento článek je překladem z anglického originálu, a proto vychází se zpožděním.

    Obsah

    Aktuální verze jádra: 2.6.27

    link

    Začleňovací okno 2.6.28 je stále otevřené, takže momentálně není žádné vývojové jádro. Vizte článek níže, kde naleznete aktualizaci toho, co bylo ve vývojovém cyklu 2.6.28 začleněno.

    Současné stabilní jádro 2.6 je 2.6.27.2 vydané 18. října. Obsahuje přibližně tucet důležitých oprav. Před ním bylo vydáno 2.6.27.1 obsahující jedinou opravu zakazující dynamické sledování funkcí.

    Stabilní aktualizace pro jádra 2.6.25, 2.6.26 a 2.6.27 jsou v době psaní tohoto článku v procesu revidování; pravděpodobně budou vydána již v době, kdy toto budete číst.

    Citáty týdne: Andres Salomon, Linus Torvalds, Hugh Dickins

    link

    Toto přidává podporu pro touchpad na OLPC. Ten má spoustu hezkých vlastností, z nichž žádná není povolená, protože hardware je příliš zachybovaný. Místo toho ho používáme jako normální touchpad se spoustou workaroundů, které mají řešit jeho časté křeče. Změny vlhkosti, pot, alobalové spodní prádlo, připojení do zásuvky, pití, zlé kočky, ... to všechno způsobuje, že touchpad začne šílet.

    -- Andres Salomon by měl prodávat hardware

    Jo, jsem nabručený. Kontrola kvality během tohoto začleňovacího okna byla naprosto nechutná. Mám pocit, že si musím stěžovat na každé přetažení [pull], které udělám, protože lidé mají pocit, že další nové varování není problém. A úplně pokaždé je to nové varování způsobeno naprosto mizerným kódem.

    -- Linus Torvalds

    Mám obavu, že jakmile se objeví diskuze o bariérách a my je vložíme, budu naprosto paranoidní a bude velmi těžké vytřást ze mě potřebu dát bariéry úplně všude, a to včetně bariéry před a za každou bariéru až do nekonečna, abych se ujistil, že jsou to skutečně bariéry.

    -- Hugh Dickins

    Začleňovací okno 2.6.28, část druhá

    link

    V době psaní tohoto článku bylo od vydání 2.6.27 do hlavní řady jádra začleněno něco málo pod 6200 neslučovacích [non-merge] sad změn. Toto začleňovací okno by se mělo blížit ke svému konci, který bude okolo 24. října, takže již vcelku dobře vidíme, jak bude 2.6.28 vypadat. Změny viditelné pro uživatele začleněné od minulého týdne zahrnují:

    • Byly začleněny nové ovladače pro:

      • SPI čipy reálného času Maxim/Dallas DS3234
      • čipové sady rodiny VIA UniChrome
      • IO framebuffery Toshiba Mobile
      • USB telefony C-Media CM109
      • touchpad dodávaný na systémech OLPC XO
      • PCI karty Automata Sercos III (přes UIO)
      • USB sedmisegmentové LED displeje Delcom
      • obecná testovací a měřící USB zařízení
      • USB řadiče zařízení Freescale QE/CPM
      • USB spektrometry Vernier Software Technologies
      • NAND flash zařízení připojená přes GPIO
      • flash řadiče Freescale i.MX2 a i.MX3
      • OneNAND flash zařízení připojená k OMAP2/OMAP3
      • multifunkční řadiče Dialog DA9030/DA9034
      • multifunkční řadiče Texas Instruments TWL4030/TPS659x0
    • Strom ovladačů -staging byl přesunut do hlavní řady. Přináší s sebou nový příznak TAINT_CRAP a odpovídajícím způsobem poskvrněné ovladače pro:

      • data sbírající desky Meilhaus ME-4000
      • video řadiče Go 7007 ("nějaké podivné zařízení")
      • gigabitové ethernetové řadiče Agere ET-1310
      • bezdrátové USB karty Atmel at76c503/at76c505/at76c505a
      • neakcelerované 10Gb ethernetové karty Alacritech SLIC Technology
      • gigabitové ethernetové karty Alacritech IS-NIC
      • bezdrátové síťové adaptéry Winbond w35und
      • USB bezdrátové síťové adaptéry Prism 2.5 (ovladač, který obsahuje vlastní 802.11 stack)

      Také byl přidán modul pro potlačování echa a ovladač, který umožňuje předávání síťových paketů po USB spojení.

    • Byla začleněna spousta práce na grafickém ovladači Intel i915; tato práce zahrnuje subsystém pro správu GPU paměti Správce grafického zpracování [Graphics Execution Manager, GEM] a podporu pro "IGD OpRegion", která povoluje ACPI řízení podsvícení. Vypadá to, že jaderné nastavování režimu [kernel-based mode setting] to do 2.6.28 asi nestihne, ale většina zbytku velkého přepracování grafiky je nyní začleněna.

    • Způsob, kterým videoovladače čekají na vertikální zatemňovací cykly [vertical blank cycles], byl změněn tak, aby se omezila přerušení - a tím i spotřeba energie.

    • Patche pro škálování správy paměti Rika van Riela byly už konečně začleněny. Tyto patche oddělují správu anonymních, soubory zálohovaných a zcela neodstranitelných stránek, čímž eliminují spoustu zbytečného prohledávání stránek.

    • Další vylepšení VM způsobuje, že systém uvolní odkládací prostor stránky poté, co je stránka načtena zpět do RAM; to efektivně zvyšuje velikost swapu, který je v systému k dispozici.

    • Přepsaná vmap vrstva od Nicka Piggina by měla poskytnout významné zlepšení výkonu, obzvlášť když počet CPU v systému roste.

    • Obrovské stránky budou nyní zahrnuty ve výpisu paměti, čímž se zjednoduší ladění aplikací, které tyto stránky používají.

    • Mrazák kontejnerů [container freezer] byl začleněn. Systém nyní může zmrazit všechny procesy v kontejneru (kontrolní skupině) jako celku.

    • Virtualizační kód KVM nese mnoho vylepšení, včetně schopnosti přiřadit PCI zařízení hostům a podporu "Tukwila" procesorů od Intelu.

    • Kprobes jsou nyní podporovány architekturou SuperH.

    • Je zde nová volba při připojování ext3 (data_err=abort), která způsobí, že operace se souborovým systémem jsou zrušeny, pokud dojde k I/O chybám. Pokud tato volba není přítomna, zůstává staré chování (pokračuje se a je zapsána stížnost do systémového logu).

    • Vyvažování přerušení v jádře pro 32bitové x86 systémy bylo odstraněno. Tato vlastnost byla již nějaký čas označena za zastaralou (ve prospěch vyvažování z uživatelského prostoru).

    Změny viditelné jaderným vývojářům zahrnují:

    • Bylo začleněno mnoho patchů spojených se sledováním. Tyto zahrnují mechanismus sledovacích bodů [tracepoints], osazení vnitřního kódu plánovače, zlepšením schopnosti sledování funkcí ftrace, nové sledování zásobníků založené na ftrace, nové sledování bootu (initcall) založené na ftrace a nízkoúrovňový sledovací kód.

    • Prototyp sysctl funkce strategy() se změnil: byly odstraněny nepoužívané parametry name a nlen.

    • Podpora asynchronního I/O může být konfigurací z jádra odstraněna, což ušetří přibližně 7 kB prostoru na systémech, kde není AIO zapotřebí.

    • Jak bylo plánováno, device_create_drvdata() bylo přejmenováno na device_create() se stejnými parametry.

    • Nyní je mechanismus pro povolení a zakázání výstupu z volání pr_debug() a dev_dbg() pro každý modul zvlášť. Ovládá se přes virtuální soubor v debugfs. S touto změnou není spojen žádný soubor s dokumentací; instrukce, jak tuto vlastnost používat, lze najít v changelogu patche.

    • Nová dev_WARN() funkce

      dev_WARN(struct device *dev, char *format, ...);

      vypíše formátované varování společně s kompletním výpisem zásobníku. To umožní sbírat varování na kerneloops.org a zahrnovat je tam do hlášení.

    • Nová formátovací direktiva %pR umožní printk() a přátelům vypsat obsah struktur resource.

    • Je zde nová funkce, která má zjednodušit život autorům PCI ovladačů:

      static inline void *pci_ioremap_bar(struct pci_dev *pdev, int bar);

      Tato funkce remapuje celou PCI oblast I/O paměti podle argumentu bar.

    Vizte příští Jaderné noviny, kde najdete shrnutí posledních dnů začleňovacího okna 2.6.28

    Příčina chyby poškozující e1000e

    link

    Když se Jaderné noviny naposledy zabývaly chybou v e1000e, která poškozuje hardware, zdroj problému byl přinejmenším nejasný. Za pravděpodobného viníka byl považován problém v ovladači samotném, ale ti, kteří se ho pokoušeli vysledovat, si brzy uvědomili, že potřebují hledat i mimo ovladač. Po nějakou dobu byl zkoumán X server stejně jako mnoho dalších komponent systému. Když byl ale skutečný problém nalezen, ukázalo se, že šlo o překvapení pro všechny zúčastněné.

    Vysledování občasných problémů je obtížné. Když vedou tyto problémy ke zničení hardwaru, je jejich odhalení ještě obtížnější. I ti nejvíc odhodlaní testeři se většinou leknou, když je před nimi možnost, že budou muset svůj systém poslat zpět výrobci k opravě. Úkol vyhledat tento problém tedy spadl na Intel; technici se zamkli v laboratoři s plnou krabicí karet e1000e a pustili se do dělení historie jádra půlením, aby identifikovali patch, který problém způsobil. O nějaký čas (a spoustu zničených karet) později dělící proces ukázal nepravděpodobného viníka: sledovací framework ftrace.

    Vývojáři pracující na sledování obvykle investují mnoho snahy do toho, aby minimalizovali dopad svého kódu na výkonnost systému. I ten nejposlednější kousek režie běhu je pečlivě zkoumán a zlikvidován, pokud je to trochu možné. Obecným pravidlem je, že rozbití hardwaru znamená tak velkou úroveň režie, že to naprosto jasně překračuje přijatelné parametry. Vývojáři ftrace tedy, jakmile byli informováni o výsledku dělení, sami věnovali hodně snahy na to, aby zjistili, co se to děje.

    Jedna z možností, které ftrace nabízí, je jednoduché sledování volání funkcí; ftrace vypíše řádku s volanou funkcí (a tím, kdo ji volá) pokaždé, když k nějakému volání dojde. Toto sledování je zajištěno použitím starobylého profilovacího mechanismu zabudovaného v gcc (a většině ostatních unixových překladačů). Když je kód překládán s volbou -pg, překladač na začátek každé funkce vloží volání mcount(). Verze mcount(), kterou poskytuje ftrace, potom vypisuje všechny relevantní informace při každém volání.

    Jak bylo poznamenáno výše, vývojáři sledování se starají o režii. Na většině systémů je téměř jisté, že v daném čase nikdo nebude sledovat volání funkcí. Kdyby tedy byla mcount() volána i tak, znamenalo by to měřitelné zbrzdění systému. Programátoři ftrace tedy hledali způsob, jak tuto režii eliminovat, když jí není zapotřebí. Naivní řešení tohoto problému by mohlo vypadat nějak takto: místo vložení nepodmíněného volání mcount() přimět gcc, aby přidávalo takovýto kód:

    if (function_tracing_active)
        mcount();

    Jádro ale volá spoustu funkcí, takže i tato verze by znamenala znatelné zbrzdění; navíc by všemi těmi testy narostla velikost jádra. Preferovaný přístup tedy bývá jiný: patchování za běhu. Když se nepoužívá sledování funkcí, jádro přepíše všechna volání mcount() instrukcí no-op. Jak se tak stává, na současných procesorech je nicnedělání velmi optimalizovanou operací, takže režie několika no-op je téměř nulová. Když se někdo rozhodne sledování funkcí zapnout, jádro projde a patchuje všechna tato volání zpět.

    Patchování za běhu může vyřešit problém s výkonností, ale samo o sobě zavádí vlastní problém. Změna kódu pod běžícím jádrem je nebezpečná záležitost; je zapotřebí extrémní opatrnosti. Je nutné dávat pozor na to, aby jádro v daném čase nespouštělo daný kód, cache procesorů musí být zneplatněny a tak dál. Kvůli bezpečnosti je nutné zastavit všechny ostatní procesory v systému a počkat, dokud není patchování dokončeno. Konečným důsledkem je, že patchování kódu je drahá záležitost.

    Způsob, kterým bylo ftrace naprogramováno, znamenal, že každé odstranění volání mcount() se provedlo poté, co bylo objeveno pomocí skutečného zavolání mcount(). Nicméně, jak je zmíněno výše, patchování za běhu je velmi drahé, obzvláště pokud se dělá pro jedinou funkci. Proto ftrace vytváří seznam míst, odkud se mcount() volá, a později odstraní víc volání naráz. Tímto způsobem je cena za patchování významně redukována.

    Problém nyní spočívá v tom, že mezi tím, kdy si kód všimne volání mcount() a kdy se jádro dostane k jeho odstranění, se věci mohly změnit. Bylo by velmi nešťastné, kdyby chtělo jádro odstranit volání mcount(), které by na daném místě již neexistovalo. Aby bylo naprosto jisté, že nebudou poškozena nesouvisející data, používá kód ftrace k vložení no-op operaci cpmxchg. cmpxchg atomicky testuje obsah cílové paměti oproti tomu, co volající předpokládá, že v ní najde; v případě neshody je na daném místě ponechána původní hodnota. Do paměti se no-opy zapíší jedině v případě, že je současný obsah paměti volání mcount().

    To se zdá být poměrně bezpečné, ale selže to v jednom neobvyklém, nicméně důležitém případě. Jedním zjevným místem, kde může volání mcount() zmizet, jsou nahrávatelné moduly. To se samozřejmě může stát v případě, kdy je modul odstraněn, je zde ale také ještě jeden důležitý případ: jakýkoliv kód označený jako inicializační se odstraní ve chvíli, kdy je inicializace dokončena. Inicializační funkce modulu (a jakýkoliv jiný kód označený __init) tedy za sebou může zanechat přebytečný odkaz v seznamu "volání mcount(), která se mají odstranit", který si ftrace udržuje.

    Poslední díl skládačky pochází z tohoto malého faktu: na 32bitových architekturách sdílí paměť vrácená vmalloc() a ioremap() stejný adresový prostor. Obě funkce vytvářejí mapování ze stejného rozsahu adres. Prostor pro nahrávatelné moduly je alokován pomocí vmalloc(), takže veškerý kód modulu je k nalezení v tomto sdíleném prostoru. Ovladač e1000e přitom používá ioremap(), aby mapoval I/O paměť adaptéru a jeho NVRAM do jaderného adresového prostoru. Konečným výsledkem je tato osudná sekvence událostí:

    1. Modul je nahrán do systému. Součástí inicializace modulu je mnoho volání mcount(); místa, odkud tato volání pochází, se zaznamenají po pozdější patchování.

    2. Inicializace modulu je dokončena a __init funkce modulu je odstraněna z paměti. Adresový prostor, který obsazovala, je uvolněn pro pozdější použití.

    3. Ovladač e1000e mapuje svou I/O paměť a NVRAM do adresového prostoru nedávno používaného výše zmíněným inicializačním kódem.

    4. Ftrace se dostane k patchování položek nashromážděných v seznamu volání mcount(). Některé z těchto "volání" jsou však ve skutečnosti I/O paměť patřící e1000e.

    Vzpomeňme, že kód ftrace je při patchování velmi opatrný, používá cmpxchg, aby se vyhnul přepsání čehokoliv, co není volání mcount(). Nicméně, jak Steven Rostedt poznamenal ve svém shrnutí problému:

    cmpxchg nás mohlo ve většině případů zachránit (se štěstím) - ale s ioremapovanou pamětí to byla přesně ta špatná věc, kterou udělat - výsledky cmpxchg na zařízení jsou nedefinované (a pravděpodobně vedou k zápisu).

    Na konci je tedy zápis do špatného kousku I/O paměti - a zničené zařízení.

    Při zpětném ohlédnutí je tato chyba rozumně jasná a pochopitelná, ale není žádné překvapení, že trvalo tak dlouho ji najít. Mělo by se poznamenat, že ve skutečnosti zde byly dvě různé chyby. Jednou z nich byl pokus ftrace zapisovat do neplatného ukazatele. Druhá byla ale stejně důležitá: ovladač e1000e by nikdy neměl nechávat svůj hardware konfigurovaný v režimu, kde ho jediný zbloudilý zápis může změnit v těžítko. Jeden nikdy neví, kde se věci mohou pokazit; hardware by nikdy neměl být ponechán v takto zranitelném stavu, pokud je možné tomu zabránit.

    Dobrá zpráva je, že obě chyby byly opraveny. Hardware e1000e byl zamčen předtím, než bylo vydáno jádro 2.6.27 a aktualizace 2.6.27.1 vypíná dynamické ftrace sledování. Kód ftrace byl pro 2.6.28 významně přepsán; již nezaznamenává místa, kde se volá mcount() za běhu, již nepoužívá cmpxchg a, doufejme, obecně není schopný znovu způsobit takový chaos.

    Přepracování vmap()

    link

    Jaderná paměť je obvykle alokována v relativně malých kouscích - obvykle jde o jedinou stránku naráz. Jak velikost alokace roste, uspokojení této alokace fyzicky spojitou pamětí se postupně ztěžuje. Většina jádra je proto napsána s ohledem na to, aby se vyhnulo velkým spojitým alokacím. Jsou ale momenty, kdy musí být velká oblast paměti virtuálně spojitá, ale ne nezbytně fyzicky spojitá. Jedním příkladem je alokace prostoru pro nahrávatelné moduly; jakýkoliv modul by měl žít v jediném spojitém adresovém rozsahu, ale nikoho nezajímá, jak je tento rozsah rozvržen ve fyzické RAM. Pro případy, jako je tento, poskytuje jádro sadu funkcí jako vmalloc() a vmap().

    Funkce jako vmalloc() jsou dlouho známy tím, že je jejich použití poněkud drahé. Musí pracovat s jediným sdíleným (a omezeným) rozsahem adres a potřebují provádět změny v jaderné tabulce stránek. Změny tabulky stránek následně vyžadují vyprázdnění bufferu překladů adres [translation lookaside buffer, TLB], což je drahá operace na všech CPU. Jaderní vývojáři se tedy obecně pokoušeli vyhýbat používání těchto funkcí v částech jádra kritických pro výkon.

    Nick Piggin si však všiml, že nás výkonnostní charakteristiky vmalloc() a přátel dostihly. Adresový prostor vmalloc() je uchováván ve spojovém seznamu [linked list] a chráněn globálním zámkem, který neškáluje moc dobře. Skutečná cena ale spočívá v uvolňování oblastí v tomto prostoru; následující vyprázdnění TLB se musí provést meziprocesorovým přerušením všech CPU, každé z nich poté musí zahodit svůj vlastní TLB. Lidé obvykle nekupují víc CPU, pokud pro ně nemají víc práce, která se na nich má spustit, takže systémy s více procesory budou obecně provádět více mapování a uvolňování v oblasti vmalloc(). Jak systémy rostou, bude v nich více globálních vyprazdňování TLB, každé z nich vyruší více procesorů. Jinými slovy množství práce roste úměrně k druhé mocnině počtu procesorů - což znamená, že to nakonec všechno padne.

    Aby byly věci ještě horší, Nick má již dlouho sérii patchů, které mezi jinými hodně volají vmap(), aby mohly podporovat větší velikosti bloků ve vrstvě souborových systémů a cache stránek. Začlenění těchto patchů by významně zvýšilo čas, který systém stráví správou prostoru vmalloc(), což by nebyla dobrá věc. Zdá se tedy jako dobrý nápad nejprve opravit vmalloc(). Správu jaderných virtuálních alokací Nick skutečně v 2.6.28 vylepšil.

    Prvním krokem je zbavit se spojového seznamu a odpovídajícího globálního zámku. Pro sledování rozsahů dostupného adresového prostoru se místo toho používá červeno-černý strom; nalezení vhodné oblasti lze nyní provést bez nutnosti procházet dlouhý seznam. Strom je stále chráněn globálním zámkem, což naznačuje potenciál pro problémy se škálovatelností. Aby se této záležitosti vyhnul, vytváří Nickův patch oddělené seznamy malých adresových rozsahů pro každé CPU, které lze alokovat a uvolnit bezzámkovým způsobem. Aby se využilo této vlastnosti, je potřeba volat nové funkce:

    void *vm_map_ram(struct page **pages, unsigned int count, 
                     int node, pgprot_t prot);
    void vm_unmap_ram(const void *mem, unsigned int count);

    Volání vm_map_ram() vytvoří virtuálně spojité mapování pro dané pages (stránky). S tímto mapováním spojené datové struktury budou alokovány v daném NUMA node (uzlu); paměť bude mít ochranu specifikovanou v prot. S verzí patche, která byla začleněna do 2.6.28, lze z těchto seznamů pro jednotlivá CPU vytvořit mapování až 64 stránek.

    Všimněte si, že tyto funkce nealokují paměť, pouze vytvoří virtuální mapování pro danou sadu stránek. Jsou náhradou pro vmap() a vunmap(), ne pro vmalloc() a vfree(). Je pravděpodobně možné přepsat vmalloc(), aby tento mechanismus používal, ale to se nestalo. Volání vmalloc() tedy stále potřebuje získání globálního zámku.

    V této sadě je použit další trik, který využívají všechny jaderné funkce správy virtuálních adres. Nick si uvědomil, že není skutečně nutné vyprázdnit TLB v systému okamžitě poté, co je uvolněn rozsah adres. Vzhledem k tomu, že tyto adresy jsou systému vraceny zpět, žádný kód je poté nebude používat, takže nezáleží na tom, jestli TLB v procesoru obsahuje jejich neplatné mapování. Ve skutečnosti záleží pouze na tom, aby byla TLB pročištěna předtím, než se tyto adresy použijí někde jinde. Je tedy možné nechat odmapované oblasti hromadit a poté je všechny vyprázdnit jednou operací. To významně snižuje počet vyprazdňování TLB.

    O kolik rychleji věci běží? Nickovy patche (začleněnou verzi lze nalézt zde) obsahují nějaké výsledky benchmarků. V umělém testu zaměřeném na předvedení rozdílu běží nový kód 25× rychleji. Změnou kódu vmap() v souborovém systému XFS tak, aby používal vm_map_ram(), byly některé zátěže zrychleny dvacetkrát. Zdá se tedy, že to funguje.

           

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

    25.11.2008 00:40 Dworkin
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Dekuji moc za clanek,

    opet kvalitni pocteni (tedy ne, ze bych vetsinu technicky pobral:) ale clovek ma pocit , ze mu dali kounout tam kam se nikdy nema sanci dostat.

     

     

    25.11.2008 09:53 Xerces
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Souhlas, zvlášť o e1000e to byla hotová detektivka. :-)

    25.11.2008 10:55 alium | skóre: 38 | blog: Category 1100
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    +1

    grubber avatar 25.11.2008 19:04 grubber | skóre: 6 | blog: grubber | Břeclav / Brno
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Zrovna jsem říkal to samé přítelkyni :-)

    25.11.2008 21:42 Jan Přech
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Jo, taky jsem to četl se zatajeným dechem. Jenom mi běhá mráz po zádech, když si představím ty maníky od Intelu, klobouk dolů.

    A taky mi celé to povídání tak nějak připomnělo, jak to asi vypadalo v dobách, kdy ještě převládali opravdoví programátoři nad pojídači koláčů... :-)

     

    ...ham... :-D

    Godot používá GNU/Hurd.
    25.11.2008 00:56 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008
    již nezaznamenává místa, kde se volá mcall()
    mcount()
    Tato vlastnost byla již nějaký čas označena za zastaralou (ve prospěch vyvažování z uživatelského prostoru).
    To by mě zajímalo proč? Kdo jiný než jádro by měl vědět, jak jsou mezi procesory rozdělena přerušení a tudíž i jak je vyrovnat
    Quando omni flunkus moritati
    25.11.2008 07:52 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Překlep

    A ještě jeden překlep: "není skutečné nutné" - má být s"kutečně".

    25.11.2008 08:45 Zdenek
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008
    Treba proto, ze byste v jednu chvili chtel mit radeji bezchybny zvukovy vystup a to ze usb flaska bude kopirovat mensi rychlosti vas trapit nebude. A to samo jadro tezko zjisti.
    25.11.2008 16:37 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008
    To jako že by nastala situace, že jádro nestíhá obsluhovat přerušení? Tak to je v tom počítači něco shnilého. Nehledě na to, že i jádro je schopné přijímat instrukce, jak má něco dělat, takže by nebyl takový problém říct mu "toto přerušení zpracuj vždy tady" a podobně.

    Odpadlo by tím nesmyslné "Démon se z userspace zeptá jádra, jak to vypadá s přerušeními - démon se zamyslí, jak to upravit - démon řekne jádru, co má změnit - démon se uspí."
    Quando omni flunkus moritati
    25.11.2008 06:29 Peter Tuhársky
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    A ako dopadla utilita na opravu kariet? Spomínam si, že vývojári Intelu na nej pracovali..

    25.11.2008 17:02 Jiri Kosina
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Karty opravit umime snad vsechny. Pokud vlastnite nejakou ktera byla postizena timto bugem, ozvete se.

    25.11.2008 09:39 Jirka
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Ftrace je implicitne zapnuty, nebo ne?

    25.11.2008 09:57 Roger
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Taky nejdriv jedna opravicka: "Stabilní aktualizace ... jsou V době psaní tohoto článku"

     

    Zaujala me uprava "Další vylepšení VM způsobuje, že systém uvolní odkládací prostor stránky poté, co je stránka načtena zpět do RAM; to efektivně zvyšuje velikost swapu, který je v systému k dispozici."

    Neni to zbytecne/skoda? Nesla by naopak takova stranka pouzit spis pro rychlejsi odswapovani, kdy se nebude muset cekat na jeji opetovne ulozeni? Samozrejme v pripade, ze se na ni nezapise – v takovem pripade je zahozeni neplatne kopie na disku pochopitelne.

    25.11.2008 12:14 Tom K | skóre: 21
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Ono by se tezko zjistovalo, jestli se na stranku zapisuje nebo ne. A preventivni vkladani moc dlouho nepouzivanych stranek do swapu tusim existuje (takze v pripade odswapovani se stranka jen zneplatni).

    echo -n "u48" | sha1sum | head -c3; echo
    25.11.2008 14:40 moira | skóre: 30 | blog: nesmysly
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Tezko? Neslouzi prave k tomu priznak Dirty v Page Extension Fields?

    Překladač ti nikdy neřekne: "budeme kamarádi"
    25.11.2008 16:24 Tom K | skóre: 21
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    jasne. a poznam to kdyz obsluhuju vypadek stranky? Ja mel za to, ze to poznam az po zapisu.

    echo -n "u48" | sha1sum | head -c3; echo
    25.11.2008 10:04 ByCzech
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    vertikální zatemněné cykly

    zatemňovací

    25.11.2008 16:38 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008
    Jo, to by asi bylo lepší.
    Quando omni flunkus moritati
    25.11.2008 13:48 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Nová formátovací direktiva %pR umožní printk() a přátelům vypsat obsah struktur resource.

    ... printk() a podobné ... nebo ... printk() a obdobné ...

    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    progdan avatar 25.11.2008 19:27 progdan | skóre: 34 | blog: Archař | Teplice/Brno
    Rozbalit Rozbalit vše Re: Jaderné noviny - 22. 10. 2008

    Asi jeste dlouho me neprestane udivovat komplikovanost jadra a to, jak se v tom kluci muzou jeste vyznat :-)

    PS: noflame, vim ze ten kod je prehlednej a podobne, ale i tak ;-) 

    Collecting data is only the first step toward wisdom, but sharing data is the first step toward the community.

    Založit nové vláknoNahoru

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