Utente:MaXeR: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
nessun oggetto della modifica
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 1: Riga 1:
''Torna all'indice: [[Linux Kernel in a Nutshell]]''
{{stub}}
La soluzione pi� diffusa e stabile, per la messa on-line di un applicativo scritto in ruby on rails, � data dall'accoppiata Mongrel e Apache2!


__TOC__
= Introduzione =
La struttura del nostro ambiente di produzione � descritta nella seguente figura:


Il [[LKN:_Personalizzare_un_Kernel|capitolo precedente]] ci ha insegnato i meccanismi per la riconfigurazione del kernel; in questo capitolo arriva la parte interessante, in cui si possono trovare tutte le modifiche pi� comuni che gli utenti hanno bisogno di apportare ai loro kernel, con le istruzioni specifiche per effettuarle.
TODO!!!




== '''Dischi''' ==
Tutte le richieste arriveranno al server web apache, che si occuper� di dirottare le richieste dinamiche a uno dei server mongrel, mentre servir� i contenuti di tipo statico direttamente, senza cos� appesantire le istanze di mongrel con richieste che possono essere processate direttamente da apache.


Il kernel Linux supporta una grande variet� di differenti tipi di disco. Questa sezione mostra come configurare il kernel in modo tale che supporti la maggior parte dei modelli pi� comuni di controller di disco.
Questa struttura, inoltre, permette espansioni future per garantire una buona scalabilit� in caso di un forte aumento delle richieste: potremo, in futuro, spostare le verie istanze di mongrel su server differenti, distribuire il filesystem in modo da avere "pi� apache" pronti ad accettare le richieste, ...




'''Dispositivi USB'''
= Installazione =
 
== Apache2 ==
Per utilizzare un dispositivo di archiviazione USB (come quelli chiamati comunemente memorie "flash" USB, oppure dischi esterni USB) il supporto USB deve prima funzionare correttamente. Fare riferimento alla ricetta nella sezione chiamata [[USB]] per sapere come fare.
Per installare Apache sufficiente un  
 
Un dispositivo di archiviazione USB pu� essere identificato utilizzando il programma ''lsusb''. Se la sequenza di comandi che segue produce i risultati mostrati, nel sistema � presente un dispositivo di archiviazione USB:
 
<pre>
$/usr/sbin/lsusb -v | grep Storage
      bInterfaceClass        8 Mass Storage
</pre>
 
Abilitarla nel modo seguente:
 
1. Un dispositivo di archiviazione USB � in realt� undispositivo USB SCSI che comunica su un collegamento USB. Per questo motivo, deve essere abilitato il sottosistema SCSI:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI Device Support
</pre>
 
2. Anche nel sistema SCSI, si deve abilitare il "SCSI disk support" affinch� il dispositivo venga montato correttamente:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI disk support
</pre>
 
3. Abilitare il supporto di archiviazione USB:
 
<pre>
Device Drivers
  USB Support
  [M] USB Mass Storage support
</pre>
 
Nelle pagine che seguono verranno illustrate specifici dispostivi di archiviazione USB per i quali si rende necessaria una configurazione differente, in quanto non seguono gli standard USB e richiedono un codice speciale. Se si possiede uno di questi dispositivi, � necessario abilitare il supporto per essi.
 
 
'''Dischi IDE'''
 
I dischi IDE sono i pi� comuni dischi per PC. Il dispositivo che abilita tali dischi affinch� essi lavorino correttamente � un controller di disco IDE. Per determinare se si abbia un controller di disco IDE sul proprio sistema, usare il comando ''lspci'' nel seguente modo:
 
<pre>
$/usr/sbin/lspci | grep IDE
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE
Controller (rev 02)
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev
02)
</pre>
 
Tenete presente che il risultato del comando ''lspci'' probabilmente non sar� identico a quello mostrato sopra. Ci� che importa invece � che il comando mostri un qualunque controller IDE (il primo dispositivo nel precedente esempio). Se si riscontrano solo controller SATA, vedere la sezione successiva 'Serial ATA (SATA)'.
 
Ora seguiamo i seguenti passi:
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il sottosistema IDE e il supporto IDE:
 
<pre>
Device Drivers
    [*] ATA/ATAPI/MFM/RLL support
    [*]  Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
</pre>
 
3. Nel sistema ATA, occorre abilitare lo specifico tipo di controller IDE che si possiede, al fine di farlo funzionare correttamente. Per avere un buon backup nel caso si selezioni il tipo errato, selezionare la voce controller IDE 'generico':
 
<pre>
Device Drivers
    ATA/ATAPI/MFM/RLL support
        [*]    generic/default IDE chipset support
</pre>
 
4. Abilitare i differenti controller PCI IDE:
 
<pre>
Device Drivers
    ATA/ATAPI/MFM/RLL support
        [*]    PCI IDE chipset support
</pre>
 
Ci� porta all'apertura di un lungo sottomenu di differenti tipi di controller IDE. Selezionare il proprio in base al nome del dispositivo mostrato col comando ''lspci''
 
 
'''Serial ATA (SATA)'''
 
SATA � un tipo di controller di disco che rappresenta il successore del controller di disco IDE. Per determinare se si possiede sul sistema un controller di disco SATA, lanciare il seguente comando:
 
<pre>
$/usr/sbin/lspci | grep SATA
00:1f.2IDEinterface:IntelCorporation82801EB(ICH5)SATAController(rev
02)
</pre>
 
Tenere presente che il risultato del comando probabilmente non sar� identico. Ci� che importa � che il comando mostri un qualunque dispositivo SATA. I dischi SATA usano una libreria kernel chiamata ''libata'' che si occupa della maggior parte delle funzionalit� di SATA. ''That library uses the SCSI layer to talk to the block layer, so several different kernel options need to be enabled in order for SATA disks to work properly.''
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il sottosistema SCSI:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI Device Support
</pre>
 
3.  Anche nel sistema SCSI, deve essere abilitata la voce "SCSI disk support" affinch� il dispositivo funzioni correttamente:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI disk support
</pre>
 
4. Le opzioni SATA sono sotto la sezione "SCSI low-level drivers":
 
<pre>
Device Drivers
    SCSI Device Support
        SCSI low-level drivers
            [*] Serial ATA (SATA) support
</pre>
 
5. In questa sezione, abilitare il particolare controller SATA che si possiede. Vedere l'output del comando ''lspci'' precedentemente menzionato per avere una lista dei tipi di controller SATA presenti sul proprio sistema. Per esempio, la maggior parte delle schede madri INTEL richiedono il driver PIIX/ICH SATA (come mostrato nel precedente esempio):
 
<pre>
Device Drivers
    SCSI Device Support
        SCSI low-level drivers
            [*] Serial ATA (SATA) support
            [*]  Intel PIIX/ICH SATA support
</pre>
 
 
== '''Masterizzare un CD-ROM''' ==
 
Masterizzare un CD-ROM � davvero semplice in Linux. Se il kernel che si possiede permette la lettura di un CD-ROM, allora ne permetter� anche la masterizzazione.
Ci sono due metodi per abilitare il supporto CD-ROM in Linux, uno per i lettori IDE ed uno per i lettori SCSI e SATA
 
 
'''Lettori CD-ROM IDE'''
 
I lettori CD-ROM IDE sono gestiti dallo stesso controller IDE del disco principale. Assicurarsi che il controller IDE sia correttamente supportato come descritto nella sezione ''Dischi IDE''. Se lo �, allora occorre selezionare solo un'altra voce nella procedura di configurazione:
 
<pre>
Device Drivers
    [*] ATA/ATAPI/MFM/RLL support
    [*]  Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
    [M]    Include IDE/ATAPI CDROM support
</pre>
 
 
'''Lettori CD-ROM SCSI e SATA'''
 
I lettori CD-ROM SCSI e SATA sono gestiti dallo stesso controller del disco principale. Assicurarsi che il controller SCSI o SATA sia correttamente supportato. Per i dischi SATA, vedere la precedente sezione ''Serial ATA (SATA).'' 
Per supportare lettori CD-ROM SCSI o SATA, il driver CD-ROM SCSI deve essere abilitato:
 
<pre>
Device Drivers
    SCSI Device Support
        [*] SCSI CDROM support
</pre>
 
Una volta che � stato abilitato, il lettore CD-ROM SCSI o SATA dovrebbe funzionare correttamente.
 
 
== '''Dispositivi''' ==
 
Linux supporta un grande numero di differenti tipi di dispositivi (pi� di qualunque altro sistema operativo). Questa sezione descrive come abilitare i dispositivi pi� comuni.
 
 
'''USB'''
 
Linux supporta molti tipi di dispositivi USB. Per abilitare il supporto USB, bisogna innanzitutto abilitare il supporto per il controller USB, che gestisce il collegamento USB sulla macchina. Per determinare se la propria macchina possiede un controller USB, e di quale tipo �, lanciare il seguente comando:
 
<pre>
$/usr/sbin/lspci | grep USB
00:1d.0 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI
Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI
Controller (rev 02)
</pre>
 
Notare che probabilmente l'output del comando non sar� identico a quello mostrato sopra. Ci� che importa che il comando mostri un qualche controller USB.
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il supporto USB per il kernel: 
 
<pre>
Device Drivers
    USB Support
        [M] Support for Host-side USB
</pre>
 
3. Abilitare lo specifico controller host USB per la propria macchina (per maggior sicurezza abilitarli tutti se non si conosce con certezza quale si possiede):
 
<pre>
Device Drivers
    USB Support
    ---  USB Host Controller Drivers
    [M]  EHCI HCD (USB 2.0) support
    [M]  OHCI HCD support
    [M]  UHCI HCD (most Intel and VIA) support
</pre>
 
4. Bisogna abilitare i driver anche per gli specifici dispositivi individuali USB. Gran parte di essi si trovano nella sezione driver USB principale:
 
<pre>
Device Drivers
    USB Support
</pre>
 
Ma alcuni dispositivi, come Video USB, DVB e Audio, sono elencati nella sezione che gestisce tutti questi tipi di dispositivi. Per esempio, il driver audio USB pu� essere trovato nel menu audio:
 
<pre>
<pre>
Device drivers
# apt-get install apache2-mpm-prefork libapache2-mod-proxy-html
    Sound
        [*] Sound card support
            [*] Advanced Linux Sound Architecture
                USB Devices
                    [M] USB Audio/MIDI driver
</pre>
</pre>


Per inserire dispositivi di archiviazione USB (USB flash), vedere la sezione chiamata "Archiviazione USB", all'inizio di questo capitolo.
Consiglio la versione "prefork" in quanto � supportata pienamente anche da php5, e di conseguenza non ci saranno problemi ad installare anche applicazioni come phpmyadmin, molto comoda per la gestione di database mysql. L'installazione base di apache, per�, non � sufficiente per i nostri fini, infatti dobbiamo abilitare alcuni moduli:
 
* deflate
 
* proxy_balancer
'''IEEE 1394 (FireWire)'''
* proxy_connect
 
* proxy_html
IEEE 1394 � comunemente conosciuta col nome FireWire, il nome con il quale fu pubblicizzata dalla Apple Computer. IEEE 1394 � un bus ad alta velocit� che connette dispositivi esterni, come i dispositivi USB.
* proxy_http
 
* proxy
Per determinare se sulla propria macchina sia presente un controller FireWire e di quale tipo sia, lanciare il seguente comando:
* rewrite


per abilitarli:
<pre>
<pre>
$/usr/sbin/lspci | grep FireWire
# a2enmod deflate
06:0c.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000
# a2enmod proxy_balancer
Controller (PHY/Link)
# a2enmod proxy_connect
06:0d.2 FireWire (IEEE 1394): Creative Labs SB Audigy FireWire Port (rev 04)
# a2enmod proxy_html
# a2enmod proxy_http
# a2enmod proxy
# a2enmod rewrite
</pre>
</pre>


Notare che probabilmente l'output non sar� identico; ci� che importa � che il comando mostri un qualche controller FireWire.
La configurazione di default del modulo proxy permette connessioni solo dall'indirizzo ip 127.0.0.1. Questa situazione rende impossibile, per�, l'accesso al VirtualHost che andremo a configurare dall'esterno. A tal proposito dobbiamo modificare il file di configurazione del modulo (''nome del file di configurazione'') modificando la seguente riga:
 
1. Abilitare il supporto PCI per il kernel:


<pre>
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
<Proxy *>
     [*] PCI Support
    AddDefaultCharset off
    Order allow,deny
    Allow from .example.com
     Deny from all
</Proxy>
</pre>
</pre>


2. Abilitare il supporto IEEE 1394 per il kernel:
in


<pre>
<pre>
Device Drivers
<Proxy *>
     IEEE 1394 (FireWire) support
    AddDefaultCharset off
        [*] IEEE 1394 (FireWire) support
    Order allow,deny
</pre>
     Allow from all
 
    #Allow from .example.com
3. Abilitare il particolare tipo di host controller FireWire che si possiede:
</Proxy>


<pre>
Device Drivers
    IEEE 1394 (FireWire) support
        [*] IEEE 1394 (FireWire) support
        ---  Device Drivers
        [M]  Texas Instruments PCILynx support
        [M]  OHCI-1394 support
</pre>
</pre>


4. Per finire, abilitare i particolari tipi di dispositivi FireWire che si possiedono:
Una volta abilitati i moduli e fatte le modifiche necessarie, riavviamo apache:
 
<pre>
Device Drivers
    IEEE 1394 (FireWire) support
        [*] IEEE 1394 (FireWire) support
        ---  Protocol Drivers
        [M]  OHCI-1394 Video support
        [M]  SBP-2 support (Harddisks etc.)
        [ ]    Enable Phys DMA support for SBP2 (Debug)
        [M]  Ethernet over 1394
        [M]  OHCI-DV I/O support
        [M]  Raw IEEE1394 I/O support
</pre>
 
 
'''PCI Hotplug'''
 
I sistemi PCI hotplug stanno diventando sempre pi� popolari grazie all'uso di Express Card e laptop docking stations.
 
Per determinare se la propria macchina possieda un controller Express Card, controllare l'hardware per verificare se si pu� inserire una Express Card.
 
1. Abilitare il supporto PCI per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
</pre>
 
2. Abilitare il supporto PCI hotplug per il kernel:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
    PCI Hotplug Support
        [M] Support for PCI Hotplug (EXPERIMENTAL)
</pre>
 
3. C'� un vasta scelta di differenti tipi di controller PCI hotplug. Per il supporto di gran parte dei portatili e Express Card, abilitare il controller ACPI:
 
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    [*] PCI Support
    PCI Hotplug Support
        [M] Support for PCI Hotplug (EXPERIMENTAL)
        [M]  ACPI PCI Hotplug driver
</pre>
 
4. Abilitare ance il controller PCI Express:
 
<pre>
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
# /etc/init.d/apache2 restart
    [*] PCI Support
    [*] PCI Express Support
    [M]  PCI Express Hotplug driver
</pre>
</pre>


L'installazione e la configurazione base di apache sono terminate.


'''PCMCIA/CardBus'''
== Ruby ==
 
Se non gi� presente sulla macchina, provvediamo ad installare ruby ed i componenti pi� importanti, necessari alla compilazione di mongrel:
Il supporto per dispositivi PCMCIA e CardBus fabbricato su quasi ogni portatile. In ogni caso, i portatili pi� recenti si stanno orientando verso il formato ExpressCard (vedere la ricetta PCI Hotplug nella sezione precedente, ''PCI Hotplug'').
 
Per determinare se sulla propria macchina si possieda un controller PCMCIA, controllare l'hardware per verificare se una card PCMCIA pu� essere inserita.
 
1. Abilitare il supporto PCI per il kernel:


<pre>
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
# apt-get install ruby irb ri rdoc ruby1.8-dev build-essential
    [*] PCI Support
</pre>
</pre>


2. Abilitare il supporto PCCARD per il kernel:
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    PCCARD (PCMCIA/CardBus) support
        [M] PCCard (PCMCIA/CardBus) support
</pre>


3. Abilitare il supporto PCMCIA e il supporto CardBus per coprire il maggior numero di dispositivi:
== Rails ==
Prima di tutto scarichiamo rubygems dal sito ufficiale: http://www.rubygems.org/


In questo momento l'ultima versione la [http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz 0.9.5]:
<pre>
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
# wget http://rubyforge.org/frs/download.php/28174/rubygems-0.9.5.tgz
    PCCARD (PCMCIA/CardBus) support
# tar xzvf rubygems-0.9.5.tgz
        [M] PCCard (PCMCIA/CardBus) support
# cd rubygems-0.9.5
        [M]  16-bit PCMCIA support
# ruby setup.rb
        [*]  32-bit CardBus support
</pre>
</pre>


Abilitare il tipo di card bridge per il proprio portatile. Il pi� comune � il controller "yenta-like":
Ora possiamo installare rails, facendo attenzione alla versione richiesta dal nostro applicativo:
 
* Ultima versione
<pre>
<pre>
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
# gem install rails
    PCCARD (PCMCIA/CardBus) support
        [M] PCCard (PCMCIA/CardBus) support
        [M]  CardBus yenta-compatible bridge support
        [ ]  Cirrus PD6729 compatible bridge support
        [ ]  i82092 compatible bridge support
        [ ]  i82365 compatible bridge support
        [ ]  Databook TCIC host bridge support
</pre>
</pre>
 
* Una versione specifica
 
'''Audio (ALSA)'''
 
Advanced Linux Sound Architecture (ALSA) � l'attuale sound system per il kernel Linux. Un sound system meno recente (OSS) � stato abbandonato, e quasi tutti i vecchi driver sono stati rimossi dall'albero dei sorgenti del kernel.
 
Per determinare quale tipo di sound controller sia presente sulla propria macchina, lanciare il seguente comando:
 
<pre>
<pre>
$/usr/sbin/lspci | grep -i audio
# gem install rails -v 1.2.5
00:1f.5 Multimedia audio controller: Intel Corporation 82801EB/ER (ICH5/
ICH5R) AC'97 Audio Controller (rev 02)
06:0d.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04)
</pre>
</pre>


Notare che l'output probabilmente non sar identico; ci che importa che il comando mostri un qualche controllers audio.
1. Abilitare il supporto base audio:


== Mongrel ==
Mongrel si installa allo stesso modo di rails, inoltre installeremo anche mongrel-cluster, che ci semplificher moltissimo la vita:
<pre>
<pre>
Device Drivers
# gem install mongrel
    Sound
# gem install mongrel_cluster
        [M] Sound Card Support
</pre>
</pre>


2. Abilitare ALSA:
= Configurazione =
 
== Mongrel ==
La configurazione del cluster di server mongrel � semplice, e si riduce a creare un semplice file di configurazione. Questo � quello base, da cui partire:
<pre>
<pre>
Device Drivers
---
    Sound
cwd: /opt/ror/
        [M] Sound Card Support
log_file: log/mongrel.log
            [M] Advanced Linux Sound Architecture
port: "3000"
environment: production
address: 127.0.0.1
pid_file: tmp/pids/mongrel.pid
servers: 3
user: mongrel
group: mongrel
</pre>
</pre>


3. C'� un certo numero di differenti opzioni base ALSA, come per esempio il supporto per il superato protocollo audio OSS. In presenza di applicazioni meno recenti, si dovrebbero abilitare le relative opzioni:
Nei dettagli tutte le voci:
; cwd : ''current work directory'', cio� la directory in cui presente l'applicativo. � consigliato usare SEMPRE un percorso assoluto.
; log_file : dove conservare i log di mongrel. Il valore di default va pi� che bene
; port : la porta iniziale per l'array di server mongrel
; environment : l'envirorment di rails da utilizzare... normalmente si usa production (essendo un server di produzione), ma in casi particolari si pu� inserire un nuovo ambiente.
; address : l'indirizzo IP su cui mettersi in ascolto. Le scelte pi� comuni sono:
:; 127.0.0.1 : il cluster sar� raggiungibile solo da applicazioni residenti sul server su cui � in esecuzione mongrel, impostazione consigliata a meno di configurazioni pi� complesse
:; 0.0.0.0 : il cluster sar� raggiungibile da qualsiasi indirizzo esterno, scelta sconsigliata a meno che non ci si trovi in un ambiente protetto
; pid_file : dove inserire i [[pid]] dei vari processi mongrel
; servers : il numero di server mongrel da lanciare.
; user : l'utente che sar� usato per lanciare i server mogrel
; group :


<pre>
Device Drivers
    Sound
        [M] Sound Card Support
            [M] Advanced Linux Sound Architecture
            [M]  OSS Mixer API
            [M]  OSS PCM (digital audio) API
            [ ]    OSS PCM (digital audio) API - Include plugin system
</pre>


4. Abilitare il particolare tipo di dispositivo audio che si possiede. Le voci relative a PCI card audio sono nel sottomenu PCI:
== Apache ==
Questo � un classico file di configurazione di apache per un VirtualHost, che sfrutta 3 server mongrel.


<pre>
<pre>
Device Drivers
<Proxy balancer://www_test_it_mongrel_cluster>
    Sound
  BalancerMember http://127.0.0.1:8000
        [M] Sound Card Support
  BalancerMember http://127.0.0.1:8001
            [M] Advanced Linux Sound Architecture
  BalancerMember http://127.0.0.1:8002
                PCI Devices
</Proxy>
</pre>


<VirtualHost *>
  ServerAdmin info@debianizzati.org
  ServerName www.test.it
  DocumentRoot /opt/ror/public/
  ErrorLog /var/log/apache2/www.test.it-error.log


=='''CPU'''==
  # Superflue, dato che ogni richiesta "non statica" viene gestita da
  # Mongrel, che usa RubyGems ed ha una configurazione indipendente.
  #  SetEnv RUBYOPT rubygems
  #  SetEnv RAILS_ENV production
  <Directory /opt/ror/public/>
    Options -ExecCGI FollowSymLinks -Indexes
    AllowOverride None
    Order allow,deny
    allow from any
  </Directory>


Se si desidera avere un kernel che lavori il pi� velocemente possibile per il proprio hardware e processore, sono poche le opzioni sulle quali bisogna agire per migliorare le performance. Questa sezione mostrer� alcune delle opzioni che si possono configurare in base ai processori.
  # Inutile cercare di gestire la possibile mancanza di alcuni moduli: ci
  # servono e quindi assumiamo che siano disponibili.
  RewriteEngine on


  # Pagina di "manutenzione" per disabilitare l'accesso all'applicazione.
  RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /maintenance.html [L]


'''Tipi di processori'''
  # Lasciamo le richieste "statiche" ad Apache.
  RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
  RewriteRule (.*) $1 [L]


Nel kernel linux possiamo modificare un gran numero di opzioni per i diversi processori. La prima informazione da ricavare � l'esatto tipo di processore che si sta usando. Per scoprire ci�, lanciare il seguente comando:
  # Le richieste "non statiche" vengono redirette ai membri del cluster.
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/(.*)$ balancer://www_test_it_mongrel_cluster%{REQUEST_URI} [P,QSA,L]


<pre>
  # Comprimiamo un po' di cose.
$cat /proc/cpuinfo  | grep "model name"
  AddOutputFilterByType DEFLATE text/html
model name      : Intel(R) Xeon(TM) CPU 3.20GHz
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE application/xml
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</VirtualHost>
</pre>
</pre>
le spiegazioni sono nei commenti del file di configuarzione. Consiglio di non cancellarli quando si utilizza questo template, in quanto possono sempre tornare utili nel futuro ;)


Notare che l'output probabilmente non sar� identico; ci� che importa � che il comando mostri il nome del modello del processore presente nel sistema.
= Avvio, Arresto e Riavvio di un cluster Mongrel =
In questa parte del tutorial vedremo come lanciare, fermare e riavviare una batteria di server mongrel:
== Avvio ==
== Arresto ==
== Riavvio ==


1. Selezionare il tipo di sottoarchitettura del processore:
== Inserimento nel processo di Boot ==
Giunti a questo punto siamo in grado di gestire manualmente l'avvio, l'arresto e il riavvio di un cluster mongrel, per� siamo di fronte ad un problema: in caso di riavvio (accidentale o no) della macchina dovremo avviare manualmente tutti i vari cluster... questo problema non � assolutamente accettabile in un ambiente di produzione!!!


<pre>
Per ovviare a tutti ci�, inseriremo negli script di boot (e di shutdown) uno script che si prender� il carico di avviare tutti i cluster mongrel da noi specificati.
Processor type and features
    Subarchitecture Type
        (X) PC-compatible
        ( ) AMD Elan
        ( ) Voyager (NCR)
        ( ) NUMAQ (IBM/Sequent)
        ( ) Summit/EXA (IBM x440)
        ( ) Support for other sub-arch SMP systems with more than 8 CPUs
        ( ) SGI 320/540 (Visual Workstation)
        ( ) Generic architecture (Summit, bigsmp, ES7000, default)
        ( ) Support for Unisys ES7000 IA32 series
</pre>


A meno che la propria macchina non appartenga ad uno dei tipi specifici elencati sopra, selezionare la voce PC-compatibile. Comunque, se si desidera creare un singolo kernel che possa girare su tutti i tipi di macchine mostrate, selezionare la voce Generic architecture option. Alcune delle opzioni potrebbero non essere presenti se non si � selezionato l'opzione Symmetric multiprocessing support.
=== File di Configurazione ===
I file di configurazione che verranno letti dallo script andranno inseriti nella directory '''/etc/mongrel_cluster/'''.
Normalmente non � una buona idea, nelle applicazioni in ruby on rails, inserire file di un progetto all'esterno della directory del progetto stesso, in quanto richiederebbe sempre un accesso alla macchina per l'aggiornamento del file di configurazione del cluster, soprattutto se si utilizza il comodo sistema di deploy ''capistrano''.


2. Selezionare il tipo di famiglia di processore. L'opzione PC-compatible deve essere selezionata dalle precedenti opzioni affinch� venga mostrato questo sottomenu:
Per semplificarci la vita useremo un link simbolico. Supponiamo che la nostra applicazione sia in '''/opt/ror/''', e che il file di configurazione sia nella directory di configurazione dell'applicativo: '''/opt/ror/config/'''


<pre>
<pre>
Processor type and features
# ln -s /opt/ror/config/mongrel.yml /etc/mongrel_cluster/www.test.it.yml
    Processor family
        ( ) 386
        ( ) 486
        ( ) 586/K5/5x86/6x86/6x86MX
        ( ) Pentium-Classic
        ( ) Pentium-MMX
        ( ) Pentium-Pro
        ( ) Pentium-II/Celeron(pre-Coppermine)
        ( ) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
        ( ) Pentium M
        (X) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon
        ( ) K6/K6-II/K6-III
        ( ) Athlon/Duron/K7
        ( ) Opteron/Athlon64/Hammer/K8
        ( ) Crusoe
        ( ) Efficeon
        ( ) Winchip-C6
        ( ) Winchip-2
        ( ) Winchip-2A/Winchip-3
        ( ) GeodeGX1
        ( ) Geode GX/LX
        ( ) CyrixIII/VIA-C3
        ( ) VIA C3-2 (Nehemiah)
        ( ) Generic x86 support
</pre>
</pre>


Per maggiori dettagli su questa fase della configurazione, si veda la voce M386 al Capitolo 11 per una completa descrizione di come scegliere la corretta voce di processore in base a quello che si possiede, e per il numero di macchine sul quale si voglia far girare il kernel.
=== Inserimento dello script ===
 
Lo script si trova in '''/usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster''' (supponendo di avere installata la versione 1.0.5 di mongrel_cluster.  
 
Per inserirlo nel processo di avvio � sufficiente eseguire i seguenti comandi:
'''SMP'''
 
Se il proprio sistema ha pi� di una CPU, o una CPU Dual Core o Hyperthreaded, si dovrebbe selezionare l'opzione multiprocessore per il kernel linux in modo da portare vantaggi ai processori addizionali. Se non lo si far�, si sprecheranno risorse per gli altri processori senza tuttavia usarli del tutto.
 
Abilitare il multiprocessing:
 
<pre>
<pre>
Processor type and features
# cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/
    [*] Symmetric multi-processing support
# ln -s /etc/init.d/mongrel_cluster /etc/rc2.d/S90mongrel_cluster
</pre>
</pre>


 
= Conclusione =
'''Preemption'''
Giunti a questo punto abbiamo configurato alla perfezione sia apache che mongrel... se tutto funziona a dovere il nostro applicativo dovrebbe essere visibile dall'esterno ;)
 
Sistemi che fungono da server devono soddisfare a diversi requisiti fra i quali quelli di essere usati come desktop per applicazioni audio e video. Il kernel permette diversi modi di "preemption" in modo da affrontare diversi carichi di lavoro. "Preemption" � la capacit� del kernel di interrompere se stesso mentre sta facendo qualcos'altro, in modo da lavorare per qualcosa che abbia una priorit� pi� alta, ad esempio come aggiornare un programma audio o video.
 
Per cambiare a un diverso modello di preemption, usare questo menu:
 
<pre>
Processor type and features
    Preemption Model
        (X) No Forced Preemption (Server)
    ( ) Voluntary Kernel Preemption (Desktop)
    ( ) Preemptible Kernel (Low-Latency Desktop)
</pre>
 
 
Se si desidera rendere il proprio kernel ancora pi� reattivo verso priorit� pi� elevate di quanto non lo possa essere normalmente con preemption, si possono anche autorizzare interruzioni a una delle protezioni principali interne al kernel:
 
<pre>
Processor type and features
    [*] Preempt The Big Kernel Lock
</pre>
 
Questa opzione pu� essere selezionata solo se in precedenza si sono selezionate le voci "Preemptible Kernel" o "Symmetric multi-processin support".
 
 
'''Suspend'''
 
Il kernel Linux ha la capacit� di autospendersi a disco, permettendo di togliere l'alimentazione e poi, successivamente, di rialimentare e tornare esattamente nel punto in cui la macchina era stata sospesa. Questa funzionalit� � molto utile sui laptop nei quali gira Linux
 
Abilitare questa funzione selezionando:
 
<pre>
Power management options (ACPI, APM)
    [*] Software Suspend
</pre>
 
Il kernel ha bisogno di sapere dove salvare l'immagine del kernel sospesa e poi successivamente da dove riesumarla. Questa locazione � di solito una partizione di swap del kernel sul disco. Per specificare quale partizione dovrebbe essere configurato questo:
 
<pre>
Power management options (ACPI, APM)
    (/dev/hda3) Default resume partition
</pre>
 
Assicurarsi di specificare la partizione giusta per la sospensione della macchina e non usare una partizione in uso dal sistema per dei dati. Il nome della partizione corretta pu� essere ricavato lanciando il seguente comando:
 
<pre>
$/sbin/swapon -s | grep dev | cut -f 1 -d ' '
/dev/hda3
</pre>
 
Usare l'output del comando precedente in questa opzione di configurazione del kernel e nella riga di boot del kernel dove viene specificato da dove il kernel dovrebbe essere riesumato. Dopo che la macchina � stata sospesa, per farla ripartire correttamente, passare l'argomento ''resume=/dev/swappartition alla riga di comando del kernel affinch� usi l'immagine corretta. Se non si vuole arichiviare l'immagine sospesa, usare l'argomento "noresum" da riga di comando del kernel.
 
 
'''CPU Frequency Scaling'''
 
La maggior parte dei moderni processori possono rallentare il clock interno del processore in modo da preservare alimentazione e durata della batteria. Linux supporta questa capacit� e offre una variet� di ''regolatori'' di alimentazione. Differenti regolatori implementano differenti ''heuristics'' in modo da determinare come variare la velocit� del processore in funzione della velocit� del sistema e delle altre variabili.
 
1. Abilitare la funzionalit� della frequenza di scaling di base:
 
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
</pre>
 
2. Selezionare i differenti regolatori di frequenza che si desidera utilizzare:
 
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
    [*]  'performance' governor
    [*]  'powersave' governor
    [*]  'userspace' governor for userspace frequency scaling
    [*]  'ondemand' cpufreq policy governor
    [*]  'conservative' cpufreq governor
</pre>
 
Per maggiori informazioni su ci� che fanno i diversi regolatori, vedere la voce CPU_FREQ al Capitolo 11.
 
3. Selezionare il regolator di default che si desidera lanciare al boot della macchina:
 
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
          Default CPUFreq governor (performance)
</pre>
 
4. Selezionare il particolare tipo di processore della macchina. Per dettagli su come determinare il tipo di processore della macchina, vedere la sezione precedente chiamata "Tipi di processori"
 
<pre>
Power management options (ACPI, APM)
    [*] CPU Frequency scaling
    ---  CPUFreq processor drivers
    [ ]  ACPI Processor P-States driver
    [ ]  AMD Mobile K6-2/K6-3 PowerNow!
    [ ]  AMD Mobile Athlon/Duron PowerNow!
    [ ]  AMD Opteron/Athlon64 PowerNow!
    [ ]  Cyrix MediaGX/NatSemi Geode Suspend Modulation
    [*]  Intel Enhanced SpeedStep
    [*]    Use ACPI tables to decode valid frequency/voltage pairs
    [*]    Built-in tables for Banias CPUs
    [ ]  Intel Speedstep on ICH-M chipsets (ioport interface)
    [ ]  Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
    [ ]  Intel Pentium 4 clock modulation
    [ ]  nVidia nForce2 FSB changing
    [ ]  Transmeta LongRun
</pre>
 
 
'''Differenti Modelli di Memoria'''
 
Linux su hardware Intel 32 bit pu� accedere a 64 Gb di memoria, ma l'indirizzo fisico di un processore a 32 bit � di soli 4 Gb. Per lavorare con questa limitazione, Linux pu� mappare la memoria addizionale in un'altra area e poi selezionarla quando altri programmi ne hanno bisogno. Ma se la propria macchina ha una quantit� di memoria pi� piccola, � pi� facile per Linux non avere problemi nell'occupare aree pi� grandi, cos� risulta benefico dire al kernel quanta memoria si vuole per supportarlo. Per una descrizione pi� dettagliata di questa opzione, si veda la voce HIGHMEM al Capitolo 11.
 
Linux suppporta tre differenti modelli di memoria per processori Intel  32 bit, in funzione della memoria disponibile:
 
- Inferiore a 1 Gb di memoria fisica
- Tra 1 Gb e 4 Gb di memoria fisica
- Oltre 4 Gb di memoria fisica
 
Per selezionare la quantit� di memoria:
 
<pre>
Processor type and features
    High Memory Support
        (X) off
        ( ) 4GB
        ( ) 64GB
</pre>
 
 
 
----
This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5].
----
 
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/ch08.pdf ''Capitolo originale'']
[[Categoria:Kernel]]
1 487

contributi

Menu di navigazione