Vlákno názorů k článku Porovnání systémů Linux a FreeBSD od Pavel Pisa - Nemohu si odpustit poznámku ke tvrzení sleep_on - tyhle...

  • Článek je starý, nové názory již nelze přidávat.
  • 14. 11. 2003 2:06

    Pavel Pisa (neregistrovaný)

    Nemohu si odpustit poznámku ke tvrzení
    sleep_on - tyhle funkce musí umřít.

    Je to nesmysl, spinlok je účinný nástroj, pokud potřebujete synchronizovat přístup k proměnným.
    Přístup by neměl trvat déle než jednotky mikrosekund.
    Jinak čekající procesor u SMP mrhá výkonem a v případě spinlok_irqsave ohrožujete i včasné přijetí dat.

    sleep_on případně v článku nepopsané wait_event je ideální pro čekání na dostupnost dat, událost nebo na vypršení časového přerušení. Využívá čekací fronty, je v Linuxu dobře implementované. Nad ním jsou postaveny všechny vyšší IPC mechanizmy (čekání a buzení). Proto můžete používat v programech select čekat na pakety atd.

    Velmi pěkný ale již poněkud starší popis činnosti a principů Linuxového jádra naleznete v knížce

    The Linux Kernel by D.A.Rusling

    Hyperlinkovanou PDF verzi naleznete na mé stránce

    http://cmp.felk.cvut.cz/~pisa/linux/tlk-0.8-3.pdf

  • 14. 11. 2003 4:07

    Mikuláš Patočka (neregistrovaný)

    wait_event volá add_wait_queue, pak otestuje podmínku a případně zavolá schedule podobně, jak jsem to tam popsal (ale nenapsal jsem, že to může dělat wait_event). wait_event se v jádře ani moc nepoužívá, většinou je to tam rozepsané (nenapadá mě proč, mohlo by to být čistší než s použitím stávajícího add_wait_queue a schedule; možná proto, že o něm nikdo neví).

    sleep_on jde použít pouze pod big kernel lockem, jinak ne, neboť je v něm race (podmínka nastane po otestování ale před sleep_on). Na čekání na přerušení nejde sleep_on ze stejného důvodu použít vůbec.

  • 14. 11. 2003 9:56

    Yenya (neregistrovaný)

    Duvod je samozrejme ten ze wait_event() je podstatne novejsi rozhrani nez add_wait_queue(). Odhaduji ze to je vec Linuxu 2.3 nebo 2.1 zatimco add_wait_queue je vec linuxu 1.0. Pokud dobre vidim do vyvoje veci, kde se tohle nejcasteji pouziva (= drivery) tak driver se vetsinou pise tak, ze nekdo nahodny ma kus HW ke kteremu pise (svuj prvni) driver. Cili se podiva do vedlejsich driveru (ja jsem treba zkoumal ISA DMA z aha1542.c) a zkopiruje postupy tam pouzite. Pokud nekdo chce zavest "lepsi" rozhrani, musi projit kernel a opravit vyskyty "starych" rozhrani tam kde to vsichni od sebe navzajem zkopirovali. Vetsinou se to tak deje, v tomhle pripade zrejme ne (protoze to neni jen trivialni globalni nahrada retezcu).

    -Yenya

  • 14. 11. 2003 9:24

    Ladislav Michl (neregistrovaný)

    sleep_on musí umřít! pokud mě chcete přesvědčit o opaku, odstraňte všechna chybná použití z jádra. tak za měsíc se zase ukažte ;-). nebudu se opakovat a opakovat jiné. autor článku ostatně vysvětluje úskalí s jejím použitím spojená. btw, "Používání funkce sleep_on je ve většině případů nevhodné"... Proti této větě mám výhrady - _vhodné_ použití této funkce totiž neexistuje. v článku je také vysvětleno, jak to dělat správně