Προς το περιεχόμενο

[ΟΔΗΓΟΣ] Διαμόρφωση και Βελτίωση επιδόσεων ssd


rearshooter

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Με αφορμή ένα θέμα που είχαμε με τους Λινουξάδες συζητητές είπα να ξεκινήσω τον παρακάτω οδηγό συνοψίζοντας τις κινήσεις που πρέπει να κάνουμε μετα την αγορά ενός ssd.

 

*Στα παραδείγματά μου θα χρησιμοποιώ τον ssd σαν sda θεωρώντας τον 1ο δίσκο του συστήματος.

 

Βήμα πρώτο (fdisk)

>fdisk -H32 -S32 /dev/sda

Command (m for help): o -> η επιλογή μας

.....

Command (m for help): n -> επιλογή

Command action

e extended

p primary partition (1-4)

p -> επιλογή

Partition number (1-4): 1 -> επιλογή

First cylinder (1-15314, default 1): 2 -> ιδιαίτερα σημαντικό για ocz σύμφωνα με την κατασκευάστρια

Last cylinder.... πατάμε enter με την προυπόθεση να μην έχουμε άλλο διαμέρισμα στον ssd μας(αποψή μου να μην δημιουργούμε κατατμήσεις παρά μόνο του λειτουργικού μας)

Command (m for help): t -> επιλογή

Selected partition 1

Hex code (type L to list codes): 83 -> επιλογή

Command (m for help): w -> επιλογή

The partition table has been altered!

......

 

Βήμα δεύτερο (δημιουργία συστήματος αρχείων)

Για ocz δίσκους δίνουμε

>mkfs.ext4 -O extent -b 4096 -E stride=128,stripe-width=128 /dev/sda1

για τους υπόλοιπους

>mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/sda1

 

Βήμα τρίτο (Σωστές εντολές στο αρχείο /etc/fstab)

παραθέτω τις εντολές που χρειάζονται για τον ssd μόνο

 

>/dev/sda1 / ext4 discard,noatime,errors=remount-ro 0 1
tmpfs /tmp	 tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0

*

Αν δεν μας πειράζει να χάνονται τα logs μεταξύ των επανεκκινήσεων τότε επιπροσθέτως μπορούμε να βάλουμε και την παρακάτω γραμμή.

>tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0

 

* στο gentoo πρέπει να δώσουμε όλο το μέγεθος της ram και να είναι τουλάχιστον 6gb αλλιώς εφαρμογές όπως το libreoffice και firefox δεν θα γίνουν compile.

κάπως έτσι:

>none /tmp tmpfs nodev,nosuid,mode=1777,size=6G 0 0
none /var/tmp tmpfs nodev,nosuid,mode=1777,size=6G 0 0

 

Βήμα τέταρτο (elevator=deadline)

Στις διανομές που έχουν grub2 επεξεργαζόμαστε το αρχείο /etc/default/grub ,

βρίσκουμε την γραμμή GRUB_CMDLINE_LINUX_DEFAULT

και την αλλάζουμε ως εξής ->> GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=deadline"

στις διανομές με grub 1 ανοίγουμε το αρχείο /boot/grub/menu.lst και προσθέτουμε δίπλα στην λέξη quiet ro κτλ --> elevator=deadline

 

Βήμα πέμπτο (rc.local)

Επεξεργαζόμαστε το αρχείο /etc/rc.local

και βάζουμε πάνω(πριν) από την γραμμή exit 0

τις γραμμές

>echo deadline > /sys/block/sda/queue/scheduler

(πλεονασμός) και

>echo 1 > /sys/block/sda/queue/iosched/fifo_batch

Βήμα έκτο

Μετακίνηση της cache του firefox στην μνήμη ραμ

ανοίγουμε την καρτέλα about:config στον firefox(iceweasel)

δεξί κλικ δεξιά -> νέα τιμή -> αλφαριθμητικό και γράφουμε--> browser.cache.disk.parent_directory -> enter -> δίνουμε την τιμή /tmp

 

Βήμα έβδομο (0 swap , καθαρισμός cache)

επεξεργαζόμαστε το αρχείο /etc/sysctl.conf

 

και στο τέλος βάζουμε τις γραμμές

>vm.swappiness=0
vm.drop_caches=3 **

 

** δεν είμαι σίγουρος οτι δουλεύει με ασφάλεια από την εκκίνηση του λειτουργικού

 

Τέλος!!

 

Για να δούμε τις επιδόσεις του δίσκου δίνουμε

>hdparm -Tt /dev/sda

για ανάγνωση και

>dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc

για εγγραφή

αλλά το τερματικό πρέπει να <<δείχνει>> μέσα στον δίσκο μας

Επεξ/σία από rearshooter
  • Like 6
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ. (επεξεργασμένο)

ωραίος, πως μπορώ να κάνω άλλο ένα partition όμως που να είναι aligned σωστά?

άκυρο

Επεξ/σία από warlock9_0
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Thanks για τον οδηγο!

 

Εφοσον εχεις ορισει στον grub τον elevator, δεν χρειαζεται και στο rc.local.

 

Η στο ενα , ή στο αλλο. :P

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

γι αυτό σημείωσα πλεονασμός!δεν χρειάζεται όντως!

warlock9_0 είπαμε 1 κατάτμηση στον ssd..

 

πάντως τα βήματα είναι ίδια αλλά επιλέγεις την 2η ,3η κτλ με προυποθεση το σωστο να χει γινει εξαρχής αλλιώς δεν θα δεις καμία διαφορά

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

μωρε ας είχα δύο δίσκους και δεν θα έκανα partition, θα έβαζα ένα στο καθένα

αλλά ο δίσκος που είχα πριν πεθαίνει και αναγκαστικά θα πάνε στον ssd και τα δύο λειτουργικά

τα έκανα τα partition τελικά μέσα από την εγκατάσταση των windows και βγήκαν aligned μετά από διάφορες πράξεις που έκανα για να δω τι μέγεθος θα πάρει το καθένα

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νοικοκυρεμένα πράγματα. Σε ευχαριστούμε που τα μάζεψες.

 

Αν γινόταν και sticky μαζί με κάποια άλλα τι ωραία που θα ήταν....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ωραίο το άρθρο. Μου δημιουργεί ερωτήματα όμως:

 

1) δεν έχω rc.local, μπορώ να το φτιάξω άφοβα? έχω systemd

2) βάζω deadline στον grub αλλά με cat /sys/block/sda/queue/scheduler μετά απο reboot δεν είναι ενεργός ο deadline αλλά ο cfq

3) Τι διαφορά έχει το none από το tmpfs στο fstab? Δηλαδή η παρακάτω γραμμή από αυτές του rearshooter?

>none /tmp tmpfs nodev,nosuid,mode=1777,size=12G 0 0

 

Πέραν αυτών οφείλω να συμπληρώσω τα εξής, αφορούν το uefi ή/και το btrfs.

Αν έχουμε UEFI και θέλουμε UEFI Grub τότε ΠΡΕΠΕΙ να γίνει ένα μικρό partition στην αρχή του SSD, 2mb FAT.

Αν βάλουμε btrfs ΜΕ subvolumes τότε ή μόνη λύση είναι ο Grub2, δεν παίζει ο syslinux.

 

@rearshooter, ενδέχεται να χάνω σε ταχύτητα λόγο του partition που έχω για το uefi.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Με αφορμή ένα θέμα που είχαμε με τους Λινουξάδες συζητητές είπα να ξεκινήσω τον παρακάτω οδηγό συνοψίζοντας τις κινήσεις που πρέπει να κάνουμε μετα την αγορά ενός ssd.

 

Ωραίος. Παίρνω το θάρρος να κάνω κάποιες διευκρινήσεις.

 

 

Βήμα πρώτο (fdisk)

>fdisk -H32 -S32 /dev/sda

First cylinder (1-15314, default 1): 2 -> ιδιαίτερα σημαντικό για ocz σύμφωνα με την κατασκευάστρια[/font]

 

Εδώ λέμε στο fdisk να χρησιμοποιήσει εικονική γεωμετρία με 32 κεφαλές και 32 τομείς. Αυτό σημαίνει πως ο κάθε κύλινδρος θα έχει 32*32*512=512KB μέγεθος οπότε όλες οι κατατμήσεις θα είναι ευθυγραμμισμένες στα 512KB που είναι το πιο σύνηθες erase block και καλύπτει και μικρότερα EB καθώς και δίσκους με τομείς των 4KB.

 

Το παραπάνω αποτελεί σύσταση του Ted Ts'o (δημιουργός του ext4) και ήταν καλή γενική σύσταση όταν έγινε. Ένας άλλος τρόπος είναι να παρατήσουμε ηλίθια αναχρονιστικά πράγματα όπως η CHS και να χρησιμοποιήσουμε κατευθείαν LBA. Όταν έκανε τη σύσταση ο Ted Ts'o, μπορούσες να χρησιμοποιήσεις sectors στο fdisk στην "non dos-compatible" λειτουργία του fdisk αλλά επειδή πολύς κόσμος θα δίσταζε να το κάνει, το "-H32 -S32" ήταν πιο καλό σαν γενική σύσταση.

 

Από την έκδοση 2.17.2 του πακέτου util-linux η οποία βγήκε 22 Μαρτίου 2010, το fdisk χρησιμοποιεί από τη μάνα του LBA και ευθυγραμμίζει στο 1MB οπότε καλύπτονται όλες οι περιπτώσεις και δεν χρειάζονται χαζά κόλπα με heads και sectors. Αν η διανομή μας έχει παλαιότερη έκδοση util-linux καλύτερα να αλλάξουμε διανομή :)

 

>/dev/sda1 / ext4 discard,noatime,errors=remount-ro 0 1
tmpfs /tmp     tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0

 

Μέσα στον κατάλογο /tmp υπάρχουν οι κατάλογοι .ICE-Unix και .X11-Unix οι οποίοι είναι απαραίτητοι για τη λειτουργία του X. Σχεδόν όλες οι διανομές φροντίζουν στα init scripts τους να δημιουργήσουν αυτούς τους καταλόγους σε κάθε boot αν δεν υπάρχουν οπότε δεν υπάρχει πρόβλημα να είναι το /tmp σε tmpfs απλά το λέω εγκυκλοπαιδικά μήπως κάποια διανομή δεν το κάνει.

Μέσα στον κατάλογο /var/spool σε κάποιες διανομές υπάρχουν τα αρχεία του cron οπότε αν ο κατάλογος χρησιμοποιεί tmpfs δεν θα παίζουν cronjobs σε αυτές τις διανομές.

 

και στο τέλος βάζουμε τις γραμμές

>vm.swappiness=0
vm.drop_caches=3 **

 

** δεν είμαι σίγουρος οτι δουλεύει με ασφάλεια από την εκκίνηση του λειτουργικού

Δεν είναι ότι δεν θα δουλεύει με ασφάλεια αλλά έχει νόημα να μπει στο sysctl.conf ?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

θα με βασανίσετε σαββατιάτικα... έκανα bios update και έχασε το efi boot, μπαίνω με μαϊμουιδιές μέχρι να μπορέσω να το διορθώσω

update: fixed, τουλάχιστον όταν θα πάτε όλοι σε uefi+gpt θα έχω συλλέξει γνώσεις για όλους :)

 

το deadline το έβαλα μέσω udev, είναι εύκολο και μπορεί και ξεχωρίζει τους δίσκους αν είναι ssd ή hdd, copy paste από το wiki:

To do this, create and edit a file in /etc/udev/rules.d named something like '60-schedulers.rules'. In the file include the following:

>
# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

 

υγ: το bios update δεν άλλαξε κάτι στις ταχύτητες του ssd :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ωραίο το άρθρο. Μου δημιουργεί ερωτήματα όμως:

 

1) δεν έχω rc.local, μπορώ να το φτιάξω άφοβα? έχω systemd

2) βάζω deadline στον grub αλλά με cat /sys/block/sda/queue/scheduler μετά απο reboot δεν είναι ενεργός ο deadline αλλά ο cfq

3) Τι διαφορά έχει το none από το tmpfs στο fstab? Δηλαδή η παρακάτω γραμμή από αυτές του rearshooter?

>none /tmp tmpfs nodev,nosuid,mode=1777,size=12G 0 0

 

Πέραν αυτών οφείλω να συμπληρώσω τα εξής, αφορούν το uefi ή/και το btrfs.

Αν έχουμε UEFI και θέλουμε UEFI Grub τότε ΠΡΕΠΕΙ να γίνει ένα μικρό partition στην αρχή του SSD, 2mb FAT.

Αν βάλουμε btrfs ΜΕ subvolumes τότε ή μόνη λύση είναι ο Grub2, δεν παίζει ο syslinux.

 

@rearshooter, ενδέχεται να χάνω σε ταχύτητα λόγο του partition που έχω για το uefi.

1)θα χεις local.d ?

2)απαντησες ηδη αλλα με εκτελεσιμο script στην εκκίνηση ή με grub γινεται..τα χω δοκιμασει και τα 2 και πιάνουν

3)το ιδιο είναι (εσυ οριζεις και το μεγεθος -- το χρησιμοποιω και γω στο gentoo μου)

 

 

 

@imitheos ευχαριστουμε για τις διευκρινήσεις

οσο για το sysctl.conf έχεις δίκιο βασικά τώρα που το σκέφτομαι βάζουμε

echo 3 > /proc/sys/vm/drop_caches στο etc/rc.local

 

επισης για όσους χρησιμοποιουν tor δεν βαζουν το /var/log στην ραμ!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πριν βιαζόμουνα να φύγω οπότε τα έγραψα όπως όπως.

 

Το CHS έχει προβλήματα στην προσπέλαση των "μεγάλων" δίσκων (τα γνωστά 8GB, 130GB, κτλ) για αυτό και κανένα λειτουργικό δεν χρησιμοποιεί CHS για να προσπελάσει τον δίσκο εδώ και χρόνια. Εκτός από το πρακτικό θέμα ότι δεν μπορείς να προσπελάσεις τους δίσκους, δεν έχει και νόημα να χρησιμοποιείς CHS γιατί οι δίσκοι δεν έχουν σταθερό αριθμό τομέων σε όλη την επιφάνειά τους.

 

Στο DOS είχε οριστεί πως η 1η κεφαλή έπρεπε να είναι κενή για κάποιο λόγο. Αυτό λοιπόν το γεγονός σε συνδυασμό ότι σχεδόν παντού χρησιμοποιείται γεωμετρία με 63 τομείς συνεπάγεται ότι η 1η κατάτμηση αρχίζει πάντα στον τομέα 63 και όχι στον τομέα 1. Μία κεφαλή είπαμε μένει κενή * 63 τομείς = 63 τομείς. Έτσι λοιπόν όταν σε παλιό fdisk επιλέγαμε ως κύλινδρο-αρχή τον κύλινδρο 1 αυτό αντιστοιχούσε στον τομέα 63 δηλαδή ένα τμήμα του 1ου κυλίνδρου έμενε αχρησιμοποίητο (και αυτούς τους "άχρηστους" τομείς εκμεταλλεύεται το grub για να βάλει εκεί τα αρχεία του). Έτσι όμως ακόμη και στο σενάριο που έχουμε επιλέξει -H32 -S32, λόγω αυτής της μετατόπισης, η 1η κατάτμηση δεν θα είναι ευθυγραμμισμένη για αυτό γίνεται η προτροπή που αναφέρεις να αρχίσουμε την κατάτμηση στον κύλινδρο 2.

 

Αν έχουμε δίσκο στον οποίο έχουν δημιουργηθεί κατατμήσεις από παλιό fdisk ή από Windows XP, θα δούμε ότι ενώ το fdisk -l αναφέρει κύλινδρος 1, το fdisk -lu αναφέρει τομέας 63 ως αρχή (ή 32 με το παραπάνω σενάριο).

 

Το fdisk που υπάρχει πλέον σε όλες τις διανομές (όσες έχουν util-linux πιο νέο από Μάρτιο 2010) έχει καταργήσει τον τρόπο CHS και αν δεν τον επιλέξουμε ρητά εμείς, χρησιμοποιεί LBA δηλαδή ένα απλό αριθμό τομέα από το 0 μέχρι όσους τομείς έχει ο σκληρός μας. Αν δεν το αλλάξουμε εμείς πραγματοποιεί ευθυγράμμιση στο 1MB για αυτό και θα δούμε ότι την 1η κατάτμηση την αρχίζει το λιγότερο στον τομέα 2048 οπότε όλες οι κατατμήσεις θα είναι ευθυγραμμισμένες σε όλα τα σενάρια από σκληρό δίσκο με τομείς των 4K μέχρι SSD με Erase Block του 1MB.

 

Έτσι αν κάποιος δεν χρησιμοποιεί γραφικά εργαλεία για αυτή τη δουλειά αλλά θέλει να δουλέψει με το fdisk, μπορεί να το κάνει χωρίς να χρειάζεται ειδικές παραμέτρους και μπορεί να τρέξει απλά fdisk /dev/σκληρός.

 

οσο για το sysctl.conf έχεις δίκιο βασικά τώρα που το σκέφτομαι βάζουμε

echo 3 > /proc/sys/vm/drop_caches στο etc/rc.local

 

Αυτό θα κάνει ακριβώς το ίδιο με το να το βάλεις στο sysctl.conf. Η swappiness όπως και οι περισσότερες μεταβλητές που ρυθμίζουμε μέσω sysctl ή /proc, λαμβάνουν μια τιμή και έχουμε την ρύθμιση όπως την θέλουμε. πχ γράφεις την τιμή "deadline" και αλλάζει τον scheduler μέχρι να γίνει reboot.

 

Στην drop_caches δεν γράφεις τιμή μια φορά αλλά κάθε φορά που θέλεις να ελευθερωθεί το cache. Έτσι, θέτοντας της τιμή 3 στο rc.local θα αφαιρεθούν από το cache όσα δεδομένα μπήκαν στο cache μέχρι τότε δηλαδή κατά την εκκίνηση του συστήματος. Για αυτό είπα πριν ότι δεν έχει νόημα να την τρέξεις κατά το boot εκτός αν ήθελες αυτή την λειτουργία οπότε πάω πάσο.

  • Like 3
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ευχαριστουμε αλλη μια φορα imitheos!

 

παντως και μενα κατι <<gurus>> του gentoo μου προτειναν τα παραπανω στο fdisk τι να πω.Συγκεκριμενα εχω και αποδειξεις αν θελεις διαβασε στην αλλη δημοσιευση

ισως να φταιει το mkfs.ext4?Παντως ΟΧΙ gparted ξαναλεω.Καλυτερα με το χερι συν οτι με το mkfs.ext4 μπορεις να βαλεις απειρες παραμετρους.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...