Terminal pogryzł człowieka: smem

Prawidłowe dane pozwalają wyciągać prawidłowe wnioski. A cóż nam po informacji o wolnej pamięci RAM, jeżeli jest ona naznaczona niedokładnością wypaczającą szerszy ogląd całości? Oczywiście nie oznacza to tego, że polecenie free jest do niczego. Po prostu smem uwzględnia niuanse, dzięki którym wskazania zajętości pamięci RAM mogą być nieco inne. A przecież jest powiedziane – oszczędzaj RAM gdziekolwiek jesteś.

Smem znajdziemy w głównych repozytoriach chyba niemal wszystkich dystrybucji. Jego wspomniana wyjątkowość polega na wykazywaniu dla każdego procesu wartość RSS, USS i PSS. Ki diabeł?

RSS (Resident set size) jest wartością całkowitej pamięci RAM zajętej przez proces włącznie z współdzielonymi bibliotekami. Ponieważ wspomniane biblioteki mogą być też używane przez inne procesy, wskazanie to nie jest ostateczne.

PSS (Proportional set size) rozdziela pamięć zajętą przez biblioteki współdzielone pomiędzy procesy z nich korzystające (3 procesy korzystające z 600KB bibliotek – do PSS zostanie wliczone po 200KB dla każdego procesu).

USS (Unique set size) wykazuje całkowitą ilość pamięci zajętej tylko i wyłącznie przez dany proces (bez bibliotek współdzielonych).

Dlatego interpretacja wyników dla free i smem może być dwojaka:

~$ smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       1145744     729736     416008 
userspace memory            2353764     184408    2169356 
free memory                  533336     533336          0 
----------------------------------------------------------
                            4032844    1447480    2585364 
~$ free -k
              razem       użyte       wolne    dzielone   buf/cache    dostępne
Pamięć:     4032844     2533700      536412       46652      962732     1141528

Podstawową funkcjonalnością smem jest wyświetlanie procesów dla konkretnego użytkownika:

~# smem -tk
  PID User     Command                         Swap      USS      PSS      RSS 

 2002 dhor     kdeinit4: kded4 [kdeinit]          0     3.9M     4.8M    11.0M 
 1593 dhor     /usr/lib/x86_64-linux-gnu/l        0     4.5M     4.9M    15.5M 
 1532 dhor     /usr/bin/kglobalaccel5             0     4.6M     4.9M    14.1M 
 1644 dhor     /usr/bin/kactivitymanagerd         0     4.6M     5.0M    15.6M 
 1513 dhor     /usr/lib/telepathy/mission-        0     5.1M     5.4M    10.8M 
 1619 dhor     /usr/bin/pulseaudio --start        0     5.0M     5.4M     9.4M 
 1571 dhor     /usr/bin/ksmserver                 0     5.1M     5.6M    16.4M 
 1637 dhor     /usr/bin/korgac -session 10        0    10.0M    10.5M    21.9M 
 1609 dhor     /usr/lib/x86_64-linux-gnu/l        0    12.8M    13.4M    24.5M 
19625 dhor     /usr/lib/telepathy/telepath        0    13.0M    13.6M    20.0M 
22002 dhor     /usr/bin/python /usr/bin/sm        0    15.2M    15.4M    17.5M 
 1614 dhor     /usr/bin/owncloud -session         0    19.4M    21.0M    36.6M 
 1585 dhor     /usr/bin/krunner                   0    19.9M    21.5M    36.5M 
 1703 dhor     /usr/bin/python /usr/bin/so        0    22.1M    23.5M    32.3M 
 9137 dhor     /usr/bin/konsole                   0    22.3M    27.8M    48.3M 
17828 dhor     /usr/bin/claws-mail                0    27.4M    29.5M    40.3M 
 3942 dhor     /usr/lib/x86_64-linux-gnu/l        0    33.5M    39.4M    61.9M 
 8821 dhor     /usr/bin/kwin_x11 --crashes        0    44.8M    48.5M    67.2M 
 5820 dhor     /usr/bin/sayonara                  0    63.4M    69.9M    93.5M 
 1470 dhor     kded5 [kdeinit5]                   0    70.1M    72.8M    89.0M 
 1588 dhor     /usr/bin/plasmashell --shut        0   178.9M   184.1M   207.3M 
 1668 dhor     /usr/bin/quiterss -session         0   244.5M   253.8M   280.4M 
16679 dhor     /usr/lib/firefox/firefox           0     1.2G     1.2G     1.2G 
-------------------------------------------------------------------------------
   55 1                                           0     2.1G     2.1G     2.6G 

Potrafi również pokazać ranking użytkowników (-u), wartości w procentach (-p), mapping (-m), globalne dla systemu (-w). Możemy procesy filtrować (-P, regexp), według użytkowników (-U, regexp). Całość opcji możemy podejrzeć choćby pod tym adresem.

wykresy prosto z smem
Ale to co wykracza poza normy terminalowe to zgrabne wykresy które może ten program generować. Wystarczy dodać stosowny parametr i gotowe. Smem potrafi wyrysować grafy kołowe oraz słupkowe. Służą do tego przełączniki bar i pie. Należy podać nazwę, według które wartości chcemy posortować wynik, itp. Utworzonym wykresem możemy manipulować (np. powiększać widok) i w ostateczności zapisać na dysk.

Tak oto nieoczywiste spojrzenie na wykorzystanie pamięci naszego komputera daje do myślenia i przy okazji kusi zgrabną oprawą graficzną statystyk (których prawdziwi terminalowi wyjadacze oczywiście nie potrzebują).