H μνήμη cache και η παράξενη εντολή vmtouch

Αν υπάρχει μια ανοησία που συνεχώς κυκλοφορεί είναι η χρήση της μνήμης από μια διανομή μνήμης και ποιος την έχει μικρότερη. Συνήθως από πρώην χρήστες των Windows που δεν μπορούν να καταλάβουν τι ακριβώς λέει το αποτέλεσμα της εντολής free(1).

image

Αλλά την μνήμη του υπολογιστή μας την πληρώσαμε με τα λεφτουδάκια μας. Γιατί να την έχουμε να κάθετε αχρησιμοποίητη; Το Linux χρησιμοποιεί την “αχρησιμοποίητη” μνήμη για να κάνει cache προγράμματα και αρχεία αυξάνοντας έτσι την “απόδοση”.

Στο παρόν σημείωμα θα δούμε την παράξενη εντολή vmtouch και πως με αυτή μπορούμε να διερευνήσουμε την χρήση της μνήμης cache, αλλά και να την σκαλίσουμε ώστε να στραγγαλίσουμε λίγο περισσότερη απόδοση από το σύστημα σε κρίσιμες υπηρεσίες. Το instagarm την χρησιμοποιεί, γιατί όχι και εμείς;

Και ένας απλός τρόπος να αποκτήσουμε περισσότερη μνήμη είναι αυτός.
(*) Ποτέ δεν παλιώνει αυτό το ανέκδοτο).

Παραδείγματα χρήσης

:rocket:~ ❯ vmtouch -f /usr/bin 2>/dev/null ✘ 130
Files: 2011
Directories: 1
Resident Pages: 92122/92122 359M/359M 100%
Elapsed: 0.022564 seconds

Ας δούμε πόσο ποσοστό ενός αρχείου είναι μέσα στην μνήμη cache

🚀Videos  vmtouch -v lecture.mp4
lecture.mp4
[                                                            ] 0/48044

           Files: 1
     Directories: 0
  Resident Pages: 0/48044  0/187M  0%
         Elapsed: 0.001063 seconds

Το αρχείο αυτό δεν έχει χρησιμοποιηθεί ακόμα και δεν υπάρχει στην μνήμη cache. Ας το φορτώσουμε

🚀Videos  vmtouch -vt 3.\ lecture.mp4
lecture.mp4
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 48044/48044

           Files: 1
     Directories: 0
   Touched Pages: 48044 (187M)
         Elapsed: 0.4367 seconds

Πλέον το αρχείο υπάρχει στην μνήμη και καταλαμβάνει 187M αυτής. Δεν μας πειράζει που είναι εκεί, αν το παίξουμε δεν θα προσπελαστεί καθόλου ο δίσκος, αλλά ας το αφαιρέσουμε

🚀Videos  vmtouch -ve lecture.mp4

Που μπορεί να φανεί χρήσιμο αυτό; Για ένα απλό χρήστη όχι σε πολλά πράγματα, πέραν του να καταλάβει τι ακριβώς σημαίνει και πως λειτουργεί το cache. Αλλά μπορεί αυτό το βίντεο να είναι σε κάποιο απομακρυσμένο υπολογιστή και η σύνδεση να είναι αργή ή αναξιόπιστη. Αν το φορτώσεις στην μνήμη πριν το δεις θα έχεις ένα ομαλό παίξιμο χωρίς σπασίματα.

Ένα ποιο πρακτικό παράδειγμα

Ανακάλυψα την εντολή επειδή την χρησιμοποιεί ένα raspberry που έχω να τρέχει την διανομή dietpi. Τρέχει μια υπηρεσία vmtouch.

systemctl cat vmtouch.service
# /lib/systemd/system/vmtouch.service
[Unit]
Description=vmtouch
Documentation=https://github.com/hoytech/vmtouch/blob/master/vmtouch.pod
DefaultDependencies=no
After=local-fs.target
Conflicts=shutdown.target
Before=shutdown.target

[Service]
EnvironmentFile=/etc/default/vmtouch
ExecStart=/usr/bin/vmtouch $VMTOUCH_OPTIONS $VMTOUCH_FILES

[Install]
WantedBy=local-fs.target
cat /etc/default/vmtouch
# Whitespace separated list of files and directories for vmtouch to operate on
VMTOUCH_FILES="/boot/dietpi /boot/dietpi.txt"

# Options to pass to vmtouch itself: https://github.com/hoytech/vmtouch/blob/master/vmtouch.pod
VMTOUCH_OPTIONS="-l"

Αυτό που κάνει είναι να φορτώνει και κλειδώνει στην μνήμη (με χρήση της mlock(2) ) κάποια βασικά αρχεία ρυθμίσεων και προγράμματα. Η πρόσβαση στον δίσκο (είναι και vfat κατάτμηση) είναι αργή και αυτό το μικρό κόλπο θυσιάσει λίγη από την φτωχή μνήμη που διαθέτει ο υπολογιστής για να αυξήσει δραματικά την ταχύτητα και την απόδοση τουλάχιστον στην αρχή. Αυτή την στιγμή

root@PiGizmo:~# vmtouch /boot/dietpi
           Files: 60
     Directories: 3
  Resident Pages: 14/378  56K/1M  3.7%
         Elapsed: 0.01064 seconds

Διαβάστε

Στο σημείωμα αυτό αγγίξαμε μόνο την επιφάνεια του τι μπορείς να κάνεις με το vmtouch.

Στην σελίδα του προγράμματος Hoytech υπάρχουν πολλά παραδείγματα χρήσης σε επαγγελματικά περιβάλλοντα. Πως το spotify και το instagram την χρησιμοποιεί, πως μπορείς να αυξήσεις την απόδοση του emacs κατά 1000% και πολλά άλλα. Ένας επαγγελματίας διαχειριστής συστήματος σίγουρα θα ωφεληθεί από την μελέτη των πολλών συνδέσμων σε αυτή την σελίδα και ίσως να καταφέρει να ξεπεράσει κάποιο bootleneck στο σύστημα του.

Επίσης διαβάστε ξανά

Δείτε επίσης: vmprobe, fmlock , gopreload.

3 «Μου αρέσει»