abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:33 | Bezpečnostní upozornění

    V terminálovém multiplexoru GNU Screen byly nalezeny a v upstreamu ve verzi 5.0.1 už opraveny bezpečnostních chyby CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804 a CVE-2025-46805. Podrobnosti na blogu SUSE Security Teamu.

    Ladislav Hagara | Komentářů: 0
    včera 19:33 | Bezpečnostní upozornění

    Training Solo (Paper, GitHub) je nejnovější bezpečnostní problém procesorů Intel s eIBRS a některých procesorů ARM. Intel vydal opravnou verzi 20250512 mikrokódů pro své procesory.

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

    Byla vydána nová verze 25.05.11 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Nejnovější Shotcut je již vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

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

    Svobodný elektronický platební systém GNU Taler (Wikipedie, cgit) byl vydán ve verzi 1.0. GNU Taler chrání soukromí plátců a zároveň zajišťuje, aby byl příjem viditelný pro úřady. S vydáním verze 1.0 byl systém spuštěn ve Švýcarsku.

    Ladislav Hagara | Komentářů: 6
    včera 00:55 | Pozvánky

    Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 209. brněnský sraz, který proběhne tento pátek 16. května od 18:00 ve studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Jelikož se Brno stalo jedním z hlavních míst, kde se vyvíjí open source knihovna OpenSSL, tentokrát se OpenAlt komunita potká s komunitou OpenSSL. V rámci srazu Anton Arapov z OpenSSL

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 00:22 | Komunita

    GNOME Foundation má nového výkonného ředitele. Po deseti měsících skončil dočasný výkonný ředitel Richard Littauer. Vedení nadace převzal Steven Deobald.

    Ladislav Hagara | Komentářů: 4
    10.5. 15:00 | Zajímavý článek

    Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.

    Ladislav Hagara | Komentářů: 23
    9.5. 17:22 | Nová verze

    Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.

    Ladislav Hagara | Komentářů: 6
    9.5. 15:22 | Komunita

    Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.

    Ladislav Hagara | Komentářů: 0
    8.5. 19:22 | Nová verze

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

    Ladislav Hagara | Komentářů: 0
    Jaký filesystém primárně používáte?
     (57%)
     (1%)
     (8%)
     (22%)
     (4%)
     (2%)
     (3%)
     (1%)
     (1%)
     (3%)
    Celkem 595 hlasů
     Komentářů: 26, poslední 8.5. 09:58
    Rozcestník

    Administrace komentářů

    Jste na stránce určené pro řešení chyb a problémů týkajících se diskusí a komentářů. Můžete zde našim administrátorům reportovat špatně zařazenou či duplicitní diskusi, vulgární či osočující příspěvek a podobně. Děkujeme vám za vaši pomoc, více očí více vidí, společně můžeme udržet vysokou kvalitu AbcLinuxu.cz.

    Příspěvek
    16.7.2010 16:53 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: C/C++ presnost usleep
    Příloha:
    Ten cyklus ma spravny v pripade, ze nebude mit cekani delsi nez 1s (v pripade, ze mu to nekdo preplanuje a ono to pretece, tak uz na tom vlastne nezalezi a casem se mu to vzbudi stejne).

    Ne, zatuhne to. Dejme tomu: ts.tv_usec == 999999 a usecond == 3: bude se čekat až te.tv_usec >= 1000002, což nemůže nikdy nastat. Doporučuji alespoň následující, s tím, že nemůžete zadat usecond > 999999.
    void __usleep_test02(int usecond) {
            struct timeval tv;
            time_t target_sec;
            suseconds_t target_usec;
    
            gettimeofday(&tv, NULL);
            target_sec = tv.tv_sec;
            target_usec = tv.tv_usec + usecond;
            if (target_usec >= 1000000) {
                    target_sec++;
                    target_usec -= 1000000;
            }
    
            while ((tv.tv_usec < target_usec) || (tv.tv_sec < target_sec)) {
                    gettimeofday(&tv, NULL);
            }
    }
    
    Ta pasaz s casovacem mne velmi zaujala a poprosil bych o rozvedeni. Mikrosekunda je z puhledu systemu cca 1000-2000 instrukci CPU a to neni az tak mnoho.
    No, základem všeho je si zajistit RT prioritu procesoru (SCHED_FIFO), jinak se můžete jít koulet - jádro do Vaší čekačky přepne jiný proces a místo 2 us čekáte třeba 20 ms. Pokud máte RT prioritu, tak se to nestane, na druhou stranu jelikož standardní jádro není hard-RT, tak stejně nemáte 100% jistotu, ale už máte aspoň něco, s čím se dá rámcově počítat.

    Samotné čekání pak můžete udělat metodou busy wait - tj. tak jak to je naznačeno výše, čekáním v úzké smyčce na ten správný okamžik. Zablokujete tím kompletně jedno jádro procesoru, proto je potřeba vážit kdy a jak se tento postup nasadí. V defaultním nastavení linuxu je proti kompletnímu zablokování pojistka:
    $ cat /proc/sys/kernel/sched_rt_period_us
    1000000
    $ cat /proc/sys/kernel/sched_rt_runtime_us
    950000
    
    ... což znamená, že i přes RT prioritu bude váš proces donucen ke spánku pokud sežere více než 950000 us z 1000000 us okna (hodnoty v proc lze samozřejmě upravovat). To znamená že na jednoprocesorovém stroji budete mít šanci odladit tu chybně napsanou funkci na čekání :)

    Otázkou může být jak je jádro schopné říct kolik je přesně gettimeofday(). V linuxu jsou 2 časovače - clock source a event source. První lze jen číst a druhý lze i programovat na odeslání interruptu za nějakou dobu. Event source je obvykle podstatně méně přesný. Klasický časovač má 1000 Hz, HPETy mají v řádu MHz. Clock source má v optimálním případě přesnost 1 cyklu procesoru. Funkce gettimeofday() funguje tak, že se podívá na globální proměnnou kde je informace o čase posledního eventu a přičte k ní aktuální offset z clock source. Samozřejmě než se poté vyšaší přepnutí z kernel režimu do userspace atd. tak ještě nějaký čas uteče ale obvykle je to o dost méně než ta 1 us která nás zajímá. (Pro ultra přesné časování nesmíte volat funkce kernelu, ale vystačit si třeba s čtením TSC přímo v programu, což je zdroj dalšího opruzu...)

    Na druhou stranu pokud zavoláte nanosleep() tak si jádro dá určitou práci s tím, aby nastavilo event source jak nejlépe to jde (tam je toho dost, je potřeba váš časovač zařadit do RB stromu a kdovíco ještě) a pak si dá CPU voraz, takže skutečně tu mikrosekundu spíte. Bohužel kvůli různým overheadům a granularitě event sourcu budete mít trochu horší výsledky než u busy wait, na druhou stranu šetříte lesy :)

    Udělal jsem nějaké rychlé testy (viz přiložený program) a zdá se, že se výše popsané potvrzuje. Busy wait sežere 100% cpu a do 2ms okna se netrefí třeba 200x ze 100 000 pokusů. Na druhou stranu nanosleep nežere skoro nic, ale má overhead, se kterým musíte dopředu počítat a díky tomu trochu větší rozptyl.

    In Ada the typical infinite loop would normally be terminated by detonation.

    V tomto formuláři můžete formulovat svou stížnost ohledně příspěvku. Nejprve vyberte typ akce, kterou navrhujete provést s diskusí či příspěvkem. Potom do textového pole napište důvody, proč by měli admini provést vaši žádost, problém nemusí být patrný na první pohled. Odkaz na příspěvek bude přidán automaticky.

    Vaše jméno
    Váš email
    Typ požadavku
    Slovní popis
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.