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

[INFO] HowTo Linux Kernel Compile


spymix

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

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

Ξέρει κανείς με ποιο τρόπο μπορούμε να δούμε κατα πόσο ειναι πιος γρήγορος ο kernel που χτίσαμε σε σχέση με τον default?καποιο benchmark?

 

Δε μου κάνει mount το usb flash disk κ τις κάρτες στο card reader αλλά θα το βρώ (βλέπω τα media αλλά δεν μπορώ να μπώ σε αυτά).Λογικά κάποιο module στα usb :confused:

 

Κάθε φορά που κάνω boot με άλλο kernel (δηλαδή οτάν από τον deafult κανω reboot τον compiled και ανάποδα) δε μπαίνει στο KDE κ κάθε φορά κάνω install τα drivers της Nvidia. Υπάρχει τρόπος να γλυτώσω αυτή την ταλαιπορεία?

 

Πληροφορίες για το πώς ειναι χτισμένος ο default μας kernel μπορούμε να βρούμε στο /boot. Συνήθως εκεί υπάρχει ένα text file configure-2.x.x-default οπου φένεται τι έχει δωθεί σαν module και τι σαν built-in.

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

Το τι εννοούμε γρήγορος για έναν kernel σηκώνει μεγάλη συζήτηση. Σε χρήσεις desktop συνήθως την ταχύτητα την εννούμε ως αποκρισιμότητα (responsiveness), η οποία όμως στην πραγματικότητα λειτουργεί σε βάρος των επιδόσεων μιας εφαρμογής. Επί πλέον, το responsiveness είναι πολύ δύσκολο να μετρηθεί γιατί είναι πολύ δύσκολο να οριστεί. Αν θέλεις κάνε μια αναζήτηση στην Linux Kernel Mailing List για παλαιότερα άρθρα του Con Kolivas ο οποίος έχει ασχοληθεί διεξοδικά με το θέμα και έχει αναπτύξει ένα αρκετά καλό σχετικό εργαλείο, το ConTest. Επίσης έλεγξε και το KernBench, το οποίο μετράει τις raw επιδόσεις του kernel (throughput), κάτι μάλλον περισσότερο αντιπροσωπευτικό για servers και λιγότερο για desktops, καθώς και το InterBench, το οποίο μετράει το interactivity αλλά περισσότερο θεωρητικά από ότι το ConTest. Και τα τρία θα τα βρεις στη σελίδα του, εδώ.

 

Δύο γενικά εργαλειάκια benchmark είναι το lmbench και το stress, όμως επειδή προορίζονται για πιο γενικές μετρήσεις το πιθανότερο να μην επισημάνουν καμία διαφορά.

 

Φυσικά μπορείς να κάνεις και τις δικές σου μετρήσεις με την βοήθεια της "time".

 

Κάθε φορά που κάνω boot με άλλο kernel (δηλαδή οτάν από τον deafult κανω reboot τον compiled και ανάποδα) δε μπαίνει στο KDE κ κάθε φορά κάνω install τα drivers της Nvidia. Υπάρχει τρόπος να γλυτώσω αυτή την ταλαιπορεία?

 

Τα modules του kernel πρέπει να φτιάχνονται με βάση τον συγκεκριμένο kernel. Εφόσον εξαιτίας της πολιτικής της nvidia δεν υπάρχει ανοιχτός driver με 3d acceleration, που να μπορεί να συμπεριληφθεί στα kernel sources, αναγκαστικά κάθε φορά που κάνεις recompile τον kernel θα πρέπει να κάνεις και το module της nvidia. Είναι πιθανό να φόρτωνε το module αν έκανες μόνο ασήμαντες αλλαγές στο configuration του kernel σου, όμως το σωστό είναι να χτίζεται από την αρχή και γι' αυτό και το installation script του kernel σβήνει όλα τα παλιά modules πριν αντιγράψει τα καινούρια.

 

Όμως αν δεν κάνεις compile νέο kernel δεν νομίζω ότι είναι λογικό να χρειάζεται να κάνεις compile και το module της nvidia, εφόσον το έχεις κάνει ήδη και βρίσκεται στο /lib/modules/[kernel version]/video/nvidia.ko. Ίσως να κάνω λάθος και να χρειάζεται η βιβλιοθήκη opengl της nvidia να είναι kernel-specific, αν είναι αυτή η περίπτωση δε μπορείς να κάνεις τίποτα άλλο από το να αυτοματοποιήσεις τη διαδικασία με κάποιο scriptάκι (που θα εκτελείται π.χ. σε κάθε εκκίνηση, σημειώνοντας ποιος kernel έχει κάνει boot σε ένα text file και, συγκρίνοντάς τον με αυτόν της προηγούμενης εκκίνησης, να ξαναεγκαθιστά τους drivers αν είναι διαφορετικός).

 

Δε μου κάνει mount το usb flash disk κ τις κάρτες στο card reader αλλά θα το βρώ (βλέπω τα media αλλά δεν μπορώ να μπώ σε αυτά).Λογικά κάποιο module στα usb

 

Μόλις συνδέεις μία συσκευή USB, αν έχεις εγκαταστήσει τους απαραίτητους USB drivers του kernel, στέλνεται μήνυμα στο kernel log με αρκετές λεπτομέρειες. Τις πιο πρόσφατες καταχωρήσεις του kernel log μπορείς να τις δεις με την "dmesg". Οι συσκευές που αναφέρεις αναγνωρίζονται ως "usb storage devices", οπότε πρέπει να έχεις ενεργοποιήσει τον σχετικό driver στον kernel σου. Αν το έχεις κάνει, πρέπει να δεις ένα μήνυμα σαν το παρακάτω:

 

usb 1-10: new high speed USB device using ehci_hcd and address 5

usb 1-10: configuration #1 chosen from 1 choice

scsi4 : SCSI emulation for USB Mass Storage devices

usb-storage: device found at 5

usb-storage: waiting for device to settle before scanning

Vendor: JetFlash Model: TS2GJF110 Rev: 0.00

Type: Direct-Access ANSI SCSI revision: 02

SCSI device sdb: 4096000 512-byte hdwr sectors (2097 MB)

sdb: Write Protect is off

sdb: Mode Sense: 00 00 00 00

sdb: assuming drive cache: write through

SCSI device sdb: 4096000 512-byte hdwr sectors (2097 MB)

sdb: Write Protect is off

sdb: Mode Sense: 00 00 00 00

sdb: assuming drive cache: write through

sdb: sdb1

sd 4:0:0:0: Attached scsi removable disk sdb

usb-storage: device scan complete

 

Αυτό σημαίνει ότι η αποθηκευτική μονάδα σου είναι πια διαθέσιμη σαν block device με όνομα (στο παράδειγμα) /dev/sdb. Μπορείς να την μεταχειριστείς όπως θα μεταχειριζόσουν κι έναν σκληρό δίσκο, π.χ.

 

mount -o uid=dimogrec -t auto /dev/sdb1 /mnt/flashdisk

 

Μην ξεχνάς το concept των permissions μόνο + το γεγονός ότι by default owner μπαίνει όποιος κάνει mount (φυσικά πρέπει να έχει και αυτό το δικαίωμα). Αν θέλεις μπορείς να ορίσεις στο /etc/fstab κάτι σαν

 

/dev/sdb1 /mnt/flashdisk auto user 0 0

 

για να μπορεί να το κάνει mount οποιοσδήποτε χρήστης δίνοντας απλά π.χ. "mount /mnt/flashdisk". Μπορείς να το αυτοματοποιήσεις κι άλλο, ώστε να γίνεται αυτόματα mount με την σύνδεση, με τη βοήθεια του autofs (δες ένα σχετικό tutorial εδώ).

 

ΥΣ. Επειδή απομακρυνόμαστε από το θέμα που είναι και sticky προτείνω να ανοίγεις καινούρια topics για θέματα που δεν σχετίζονται άμεσα με τη διαδικασία configuration και compilation του kernel ;)

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

σ' ευχαριστώ κ πάλι...Εκανα μερικά απο αυτά που λές... αλλά δουλεψαν ... άλλα κάτι έκαναν... αλλά όπως λές θα τα πούμε σε νέο topic :)

Θέλω δουλεία ακόμα ..

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

  • 4 εβδομάδες αργότερα...

Εγώ αυτό που έκανα για να ανεβάσω λίγο τις επιδόσεις, είναι να κάνω compile τον πυρήνα με υποστήριξη ramdisk και να αφιερώσω 256 mb από τη ram ώστε να κάνω mount εκεί το /tmp που χρησιμοποιούν πολλές εφαρμογές. Προς το παρόν έχω κάτι προβλήματα αλλά πιστεύω θα τα διορθώσω. (π.χ κάποιο πρόβλημα πρέπει να υπάρχει με τα permissions του /tmp και των υποφακέλων και δε φορτώνει το kde κατευθείαν στον χρήστη αλλά κρεμάει).

Πάντως η διαφορά στην ταχύτητα μπορώ να πω οτι είναι αισθητή.

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

Εγώ αυτό που έκανα για να ανεβάσω λίγο τις επιδόσεις' date=' είναι να κάνω compile τον πυρήνα με υποστήριξη ramdisk και να αφιερώσω 256 mb από τη ram ώστε να κάνω mount εκεί το /tmp που χρησιμοποιούν πολλές εφαρμογές. Προς το παρόν έχω κάτι προβλήματα αλλά πιστεύω θα τα διορθώσω. (π.χ κάποιο πρόβλημα πρέπει να υπάρχει με τα permissions του /tmp και των υποφακέλων και δε φορτώνει το kde κατευθείαν στον χρήστη αλλά κρεμάει).

Πάντως η διαφορά στην ταχύτητα μπορώ να πω οτι είναι αισθητή.[/quote']

 

Δε χρειάζεται να δημιουργήσεις ramdisk. Μπορείς να κάνεις τη δουλειά σου πολύ καλύτερα με το tmpfs:

>
mount -t tmpfs -ο mode=777,size=268435456 none /tmp

Το tmpfs βρίσκεται εξ ολοκλήρου στη μνήμη, όμως αντίθετα με το Ramdisk, δε χρειάζεται να το κάνεις allocate από πριν. Το μέγεθός του μεταβάλλεται αυτόματα ανάλογα με τα περιεχόμενά του, από 0 μέχρι ένα μέγιστο μέγεθος που καθορίζεις εσύ (και το οποίο μπορείς ανά πάσα στιγμή να αλλάξεις). Πολύ πιο ευέλικτο από το ramdrive συνολικά ;-)

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

Όμορφα :-)

Μόλις διαπίστωσα οτι δεν χρησιμοποιείται και τρομερά το /tmp, κάθε φορά έχει 1mb μέγιστο μέγεθος.

Οπότε η διαφορά στις επιδόσεις μάλλον ήταν της φαντασίας μου....

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

Συνετό θα ήταν να μάθεις να χρησιμοποιείς ένα console editor, όπως το vi.

Όσο για το πρόβλημα που αναφέρεις, κοίτα εδώ:

http://www.insomnia.gr/vb3/showpost.php?p=1170751&postcount=101

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

Αν έχεις των κώδικα του προηγούμενου kernel σου (συνήθως /usr/src/linux-2.x.x.x) τότε οι ρυθμίσεις είναι στο /usr/src/linux-2.x.x.x./.config

Επίσης υπάρχει η περίπτωση να είχε γίνει compile ο πυρήνας με την επιλογή να εμφανίζει τις ρυθμίσεις του (το config αρχείο) στο /proc/config.gz

Τρέχεις λοιπόν τον παλιό πυρήνα, αν τον έχεις, και κοιτάς για το /proc/config.gz

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

Ο προηγούμενος kernel είναι αυτός που μπαίνει με την εγκατάσταση και θέλω να περάσω τον linux-2.6.18-rc5

 

Μπορώ να ακολουθήσω την διαδικασία που περιγράφεται στο πρώτο post και αντί για "make menuconfig" να πατήσω "make oldconfig";

Αυτό θα μου βάλει τις ρυθμίσεις που έχω στον πρώτο kernel (αυτόν που μπήκε με την εγκατάσταση της διανομής);

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

Αυτό που λέω παραπάνω ισχύει; Με το make oldconfig;

Κάπου πρέπει να το είχα διαβάσει αλλά δέν το έχω τσεκάρει, και για να το τσεκάρω τώρα, πρέπει να πάω πάλι για format.

Ξέρει κανείς αν γίνεται για να κάνω αν είναι format;

Μήν μπαίνω σε αυτήν τη διαδικασία τσάμπα

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

Αφού ο προηγούμενος kernel είναι αυτός που μπήκε κατά την εγκατάσταση της διανομής δε θα έχει και τίποτα ιδιαίτερες ρυθμίσεις, οπότε δεν κερδίζεις τίποτα με το να κρατήσεις το .config του. Απλά κάνε compile τον νέο, με τις default ρυθμίσεις του όπως είναι, και αργότερα τον παραμετροποιείς όπως θέλεις.

Ναι λογικά το make oldconfig απ'οτι διαβαζω θα προσπαθήσει να πάρει τις παλιές ρυθμίσεις.

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

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.


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