Articoli con tag wired

Mac OS X: free(), The Missing Command

0

Il comando messo a disposizione da Linux: free(1) è molto utile per capire l’ammontare di memoria RAM e memoria Swap libera ( ed usata ) sulla nostra macchina. Semplice e molto comodo… peccato che sul nostro Mac OS X non è presente, nonostante ciò la nostra cara Apple ci mette a disposizione altri eseguibili che ci danno queste informazioni ( anche se in maniera meno esplicita e meno diretta ): top(1) e vm_stat(1).

Prima di capire come interpretare le loro informazioni e vedere lo script che mi sono creato per estrapolarle e visualizzarle in modo conciso ed “umano”, facciamo una piccola parentesi ( sperando di ricordare correttamente i concetti studiati a Sistemi Operativi 😛 ) sul funzionamento della memoria sui moderni Sistemi Operativi.

Mac OS X, come i più moderni Sistemi Operativi, usa un sistema di memoria virtuale per la gestione della memoria.

Memoria Virtuale

Tra i molti scopi di tale tecnica, vi è quello di permettere al Sistema Operativo  di dare l’illusione di poter mettere a disposizione dei processi un ammontare illimitato di memoria ( in realtà abbiamo un limite indirizzabile per ogni processo di 4Gb per i sistemi a 32bit e 18 exabyte per i sistemi a 64bit ). Ex. anche se abbiamo sul nostro PC solo 2GB di memoria RAM installata, il Sistema Operativo, grazie a tale tecnica, potrà stanziare per ogni processo in esecuzione un ammontare di memoria superiore al totale della memoria RAM fisicamente installata.

Top command con 3GB di memoria fisica

Come potete vedere nell’immagine in alto, la colonna VSIZE indica l’ammontare di memoria virtuale che il Sistema Operativo ha assegnato al processo o all’applicazione, in megabytes (M) in questo caso. Notiamo che la quantità dei memoria virtuale assegnata ai primi due processi è di granlunga superiore a quella fisicamente disponibile ( 3GB nel mio caso, dovrò abilitare le donazioni paypall prima o poi 😛 ). La colonna RSIZE indica l’ammontare di memoria fisica che il processo stà effettivamente occupando( in questo caso è in kilobytes ), ed è molto minore di quella virtuale.

Spero abbiate compreso l’importanza di usare la memoria virtuale al posto di quella fisica :P. Daltronde la memoria RAM non è illimitata, per tale motivo Mac OS X raggruppa tale memoria in quattro categorie:

  • Wired: è la memoria occupata dal S.O., e non può mai essere paginata fuori dalla memoria ( deallocata ), dato che contiene le routines del kernel, librerie di sistema e molto altro..
  • Active: è la memoria usata dai processi che sono in esecuzione ( i nostri programmi per capirci ).
  • Inactive: è la memoria che è stata usata di recente dai programmi ma non è stata ancora liberata, vuol dire che se il S.O. avrà bisogno di memoria l’andrà a prendere da questa categoria.
  • Free: è la memoria, come suggerisce il nome, che è libera e può essere immediatamente associata ad un processo.

Quando lanciate un programma/applicazione, esso viene caricato nell’Active memory. Quando uscite dal programma, tuttavia, esso non viene rimosso dalla RAM, ma la sua memroia viene classificata come Inactive . Viene attuata questa politica perchè , in tal modo, è molto più veloce ri-lanciare il programma dato che si trova già nella RAM ( chiudete e provate a ri-lanciare Chrome/Firefox e vedrete che la sua riapertura è molto più veloce).

Quando tutta la memoria fisica è occupata ( Memory Free è pari a 0 ), il S.O. sposterà la Memoria Inactiva nella Memoria di Swap, in modo da aumentare lo spazio in quella Free. La memoria di Swap è molto lenta, dato che si trova sul nostro Hard-Disk, per tale motivo si cerca di utilizzarla il meno possibile.

Per i motivi visti nel precedente paragrafo, quando vogliamo esaminare quanta memoria stà usando il nostro computer e le sue prestazioni, dobbiamo fare attenzione a quanta memoria di Swap stiamo usando. Un altro indicatore da tener ben a mente è Pageins, il quale ci indica quanto spesso il S.O. ha preso i dati dalle memoria di Swap e messi in quella Active.

Dopo questa premessa noiosa ( non per me, dato che amo capire l’architettura alla base dei S.O 😀 ), passiamo ad esaminare il comando che vedremo più nel dettaglio: vm_stat

[sourcecode language=”bash”]
unicondor@iMac:→ vm_stat
Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free: 134596.
Pages active: 343278.
Pages inactive: 211846.
Pages speculative: 11035.
Pages wired down: 85028.
“Translation faults”: 43665599.
Pages copy-on-write: 999686.
Pages zero filled: 55006291.
Pages reactivated: 22831.
Pageins: 1624923.
Pageouts: 3796.
Object cache: 29 hits of 535971 lookups (0% hit rate)
[/sourcecode]

Grazie all’introduzione fatta, spero sia più chiaro come interpertrare correttamente i dati forniti in output. Per cui vi chiedo, qual’è l’ammontare di RAM non usata o libera? 

Io me la sono fatta spesso questa domanda, e la risposta che mi davo spesso era: Heh :-).

Adesso però possiamo dare una risposta “corretta” alla domanda, l’ammontare di RAM libera è data dalla somma di Free Memory + Inactive Memory .

C’è un problema, come spesso accade nel mondo dell’informatica :P, dato che l’output non parla di Memory ma di Pages.

Infatti per poter ottenere l’informazione che vogliamo, dobbiamo moltiplicare il numero di Pages per 4096 bytes ( che è la grandezza di ogni pagina) e poi dividere il tutto per 1048576 (dato che volgiamo l’output in MB).

Quindi, ricapitolando, se vogliamo sapere l’ammontare in MB delle Pages Free dobbiamo fare: (134596*4096) / 1048576 = 525 MB.

Allo stesso modo per le Pages Inactive= (211846 * 4096) / 1048576 =  827 MB

Memoria RAM libera = Pages Free + Pages Inactive = 525 + 827 = 1352 MB  o  1.3 GB

L’ultima linea di vm_stat è il rapporto tra gli oggetti richiesti e quelli che sono già attivi in memoria. Semplificando, più il valore di hit rate è alto e meno Pageins abbiamo… quindi conviene avere un alto hit rate ( non come nel mio caso ) per avere un sistema reattivo.

Liberare la Memory Inactive è spesso un’operazione molto lenta, per questo motivo, a volte, è utile effettuare tale operazione prima dell’avvio di un processo e/o applicazione pensante. Il comando “purge” fa a caso nostro, dato che serve per liberare la Memory Inactive senza dover ravviare il PC.

Il comando è presente nella suite developer tools, per cui è necessario installarla per poterlo usare.

Basta semplicemente aprire la shell e digitare il comando:

[sourcecode language=”bash”]
unicondor@iMac:→ purge

[/sourcecode]

l’operazione potrebbe richiedere qualche minuto ( dipende dalla quantità di memoria da liberare ), durante la sua esecuzione il S.O. potrebbe rallentarsi un pò

 

Ecco il piccolo script che uso per visualizzare l’ammontare totale della RAM, quella Free e quella Used:

Update 21_02_2012: Aggiunta function Usage() ed il relativo controllo dei parametri

vm_free.sh

[sourcecode language=”bash”]

#!/bin/sh

argv=$1

bytes=1048576
size=”MB”

function usage(){
echo “Usage: $0 [option]”
echo ” OPTION:”
echo ” -g –> Output in GB”
echo ” -k –> Output in KB”
echo ” default option is: -m –> MB”
exit
}
if [ ! “$#” -le “1” ]; then

usage

fi
if [ $1 ]; then

if [ “$1″ == -g ] ; then
bytes=1073741824
size=”GB”
else
if [ “$1″ == -k ] ; then
bytes=1024
size=”KB”

else
usage
fi
fi

fi

free_memory=`vm_stat | grep -e free -e inactive -e speculative| awk ‘{sum+=$3} END { print “”(sum*4096)” “}’`

total_memory=`vm_stat | grep -e free -e inactive -e speculative -e active -e wired| awk ‘{sum+=$3} END { print “”(sum*4096)” “}’`

used_memory=`vm_stat | grep -e wired -e active| awk ‘{sum+=$3} END { print “”(sum*4096)” “}’`

let “out_total=$total_memory/$bytes”

let “out_used=$used_memory/$bytes”

let “out_free=$free_memory/$bytes”

 

printf “%5s \t\t%d %s\n” “Total” $out_total $size
printf “%5s \t\t%d %s\n” “Used” $out_used $size
printf “%5s \t\t%d %s\n” “Free” $out_free $size

[/sourcecode]

Possiamo lanciare lo script con il flag:

  • -g per output in GB
  • -k per output in KN

Optional:

Nel caso volessimo usare il piccolo script richiamando il comando free come nei sistemi Linux, non ci resta che spostare l’eseguibile bash in /usr/local/bin e rinominarlo:

[sourcecode language=”bash”]

unicondor@iMac:→ cp vm_free.sh /usr/local/bin/free
unicondor@iMac:→ free
Total 2742 MB
Used 1709 MB
Free 1271 MB

[/sourcecode]

 

 

N.B. nel calcolo della RAM libera si è inserito anche il conteggio delle Pages speculative.

Riferimenti:

https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html

http://iamleeg.blogspot.com/2006/06/use-of-vmstat1.html

 

GitHub

https://github.com/flaviopace/MacOSX_free_bash_command

W150…il wifi per i 150 anni dell’Unità d’Italia

2

In occasione delle votazioni referendarie, sono tornato nel mio paese (Prata di Principato Ultra, ridente cittadina della Valle del Sabato in provincia di Avellino) e sono rimasto soddisfatto dal fatto che una iniziativa è stata messa in pratica nel minor tempo possibile! Sto parlando della connessione Wi-Fi gratis per i residenti del mio comune. Ho avuto modo di fare un po’ di prove su questa rete (potenza del segnale, velocità) e posso dire che la nota dolente è la sola limitazione dell’area coperta:

 

Ovviamente il cerchio rosso è “approssimativamente” la reale copertura della rete, le mie misurazioni sono state fatte spostandomi in giro con l’iPhone e wifi acceso, rendendomi conto fin dove ci si poteva spingere con il segnale abbastanza forte da permettere di navigare. Bisognerebbe testare meglio la ricezione del segnale con un portatile e software adeguati tipo: NetStumbler (per utenti Win) o iStumbler (per utenti Mac). Ora vi parlerò della procedura per usufruire del servizio, partendo dal principio-base dell’iniziativa: 150 piazze Wi-Fi è promossa da Unidata e Wired, ed è stata lanciata per commemorare i 150 anni dell’Unità d’Italia e per mettere in evidenza che il nostro Paese ha bisogno di una forte spinta di tutti per “l’inclusione” digitale, sia di tipo infrastrutturale (larga banda e ultra-larga banda) sia di tipo culturale, ovvero una maggiore diffusione della conoscenza e della consuetudine d’uso delle tecnologie digitali per tutte le età e i ceti sociali. Il servizio sarà gratuito per i cittadini, con una limitazione di 2 ore al giorno. Voglio chiarire che il servizio fornito non è in concorrenza con gli operatori di telecomunicazione che forniscono servizi ADSL o altro, ma è una valorizzazione del territorio e un contributo della amministrazione locale alla diffusione della innovazione e di Internet. La promozione è stata riservata ai primi 150 Comuni che ne hanno fatto richiesta. L’utente che per la prima volta intende utilizzare il servizio di accesso ad internet pubblico in modalità Wi-Fi è obbligato dal sistema a seguire un ciclo di registrazione di nuova utenza e ottenere le credenziali di accesso. Il sistema, infatti, provvede all’erogazione del servizio di accesso ad internet solo ed esclusivamente a soggetti con credenziali di accesso certificate e valide per un uso temporale non superiore a 12 mesi rispetto alla data di rilascio. Gli utenti che hanno già provveduto alla registrazione, accedono al servizio inserendo il proprio account (UserID e Password) in uno qualsiasi degli Hot Spot del network w150. Qualora le credenziali di accesso siano scadute, è necessaria una nuova registrazione. Nello specifico, il ciclo di autenticazione e di accesso al servizio è così strutturato:

1. L’utente si collega all’hot spot di accesso alla rete Wi-Fi identificato col nome “ w150 pratadiprincipatoultra”, ottiene un indirizzo IP pubblico del network di Unidata, ma tutto il traffico diretto verso la rete internet è bloccato dal Wireless Gateway.

2. Il sistema intercetta richieste di accesso a siti WEB (es. aprendo una qualsiasi pagina in Internet Explorer e/o Firefox e/o Chrome) e all’utente è presentata automaticamente una “Start Page” che lo invita alla registrazione richiedendo di inserire la propria anagrafica (nome, cognome, data di nascita,indirizzo, email) e numero di telefono cellulare associato alla SIM Card di sua proprietà;

3. Viene richiesto all’utente di fare una telefonata dal telefono mobile, utilizzato per la registrazione, ad un numero di rete fissa con identificatore di chiamata attivo (CLI);

4. Il sistema fa cadere la chiamata dopo pochi squilli (nessun costo per l’utente) ed estrae l’identificatore di chiamata (CLI);

5. Se il CLI coincide con quello dichiarato dall’utente nella registrazione, il sistema assume lo UserID (numero telefonico della SIM) e fornisce la Password, altrimenti non avviene la registrazione.

La navigazione è abbastanza fluida e, ovviamente, non tutti i siti sono raggiungibili, ma per un utilizzo più che “medio” inteso con servizi quali Skype e MSN Messenger e/o siti come Facebook, Twitter e YouTube ed altri noti ai più, il sistema funziona abbastanza bene. Si potrebbe di sicuro implementare una struttura di ripetizione del segnale per portare la rete anche in altre zone del paese, ma per ora va più che bene così e considerando che il segnale raggiunge la vicina scuola è quindi questa, l’occasione di sfruttare internet come accesso alla cultura per i più giovani, istruendoli anche al suo corretto utilizzo. A me basta sapere che il mio piccolo Comune fa parte di quei 150 che hanno la possibilità di offrire ai propri cittadini un servizio di internet a banda larga, sopratutto in un’Italia dove ci sono zone che non sono nemmeno raggiunte dalla banda larga! Sono contento così…

 

AR

Torna all'inizio