Jvolve [Romanian]

Original in English by Suriya Subramanian

Jvolve

Jvolve este o memorie virtuală Java cu sprijinul Actualizării dinamice a software-ului (sau DSU, de la eng. Dynamic Software Updating). DSU este un mecanism de uz general care se actualizează de la o versiune veche la o versiune mai nouă a unui program în timp ce se execută aceasta. DSU nu impune nici un software special sau arhitectura hardware. Pentru mai multe detalii consultați lucrarea noastră PLDI 2009, "Actualizări dinamice de software: o abordare centrată pe memorie virtuală” PDF BibTeX .

Această ediţie de Jvolve este destinată pentru cercetători. Jvolve nu este încă disponibilă pentru descărcarea utilizatorilor, instalarea și actualizarea aplicațiile sale. Sperăm să realizăm totul într-o zi.

Descărcarea sursei

Codul sursă este menținut cu ajutorul lui Mercurial, unui sistem de control distribuit. Înainte de a începe, asigurați-vă că aveți instalat pe aceasta.

Această pagină conține informații cu privire la modul de descărcare și de folosire Jvolve. Există trei componente (și registrele corespunzătoare a acestora), de care aveți nevoie pentru a descărca. Acestea sunt

  1. Jvolve , memorie virtuală. Jvolve este construit pe partea de sus lui Jikes RVM, un JVM foarte popular de cercetare.
  2. UPT , ce înseamnă Instrument de pregătirea pentru actualizare (Update Preparation Tool). Acesta este software-ul nostru de analiză offline, care compară coduri de octeţi de două versiuni și oferă o specificație de actualizare pentru memorie virtuală.
  3. JastAddJ . Noi am făcut unele modificări minore la JastAddJ pentru a compila obiectul nostru și funcțiile de transformare de clasă.

Descărcați arhive de mai sus folosind Mercurial.

hg clone -r f8fcedddb95e http://bitbucket.org/suriya/jvolve
hg clone http://bitbucket.org/suriya/upt
hg clone http://bitbucket.org/suriya/jastaddj JastAddJ

Construirea de Jvolve

Jvolve a fost testat pentru a lucra pe platforme ia32-osx și ia32-linux Înainte de a construi Jvolve, haideţi să construim UPT și JastAddJ, ambele din care sunt simple. Ei nu au nevoie de nimic mai mult decât JDK și furnica Apache.

# Build UPT
cd upt
ant
cd ..

# Build JastAddJ
cd JastAddJ/Java1.5Backend
ANT_OPTS="-Xmx256M" ant jar
cd ..

Acum, să trecem la construirea și testarea lui Jvolve. Cerințele lui Jvolve sunt aceleași ca și cele ale lui JikesRVM. Dacă totul în sistemul dumneavoastră este corect, ar trebui să fiţi în măsură să construiţi și să rulaţi Jvolve pe aproximativ 25 de teste de regresie DSU specifice, cu o singură comandă. Comanda întreagă ar trebui să ia aproximativ 5 minute pentru a se rula.

cd jvolve
# Command for building and testing
./bin/buildit    localhost --test-run jvolve
# Command for building alone (for use later)
./bin/buildit localhost 
# Command for running DSU-specific regression tests
./bin/buildit localhost BaseAdaptiveSemiSpaceDSU

Acum este un moment bun pentru a explica ceea ce înseamnă BaseAdaptiveSemiSpaceDSU. JikesRVM vine cu diverse gusturi de construire, care reprezintă diferite opțiuni de compilatoare JIT și colectori de gunoi. Jvolve necesită sistem de compilare adaptivă JikesRVM și este construit pe partea de sus a unui colector de copiere de semi-spațiu. Pentru mai multe informații priviţi injvolve/build/configs/.

Dacă aveți probleme cu cosntruirea lui Jvolve, verificați dacă sunteți capabili de a construi o versiune de stoc de Jikes RVM.

cd jvolve
# Switch the JikesRVM trunk
hg up -r trunk
./bin/buildit    localhost BaseAdaptiveSemiSpace
# Switch back to Jvolve
hg up -r suriya-dsu

Actualizarea dinamică a aplicaţiei

Înainte de a actualiza o aplicație reală, haideți să cunoaştem cum de a porni o memorie virtuală pentru a putea apoi efectua o actualizare dinamică. Există câteva opțiuni de linie de comandă atunci când se invocă o memorie virtual pentru a controla comportamentul lui DSU. Acestea sunt

  • -X:vm:dsuSpecificationFile=filename nume fişier pentru a specifica fișierul specificaţiei obținute de la UPT
  • -X:vm:enableDsuOsr=true|false = adevărat | fals pentru a controla sau nu dacă vrem să utilizăm pe stivă înlocuire pentru DSU
  • -X:vm:enableDsuReturnBarriers=true|false pentru a controla sau nu dacă vrem să permitem utilizarea unor bariere de returnare pentru DSU
  • -X:vm:enableDsuDeveloperInterface=true|false Jvolve oferă un API pentru a invoca DSU din cadrul unui program Java. Acest steag controlează dacă sunt sau nu permise aceste API.

Codul sursă conține cele mai exacte informații despre aceste steaguri. Aveți posibilitatea de a căuta opțiuni introduse în Jvolve prin compararea acestuia cu opțiunile existente în JikesRVM de

hg diff -r trunk rvm/src-generated/options

Există două moduri de a porni DSU:

  • Utilizarea aplicațiilor Jvolve Java API poate invocă method org.jikesrvm.dsu.DeveloperInterface.invokeDSU () din cadrul programului. Testele de regresie Jvolve utilizează această caracteristică. Aruncati o privire la codul testing/tests/jvolve/src. Aceste teste de regresie au două directorii r0 / și r1 / corespunzătoare la două versiuni ale aplicației. Memorie virtuală începe să ruleze versiunea r0 și actualizări tor1 atunci când solicită programatorul invocă DSU (). Fișierul de specificație (al cărui format nu este documentat nicăieri încă) este disponibil în aceste directoare ca dsu-specification.txt. Transformatoare de clasă și obiect pentru actualizarea de reședința în transformers / director la fiecare test.
  • Prin semnalizarea memorie virtuale. Jvolve folosește SIGUSR1 pentru acest scop. Fie killall -USR1 JikesRVM sau kill-USR1 va starta o actualizare dinamică.

Pregătirea specificaţiilor de actualizare

După cum sa menționat mai sus, Jvolve oferă o opțiune de linie de comandă pentru a specifica un fișier de specificații de actualizare. UPT creează un fișier de specificaţie pentru cod și transformatoare de obiect de clasă din fișierele jar pentru versiunile vechi și noi. UPT poate fi invocat, după cum urmează.

upt/bin/upt.sh -a old-jar-file -b new-jar-file \
    -c path-where-new-jar-file-will-be-placed-for-the-vm \
    -p a-prefix-to-generate-old-version-stubs

De exemplu,

upt/bin/upt.sh -a r0/application.jar -b r1/application.jar \
    -c /complete/path/to/r1/application.jar \
    -p r0_

Întrebări?

Dacă aveți probleme cu obţinerea lui Jvolve, sau orice alte comentarii sau sugestii, vă rugăm să nu ezitați să ne contactați Suriya Subramanianfirstname@cs.utexas.edu.

ok ok