VM υποσύστημα και διαχωρισμός 1-3:3-4 GB

Vasilis Vasaitis v.vasaitis at sms.ed.ac.uk
Tue Apr 26 00:12:06 EEST 2005


On Mon, Apr 25, 2005 at 12:10:10PM +0300, Giorgos Keramidas wrote:

..[snip]..

> Ένα μεγάλο μέρος της δουλειάς που κάνει ο πυρήνας κάθε φορά που
> εκτελείται ένα system call είναι η αντιγραφή δεδομένων από userlevel σε
> kernel space.  Για να υλοποιηθεί αυτό υπαχουν δύο τρόποι:
> 
> α) Να είναι mapped όλο το address space του πυρήνα στο πάνω μέρος του
>    virtual address space κάθε διεργασίας.
> β) Να γίνεται "overlay" όλο το 4 GB address space ενός process με αυτό
>    του πυρήνα κάθε φορά που γίνεται ένα context switch από userspace σε
>    kernel mode.
> 
> Στην πρώτη περίπτωση, αμέσως μόλις ο πυρήνας μπει σε privileged mode,
> μπορεί να χρησιμοποιεί τις γνωστές bcopy(), memcpy() για να μεταφέρει
> ένα αντίγραφο από το 1-3 GB user space στο 3-4 GB kernel space.
> 
> Στην δεύτερη περίπτωση ο πυρήνας πρέπει να κάνει διάφορα "περίεργα"
> παιχνίδια με το mapping των virtual διευθύνσεων του user process και του
> ίδιου του πυρήνα κι ύστερα να κάνει ΠΑΛΙ bcopy() ή memcpy() τα δεδομένα.
> 
> Από μετρήσεις που έγιναν βρέθηκε ότι ο χρόνος που περνά ο πυρήνας
> κάνοντας copy δεδομένα από user space σε kernel mode κι ανάποδα είναι
> της τάξης του 30% του συνολικού χρόνου που αφιερώνεται σε system calls.
> Αν αυτή η λειτουργία γίνει 3 φορές πιο αργή η απόδοση πέφτει σημαντικά,
> οπότε προτιμάται ο πρώτος τρόπος mapping των διευθύνσεων για να είναι
> όσο το δυνατόν πιο καλή η απόδοση του πυρήνα.

  Να αναφέρω πάντως και τον αντίλογο... Στο Linux, η δεύτερη περίπτωση
που περιγράφεις υλοποιείται με το περίφημο 4G/4G patch του Ingo Molnar
[0, 1, 2], το οποίο πάντως δεν έχει ενσωματωθεί στον πυρήνα, και
μάλλον ούτε και πρόκειται. Αυτό όντως μπορεί να έχει κόστος μέχρι και
30% στα syscall, αλλά υπάρχουν περιπτώσεις που είναι πραγματικά
χρήσιμο: Αν έχεις μια εφαρμογή υπολογιστικής φύσεως κατά βάση, που
περνάει τον περισσότερο χρόνο της κάνοντας επεξεργασία σε user space,
και η οποία *χρειάζεται* τα 4GB, τότε είναι κάτι πραγματικά χρήσιμο.
Αυτό δεν είναι υποθετικό σενάριο· το συγκεκριμένο patch
χρησιμοποιείται αρκετά ακριβώς για τέτοιες εφαρμογές, με κόστος ακόμα
και της τάξης του 0,1% μόλις σε αρκετές περιπτώσεις.

  Πάντως για γενική χρήση δεν είναι, αυτό είναι σίγουρο.


[0] http://lwn.net/Articles/75174/
[1] http://lwn.net/Articles/39925/
[2] http://lwn.net/Articles/39283/

-- 
Vasilis Vasaitis
"A man is well or woe as he thinks himself so."





More information about the Linux-greek-users mailing list