Virtual vs resident vs swap vs klp memory

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Nov 28 04:43:03 EET 2008


On Wed, 26 Nov 2008 16:09:58 +0200, Antonis Christofides <anthony at itia.ntua.gr> wrote:
> Υπάρχει διαδεδομένη η αντίληψη ότι VIRT=RES+SWAP.

Η οποία είναι εντελώς λάθος, φυσικά, λόγω demand paging και της ίδιας
της φύσης των «κοινών» memory pages (βλ. και «copy on write» στη
Wikipedia).

Το θέμα της virtual memory επανέρχεται αρκετές φορές στην LGU, αλλά
κανείς δεν κοιτάζει τα archives :(

  http://lists.hellug.gr/pipermail/linux-greek-users/2006-July/064231.html

> Άρα τι; Να υποθέσω πως αν κάνω malloc(500m) τότε αυτά τα 500m είναι
> virtual, αλλά μέχρι να τα χρησιμοποιήσω σε κάτι δεν υπάρχουν πουθενά,
> ούτε σε ram ούτε σε swap;

Υπάρχουν στο `address space' του process, αλλά επειδή το Linux μπορεί να
έχει ρυθμιστεί να κάνει `overcommit'[2] πρέπει να κοιτάξεις κάπως πιο
προσεκτικά στο address space του *κάθε* process για να δεις πόσο μνήμη
πιάνει.

> RES τι είναι; Το πόσο είναι στη RAM;

`Resident memory'.  Η μνήμη που την στιγμή X είναι mapped σε σελίδες
φυσικής μνήμης.

> Υπάρχει καμιά ένδειξη κάπου που να δείχνει πόσο είναι swapped σε ένα
> process; Υπάρχει ένδειξη που να δείχνει πόσο από το VIRT
> χρησιμοποιείται (ανεξαρτήτως αν είναι resident ή swapped);

Όχι εύκολα και όχι εύκολα.

Το γεγονός ότι δεν είναι εύκολο κανένα από αυτά τα δύο δεν έχει σχέση με
το πόσο δύσκολο είναι να υλοποιηθούν.  Ένα proc filesystem node που όταν
το διαβάζεις διατρέχει το address space ενός process και μετράει πόσες
σελίδες μνήμης είναι φυσική μνήμη, πόσες είναι swapped out, ή πόσες δεν
έχουν γίνει access μετά την τελευταία φορά που τις «κοίταξε» ο page
daemon, δεν είναι τόσο δύσκολο να υλοποιηθεί.

Για την ακρίβεια είναι σχεδόν έτοιμο, βλ. αρχείο 'statm' και 'pagemap'
στο /proc/PID directory ενός Linux.

Ο πραγματικός λόγος που δεν είναι τόσο εύκολο είναι:

    Εντάξει, ας πούμε ότι έμαθες πως η libfribidi.so.1 είναι mapped στο
    address space του Firefox, αλλά βασικά δεν την έχει χρησιμοποιήσει
    τα τελευταία 10 seconds κι έχει γίνει swap out.  Αν όμως θελήσεις να
    γράψεις bi-directional κείμενο σε text input form, θα γίνει swap in,
    και θα μετρηθεί στο RES την επόμενη φορά που θα κοιτάξεις.  Και τώρα
    που το 'μαθες, να δω τι θα το κάνεις ως πληροφορία :P

Χρήσιμη πληροφορία, δε λέω.  Αλλά _οριακά_ χρήσιμη.

Αυτό που είναι _σημαντικό_ να ξέρεις είναι πόσο μνήμη χρειάζεται _τώρα_
το Firefox, κι αυτό είναι το RES :)



More information about the Linux-greek-users mailing list