Hlavní navigace

Vlákno názorů k článku Nová softwarová sklizeň (28. 2. 2007) od Yenya - Checkpointing procesu je docela narocna vec - nedivim...

  • Článek je starý, nové názory již nelze přidávat.
  • 1. 3. 2007 15:51

    Yenya (neregistrovaný)
    Checkpointing procesu je docela narocna vec - nedivim se ze to v praxi nefunguje :-)

    - multithreadovy proces nemuzete atomicky pozastavit (zvlast na SMP).
    - pri obnoveni musite obnovovat spoustu veci ktere si jinak drzi jadro a o kterych musite mit spoustu informaci - viz dale:
    - otevrene filedeskriptory - prislusne soubory po chvili vubec nemusi existovat (nepojmenovane roury napriklad), nebo nemusi byt znovu vytvoritelne bez ztraty informace (socket v LISTEN stavu s frontou cekajicich klientu). A to nemluvim o situaci, kdy pres socket nebo rouru s nekym komunikujete, a uz se ta komunikace nachazi v nejakem pokrocilejsim stavu (s DNS nebo nscd komunikuje skoro kazdy program).
    - SysV IPC - nevite jestli pri resume mate vytvorit novy nebo pouzit nejaky stavajici.
    - Signaly - napriklad cekajici signaly nebo nastavene handlery (mam pocit ze Linux snad ani nezverejnuje adresy handleru (nemluve o vecech jako jsou flagy handleru).

    -Yenya, http://www.fi.muni.cz/~kas/blog/
  • 2. 3. 2007 10:34

    Yenya (neregistrovaný)
    Hmm, napadlo me, ze signaly by slo resit pres ptrace(2) - zastavil bych proces, pres ptrace(2) bych ho nechal zavolat sigaction(sig, NULL, &oldaction) pro kazdy signal, a tim bych zjistil flagy signalu i handler. Taky bych mohl postupne odblokovavat signaly a cekat kolik jich prijde. Ale zase nevim jak moc by se pri obnoveni dalo zkonstruovat/podvrhnout drive obdrzene siginfo (je tam mimo jine PID zasilajiciho procesu).

    Dalsi problem je, ze se tezko podari obnovit proces se stejnym PID, takovy aby mu fungovalo wait() na potomky, ktere drive mel, a tak podobne.

    Dovedu si predstavit checkpointing _velmi omezene_ tridy procesu. Ale obecny, zvlast bez spoluprace jadra, fakt ne.

    -Yenya, http://www.fi.muni.cz/~kas/blog/