Pożytki ze zrzucenia własnego rdzenia

2007-06-16, common-lisp, hack

Uwaga, wpis bardzo ezoteryczny. Proszę się nie popadać w samodeprecjacje :-)

Jakiś czas temu, jak przymierzałem się do zakupu VPS z ograniczoną jak na współczesne warunki pamięcią operacyjna 128MB, testowałem zajętość pamięci różnych rzeczy. Tak aby zobaczyć, ile kosztuje MB przyjemności :-). Pamiętam, że SBCL + zajmował jakieś 20MB RSS/ 90MB VSZ. Wartość ta była akceptowalna.

Wczoraj skopiowałem tajny projekt dino na mojego VPSa. Uruchamiam i patrze a tu 50MB zjedzone. Co jest? Czyżbym się znów pomylił, jak to było z kursem dolara kanadyjskiego? Otóż nie. Do testów użyłem dino, co operowało na zrzuconym rdzeniu (ang: core dump). A wczoraj ładował biblioteki przy starcie do standardowego rdzenia. Zatem mogę polecić uruchamianie common-lispa z własnego rdzenia. Dwie zalety:

  1. obiekty które są ładowane z rdzenia, są w przestrzeni read-only, po której to garbaty (ang. garbage collector) nie biega, przez co oszczędza sobie pracy
  2. strony rdzenia ładowane są tylko w przypadku gdy są używane, zatem nieużywane fragmenty bibliotek nie zalegają w stercie (ang heap) ani w przestrzeni wymiany (ang. swap)

A teraz krótka instrukcja jak zrzucić rdzeń i potem go użyć.

  1. Tworzymy plik dump-core.lisp z listą ulubionych bibliotek
    (require :asdf)
    (require :sb-posix)
    
    (asdf:oos 'asdf:load-op :swank)
    (asdf:oos 'asdf:load-op :clark) ;; to też tajny projekt ;-)
    (asdf:oos 'asdf:load-op :hunchentoot)
    
    (sb-ext:save-lisp-and-die "my-core.core")
     
  2. Zrzucamy rdzeń:
    sbcl --disable-debugger --noprint --no-userinit --load dump-core.lisp
    
  3. Tworzymy plik startowy start.lisp:
    (clark::start-server)
    (swank:create-server :port 4005 :dont-close t :external-format :utf-8-unix)
    (hunchentoot:start-server :port 4242)
    
  4. Teraz uruchamiany nasz rdzeń z włączonym Hunchentootem i Slimem gotowym do hackowania kolejnego killer-app’a:
    sbcl --core my-core.core --disable-debugger --noprint --no-userinit --load start.lisp
    
  5. Przeglądarkę kierujemy na adres localhost:4242 a w Emacsie
    uruchamiamy M-x slime-connect.
  6. Hack, hack, hack
  7. Zysk :-)

Wyżej wymieniona instrukcja stanie się niepotrzebna, gdy w końcu zrobię wydanie dino. Na razie jeden z komponentów jest już wersji alfa clget :-).

Komentarze: 3

  1. Dzięki Nabla. Właśnie do tego miałem usiąść a tak mam gotowca :)

    Comment od scooter — 2007-06-17 @ 21:08
  2. Spox. Mam zamiar publikować więcej wiedzy ezoterycznej :-)

    Comment od nabla — 2007-06-17 @ 21:11
  3. Hm… szkoda że nie napisałeś tego wcześniej, leniwy jestem i było by jak znalazł ;)

    Comment od s — 2007-09-15 @ 18:21

Kanał RSS dla tego wpisu.

Niestety, skomentowanie tego wpisu jest niemożliwe.

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2009 nablaone.net | powered by WordPress with Barecity