Configuration Et Optimisation D'un Système FreeBSD
Configuration Et Optimisation D'un Système FreeBSD
Configuration Et Optimisation D'un Système FreeBSD
11.1. Synopsis
La configuration correcte d’un système peut sensiblement réduire la quantité de
travail impliquée dans la maintenance et la mise à jour. Ce chapitre décrit certains des
aspects de la configuration des systèmes FreeBSD.
Ce chapitre décrira également certains paramètres qui peuvent être modifiés pour
configurer un système FreeBSD pour des performances optimales.
Un administrateur devrait ajouter des entrées dans le fichier rc.conf pour remplacer
les valeurs par défaut du fichier /etc/defaults/rc.conf. Les fichiers de valeurs par
défaut ne devraient pas être copiés directement tels quels dans /etc - ils contiennent
des valeurs par défaut, et non pas des exemples. Tout changement spécifique au
système devrait être fait dans le fichier rc.conf.
Un certain nombre de stratégies peuvent être appliquées dans le cas d’applications
en grappe pour séparer la configuration d’un site de celle d’un système afin de
réduire le travail d’administration. L’approche recommandée est de placer la
configuration propre au site dans le fichier /etc/rc.conf.local. Par exemple:
/etc/rc.conf:
sshd_enable="YES"
keyrate="fast"
defaultrouter="10.1.1.254"
/etc/rc.conf.local:
hostname="node1.example.org"
ifconfig_fxp0="inet 10.1.1.1/8"
Le fichier rc.conf peut être distribué à l’ensemble des systèmes en utilisant rsync ou
un programme semblable, tandis que le fichier rc.conf.local reste unique.
Le fichier de configuration /etc/rc.conf est analysé par sh(1). Cela permet aux
administrateurs système d’ajouter un certain niveau de logique à ce fichier, ce qui
peut aider à créer des scénaris de configuration complexes. Veuillez
consulter rc.conf(5) pour plus d’information sur ce sujet.
Ces fichiers sont généralement installés dans le répertoire /usr/local/etc. Dans le cas
où une application possède un grand nombre de fichiers de configuration, un sous-
répertoire sera créé pour les héberger.
Les tailles des fichiers indiquent que seul le fichier srm.conf a été modifié. Une mise à
jour, plus tard, du logiciel Apache ne devrait pas écraser le fichier modifié.
Sous FreeBSD, la plupart des services offerts, comme cron(8), sont lancés par
l’intermédiaire des procédures de démarrage du système. Ces procédures peuvent
varier en fonction de la version de FreeBSD, ou du fournisseur; cependant, l’aspect le
plus important à considérer est que leur configuration de démarrage peut être gérée
à l’aide de procédures de démarrage simples.
#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
name=utility
rcvar=utility_enable
command="/usr/local/sbin/utility"
load_rc_config $name
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}
run_rc_command "$1"
utility_enable="YES"
Cette méthode permet également une manipulation plus aisée des arguments en
ligne de commande, l’inclusion des fonctions offertes par défaut dans /etc/rc.subr,
offre une compatibilité avec l’utilitaire rcorder(8) et fournie une configuration plus
aisée par l’intermédiaire du fichier rc.conf.
Certains services, comme les serveurs POP3, IMAP, etc., peuvent être démarrés en
utilisant inetd(8). Cela implique d’installer le service à partir du catalogue des logiciels
portés et avec une ligne de configuration ajoutée au fichier /etc/inetd.conf, ou en
décommentant une des lignes de configuration déjà présentes. L’utilisation d’inetd et
sa configuration sont décrits en profondeur dans la section concernant inetd.
Dans certains cas, il peut être plus approprié d’utiliser le "daemon" cron(8) pour
démarrer des services. Cette approche présente un certain nombre d’avantages parce
que cron exécute ces processus sous les privilèges du propriétaire de la
table crontab. Cela permet aux utilisateurs normaux de lancer et maintenir certaines
applications.
L’utilitaire cron offre une fonction unique, @reboot, qui peut être utilisée en
remplacement de la date d’exécution. Cela provoquera l’exécution de la tâche
quand cron(8) est lancé, normalement lors de l’initialisation du système.
Les fichiers crontab utilisateur permettent aux utilisateurs de planifier l’exécution de tâches
sans avoir besoin des privilèges du super-utilisateur root. Les commandes contenues dans le
fichier crontab d’un utilisateur s’exécutent avec les privilèges de l’utilisateur auquel appartient
ce fichier.
Le super-utilisateur root peut posséder un fichier crontab utilisateur comme tout autre
utilisateur. Ce fichier est différent de /etc/crontab (le crontab système). Etant donné que le
fichier crontab système invoque les commandes spécifiées en tant que root, il n’y a
généralement pas besoin d’un fichier crontab utilisateur pour root.
Ceci est la configuration de base pour chaque fichier crontab, bien qu’il y ait une
différence dans celui présenté ici. Le sixième champ, où est précisé le nom
d’utilisateur, n’existe que dans le fichier système /etc/crontab. Ce champ devrait être
omis pour les fichiers crontab d’utilisateur.
Pour installer un fichier crontab utilisateur fraîchement rédigé, tout d’abord utilisez
votre éditeur favori pour créer un fichier dans le bon format, ensuite utilisez
l’utilitaire crontab. L’usage le plus typique est:
# crontab fichier-crontab
Dans cet exemple, fichier-crontab est le nom d’un fichier crontab qui a été
précédemment créé.
Il existe également une option pour afficher les fichiers crontab installés, passez
simplement le paramètre -l à crontab et lisez ce qui est affiché.
Pour les utilisateurs désirant créer leur fichier crontab à partir de zéro, sans utiliser de
modèle, l’option crontab -e est disponible. Cela invoquera l’éditeur par défaut avec
un fichier vide. Quand le fichier est sauvegardé, il sera automatiquement installé par
la commande crontab.
# /etc/rc.d/sshd restart
Cette procédure est similaire pour d’autres services. Bien sûr, les services sont
généralement lancés automatiquement au démarrage dès qu’ils sont spécifiés dans le
fichier rc.conf(5). Par exemple, activer le "daemon" de translation d’adresses au
démarrage est aussi simple que d’ajouter la ligne suivante au fichier /etc/rc.conf:
natd_enable="YES"
Si une ligne natd_enable="NO" est déjà présente, modifiez alors le NO par YES. Les
procédures rc chargeront automatiquement les autres services dépendants lors du
prochain redémarrage comme décrit ci-dessous.
Comme le système rc.d est à l’origine destiné pour lancer/arrêter les services au
démarrage/à l’arrêt du système, les options standards start, stop et restart ne seront
effectives que si les variables appropriées sont positionnées dans le
fichier /etc/rc.conf. Par exemple, la commande sshd restart ci-dessus ne
fonctionnera que si sshd_enable est fixée à YES dans /etc/rc.conf. Pour lancer, arrêter
ou redémarrer un service indépendemment des paramétrages du fichier /etc/rc.conf,
les commandes doivent être précédées par "one". Par exemple pour
redémarrer sshd indépendemment du paramétrage du fichier /etc/rc.conf, exécutez
la commande suivante:
# /etc/rc.d/sshd onerestart
La seconde ligne (# sshd) est la sortie de la commande sshd et non pas une console root.
Pour déterminer si un service est actif, une option appelée status est disponible. Par
exemple pour vérifier que sshd a réellement été lancé:
# /etc/rc.d/sshd status
sshd is running as pid 433.
Le système rc.d n’est pas uniquement utilisée pour les services réseaux, elle participe
à la majeure partie de l’initialisation du système. Prenez par exemple le fichier bgfsck.
Quand cette procédure est exécutée, il affichera le message suivant:
Donc ce fichier est utilisé pour les vérifications du système de fichiers en arrière plan,
qui sont uniquement effectuées lors de l’initialisation du système.
Les mots suivants doivent être présents en tête de tous les fichiers de démarrage (ils
sont nécessaires pour que rc.subr(8) active les procédures de démarrages):
Les mots clés suivants peuvent être ajoutés au début de chaque fichier de démarrage.
Ils ne sont pas strictement nécessaires, mais sont utiles comme aide pour rcorder(8):
En utilisant avec soin ces mots clés pour chaque fichier de démarrage, un
administrateur dispose d’un niveau de contrôle très fin de l’ordre d’exécution des
procédures de démarrage sans les inconvénients des "runlevels" comme sur d’autres
systèmes d’exploitation UNIX®.
Avant de commencer, vous devez connaître le modèle de la carte dont vous disposez,
le circuit qu’elle utilise, et si c’est une carte PCI ou ISA. FreeBSD supporte une large
variété de cartes PCI et ISA. Consultez la liste de compatibilité matérielle pour votre
version de FreeBSD afin de voir si votre carte est supportée.
Une fois que vous êtes sûrs que votre carte est supportée, vous devez déterminer le
bon pilote de périphérique pour la carte. Les
fichiers /usr/src/sys/conf/NOTES et /usr/src/sys/arch/conf/NOTES vous
donneront la liste des pilotes de périphériques pour cartes réseaux avec des
informations sur les cartes/circuits supportés. Si vous avez des doutes au sujet du bon
pilote, lisez la page de manuel du pilote. La page de manuel vous donnera plus
d’information sur le matériel supporté et même les éventuels problèmes qui pourront
apparaître.
Si vous possédez une carte courante, la plupart du temps vous n’aurez pas à chercher
trop loin pour trouver un pilote. Les pilotes pour les cartes réseaux courantes sont
présents dans le noyau GENERIC, aussi votre carte devrait apparaître au démarrage,
comme suit:
Dans cet exemple, nous voyons que deux cartes utilisant le pilote de
périphérique dc(4) sont présentes sur le système.
Si le pilote de votre carte n’est pas présent dans le noyau GENERIC, vous devrez
charger le module approprié pour pouvoir utiliser votre carte. Cela peut être effectué
de deux manières différentes:
La méthode la plus simple est de charger le module pour votre carte réseau
avec kldload(8), ou automatiquement au démarrage du système en ajoutant la
ligne appropriée au fichier /boot/loader.conf. Tous les pilotes de cartes
réseau ne sont pas disponibles sous forme de modules; les cartes ISA sont un
bon exemple de périphériques pour lesquels les modules n’existent pas.
Alternativement, vous pouvez compiler en statique le support pour votre carte
dans votre noyau.
Consultez /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES et la
page de manuel du pilote de périphérique pour savoir ce qu’il faut ajouter au
fichier de configuration de votre noyau. Pour plus d’information sur la
recompilation de votre noyau, veuillez lire le Configurer le noyau de FreeBSD.
Si votre carte a été détectée au démarrage par votre noyau (GENERIC) vous
n’avez pas à compiler un nouveau noyau.
Grâce aux contributions de Bill Paul (wpaul), il existe un support "natif" pour la
spécification d’interface des pilotes de périphérique réseau (Network Driver Interface
Specification-NDIS). Le NDISulator FreeBSD (connu également sous le nom de Project
Evil) prend un pilote binaire réseau Windows® et lui fait penser qu’il est en train de
tourner sous Windows®. Etant donné que le pilote ndis(4) utilise un binaire
Windows®, il ne fonctionne que sur les systèmes i386™ et amd64. Les périphériques
PCI, CardBus, PCMCIA (PC-Card), et USB sont supportés.
Recherchez les fichiers spécifiques à votre carte. Généralement, ils peuvent être
trouvés sur les CDs livrés avec la carte ou sur le site du fabricant. Dans les exemples
qui suivent nous utiliseront les fichiers W32DRIVER.SYS et W32DRIVER.INF.
# kldload ./W32DRIVER_SYS.ko
# kldload ndis
# kldload if_ndis
Vous pouvez configurer le système pour charger les modules NDIS au démarrage du
système de la même manière que pour n’importe quel autre module. Tout d’abord,
copiez le module généré, W32DRIVER_SYS.ko, dans le répertoire /boot/modules.
Ajoutez ensuite la ligne suivante au fichier /boot/loader.conf:
W32DRIVER_SYS_load="YES"
Une fois que le bon pilote de périphérique pour la carte réseau est chargé, la carte
doit être configurée. Comme beaucoup d’autres choses, la carte aura pu être
configurée à l’installation par sysinstall.
% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:da
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:db
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet 10baseT/UTP
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
Dans cet exemple, le périphérique dc0 est actif et en fonctionnement. Les indicateurs
importants sont:
Pour configurer votre carte, vous avez besoin des privilèges de l’utilisateur root. La
configuration de la carte réseau peut être faite à partir de la ligne de commande
avec ifconfig(8) mais vous aurez à répéter cette opération à chaque redémarrage du
système. Le fichier /etc/rc.conf est l’endroit où ajouter la configuration de la carte
réseau.
Ouvrez le fichier /etc/rc.conf dans votre éditeur favori. Vous devez ajouter une ligne
pour chaque carte réseau présente sur le système, par exemple dans notre cas, nous
avons ajouté ces lignes:
Vous devez remplacer dc0, dc1, et ainsi de suite, avec le périphérique correspondant
pour vos cartes, et les adresses avec celles désirées. Vous devriez lire les pages de
manuel du pilote de périphérique et d’ifconfig(8) pour plus de détails sur les options
autorisées et également la page de manuel de rc.conf(5) pour plus d’information sur
la syntaxe de /etc/rc.conf.
Si vous avez configuré le réseau à l’installation, des lignes concernant la/les carte(s)
réseau pourront être déjà présentes. Contrôler à deux fois le
fichier /etc/rc.conf avant d’y ajouter des lignes.
Vous devrez également éditer le fichier /etc/hosts pour ajouter les noms et les
adresses IP des diverses machines du réseau local, si elles ne sont pas déjà présentes.
Pour plus d’information référez-vous à la page de manuel hosts(5) et au
fichier /usr/shared/examples/etc/hosts.
S’il n’y a pas de serveur DHCP et qu’un accès à Internet est nécessaire, configurez
manuellement la passerelle par défaut et le serveur de noms:
Une fois les modifications nécessaires du fichier /etc/rc.conf effectuées, vous devrez
redémarrer votre système. Cela permettra la prise en compte de la ou les
modifications au niveau des interfaces, et permettra de vérifier que le système
redémarre sans erreur de configuration. Sinon, une autre méthode pour faire prendre
en compte les modifications au niveau de la gestion du réseau consiste à utiliser la
commande:
Si une passerelle par défaut a été configurée dans /etc/rc.conf, lancez également cette
commande:
Une fois que le système a été redémarré, vous testez les interfaces réseau.
Pour vérifier qu’une carte Ethernet est configurée correctement, vous devez essayer
deux choses. Premièrement, "pinguer" l’interface, puis une autre machine sur le
réseau local.
11.7.3.2. Dépannage
Si la carte fonctionne mais les performances sont mauvaises, une lecture de la page
de manuel tuning(7) peut valoir la peine. Vous pouvez également vérifier la
configuration du réseau puisque des paramètres réseau incorrects peuvent donner
lieu à des connexions lentes.
Parfois, des utilisateurs sont confrontés à des messages d’erreur watchdog timeout. La
première chose à faire dans ce cas est de vérifier votre câble réseau. De nombreuses
cartes demandent un slot PCI supportant le "Bus Mastering". Sur certaines cartes
mère anciennes, seul un slot PCI le permet (la plupart du temps le slot 0). Consultez la
documentation de la carte réseau et de la carte mère pour déterminer si cela peut
être à l’origine du problème.
Les messages d’erreur ping: sendto: Permission denied sont souvent dus à un coupe-
feu mal configuré. Si ipfw est activé dans le noyau mais qu’aucune règle n’a été
définie, alors la politique par défaut est de refuser tout trafic, même les requêtes
"ping"! Lisez Firewalls pour plus d’informations.
Une interface réseau donnée possède une adresse "réelle", et peut avoir n’importe
quel nombre d’adresses "alias". Ces alias sont normalement ajoutés en plaçant les
entrées correspondantes dans le fichier /etc/rc.conf.
Notez que les entrées d’alias doivent commencer avec alias0 et continuer en ordre
croissant, (par exemple, _alias1, _alias2, et ainsi de suite). Le processus de
configuration s’arrêtera au premier nombre absent.
Le calcul des masques de réseau est important, mais heureusement assez simple.
Pour une interface donnée, il doit y avoir une adresse qui représente correctement le
masque de réseau de votre réseau. Tout autre adresse appartenant à ce réseau devra
avoir un masque de réseau avec chaque bit à 1 (exprimé soit sous la
forme 255.255.255.255 soit 0xffffffff).
Par exemple, considérez le cas où l’interface fxp0 est connectée à deux réseaux, le
réseau 10.1.1.0 avec un masque de réseau de 255.255.255.0 et le
réseau 202.0.75.16 avec un masque de 255.255.255.240. Nous voulons que le système
apparaisse de 10.1.1.1 jusqu’à 10.1.1.5 et à 202.0.75.17 jusqu’à 202.0.75.20. Comme
noté plus haut, seule la première adresse dans un intervalle réseau donné (dans ce
cas, 10.0.1.1 et 202.0.75.17) devrait avoir un masque de sous-réseau réel; toutes les
autres adresses (10.1.1.2 à 10.1.1.5 et 202.0.75.18 jusqu’à 202.0.75.20) doivent être
configurées avec un masque de sous-réseau de 255.255.255.255.
/usr/local/etc Fichiers de configuration pour les applications installées. Peut contenir des
sous-répertoires pour chaque application.
nameserve L’adresse IP du serveur de noms auquel le résolveur devrait envoyer ses requêtes.
r Les serveurs sont sollicités dans l’ordre listé avec un maximum de trois.
search Liste de recherche pour la résolution de nom de machine. Ceci est normalement
déterminé par le domaine de l’hôte local.
search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30
11.9.2.2. /etc/hosts
/etc/hosts est une simple base de données texte, une réminiscence des débuts
d’Internet. Il travaille en conjonction avec les serveurs DNS et NIS pour fournir les
correspondances nom vers adresse IP. Les ordinateurs locaux reliés par l’intermédiaire
d’un réseau local peuvent être ajoutés dans ce fichier pour une résolution de noms
simple plutôt que de configurer un serveur named(8). De plus /etc/hosts peut être
utilisé pour fournir un enregistrement local de correspondances de nom, réduisant
ainsi le besoin de requêtes vers l’extérieur pour les noms auxquels on accède
couramment.
# $FreeBSD$
#
#
# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file. Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
#
# Imaginary network.
#10.0.0.2 myname.my.domain myname
#10.0.0.3 myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
# 10.0.0.0 - 10.255.255.255
# 172.16.0.0 - 172.31.255.255
# 192.168.0.0 - 192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers. Do not try to invent your own network
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#
Par exemple:
# $FreeBSD$
#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manual page.
*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/log/cron
*.err root
*.notice;news.err root
*.alert root
*.emerg *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
#*.* /var/log/all.log
# uncomment this to enable logging to a remote log host named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
!startslip
*.* /var/log/slip.log
!ppp
*.* /var/log/ppp.log
11.9.3.2. newsyslog.conf
newsyslog.conf indique quels fichiers de traces doivent être gérés, combien doivent
être conservés, et quand ils doivent être modifiés. Les fichiers de traces peuvent être
réorganisés et/ou archivés quand ils ont soit atteint une certaine taille, soit à une
certaine période/date.
11.9.4. sysctl.conf
sysctl.conf ressemble à rc.conf. Les valeurs sont fixées sous la forme variable=value.
Les valeurs spécifiées sont positionnées après que le système soit passé dans le mode
multi-utilisateurs. Toutes les variables ne sont pas paramétrables dans ce mode.
% sysctl -a
% sysctl kern.maxproc
kern.maxproc: 1044
Les valeurs des variables sysctl sont généralement des chaînes de caractères, des
nombres, ou des booléens (un variable booléenne étant 1 pour oui ou un 0 pour
non).
Dans certains cas, il peut être nécessaire de modifier des variables sysctl(8) en lecture
seule. Bien que cela soit parfois inévitable, cela ne peut être fait qu’au (re)démarrage
de la machine.
11.11.1.2. vfs.write_behind
11.11.1.3. vfs.hirunningspace
Il existent d’autres variables sysctl relatives aux caches tampons et aux pages VM.
Nous ne recommandons pas de modifier ces valeurs, le système VM effectue un très
bon travail d’auto-optimisation.
11.11.1.4. vm.swap_idle_enabled
11.11.1.5. hw.ata.wc
FreeBSD 4.3 a flirté avec la désactivation du cache en écriture des disques IDE. Cela
réduisit la bande passante en écriture des disques IDE mais fut considéré comme
nécessaire en raison de sérieux problèmes de cohérence de données introduits par
les fabricants de disques durs. Le problème est que les disques IDE mentent sur le
moment où une écriture est réellement terminée. Avec le cache en écriture IDE activé,
les disques durs IDE non seulement n’écriront pas les données dans l’ordre, mais
parfois retarderont l’écriture de certains blocs indéfiniment sous une charge disque
importante. Un crash ou une coupure secteur pourra être à l’origine de sérieuses
corruptions du système de fichiers. Par précaution le paramétrage par défaut de
FreeBSD fut modifié. Malheureusement, le résultat fut une telle perte de
performances que nous avons réactivé le cache en écriture après cette version de
FreeBSD. Vous devriez contrôler la valeur par défaut sur votre système en examinant
la variable sysctl hw.ata.wc. Si le cache en écriture des disques IDE est désactivé, vous
pouvez le réactiver en positionnant la variable à 1. Cela doit être fait à partir du
chargeur au démarrage. Tenter de le faire après le démarrage du noyau n’aura aucun
effet.
Un système de fichiers ne peut être modifié avec tunefs(8) tant qu’il est monté. Un
bon moment pour activer les "Soft Updates" est avant que les partitions ne soient
montées en mode mono-utilisateur.
Les "Soft Updates" améliorent de façon drastique les performances sur les méta-
données, principalement la création et la suppression de fichier, par l’utilisation d’un
cache mémoire. Nous recommandons d’activer les "Soft Updates" sur tous vos
systèmes de fichiers. Il y a deux inconvénients aux "Soft Updates" que vous devez
connaître: tout d’abord, les "Soft Updates" garantissent la cohérence du système de
fichiers en cas de crash mais pourront facilement être en retard de quelques
secondes (voir même une minute!) dans la mise à jour du disque. Si votre système
plante il se peut que vous perdiez plus de travail que dans d’autres cas.
Deuxièmement, les "Soft Updates" retardent la libération des blocs du système de
fichiers. Si vous avez un système de fichiers (comme le système de fichiers racine) qui
est presque plein, effectuer une mise à jour majeure, comme un make installworld,
peut mener à un manque d’espace sur le système de fichiers et faire échouer la mise
à jour.
Historiquement, le comportement par défaut était d’écrire les mises à jour des méta-
données de façon synchrone. Si un répertoire a été modifié, le système attendait
jusqu’à ce que le changement soit effectivement écrit sur le disque. Les tampons des
données de fichier (contenu du fichier) passaient par le cache mémoire et étaient
copiés sur le disque plus tard de façon asynchrone. L’avantage de cette
implémentation est qu’elle est effectuée sans risque. S’il y a un problème durant une
mise à jour, les méta-données sont toujours dans un état consistant. Un fichier est
soit créé complètement soit pas du tout. Si les blocs de données d’un fichier n’ont
pas trouvé leur chemin du cache mémoire vers le disque au moment du
crash, fsck(8) est capable de s’en apercevoir et de réparer le système de fichiers en
fixant la taille du fichier à 0. De plus, l’implémentation est claire et simple.
L’inconvénient est que la modification des méta-données est lente. Un rm -r, par
exemple, touche à tous les fichiers dans un répertoire séquentiellement, mais chaque
modification du répertoire (effacement d’un fichier) sera écrite de façon synchrone
sur le disque. Cela comprend les mises à jour du répertoire lui-même, de la table des
inodes, et éventuellement celles sur des blocs indirects alloués par le fichier. Des
considérations semblables s’appliquent à la création d’importantes hiérarchies (( tar -
x).
La solution commune pour ce problème fut d’implémenter une région de trace, dont
on fait souvent référence sous le terme de journalisation, bien que ce terme ne soit
pas toujours utilisé de façon cohérente et est occasionnellement utilisé pour d’autres
formes de transaction avec trace. Les mises à jour des méta-données sont toujours
écrites de façon synchrone, mais seulement sur une petite région du disque. Elles
seront plus tard déplacées vers leur emplacement correct. Parce que la région de
trace est une petite région contiguë sur le disque, il n’y a pas de grandes distances de
déplacement pour les têtes des disques, même durant les opérations importantes,
donc ces opérations sont plus rapides que les mises à jour synchrones. De plus la
complexité de l’implémentation est relativement limitée, donc le risque de présence
de bogues est faible. Un inconvénient est que toutes les méta-données sont écrites
deux fois (une fois dans la région de trace et une fois sur l’emplacement correct) donc
pour un fonctionnement normal, une baisse des performances pourra en résulter.
D’autre part, dans le cas d’un crash, toutes les opérations sur les méta-données en
attente peuvent rapidement être annulées ou complétées à partir de la zone de trace
après le redémarrage du système, ayant pour résultat un démarrage rapide du
système de fichiers.
Kirk McKusick, le développeur du FFS de Berkeley, a résolu le problème avec les "Soft
Updates": toutes les mises à jour des méta-données sont conservées en mémoire et
inscrites sur le disque selon une séquence ordonnée ("mise à jour ordonnée des
méta-données"). Ceci a pour effet, dans le cas d’un nombre d’opérations sur les
méta-données important, que les dernières mises à jour sur un élément "attrapent"
les premières si ces dernières sont encore en mémoire et n’ont pas encore été
inscrites sur le disque. Donc toutes les opérations sur, par exemple, un répertoire sont
généralement effectuées en mémoire avant que la mise à jour ne soit écrite sur le
disque (les blocs de données sont ordonnés en fonction de leur position de sorte à ce
qu’ils ne soient pas sur le disque avant leur méta-données). Si le système crash, cela
provoque un "retour dans les traces" implicite: toutes les opérations qui n’ont pas
trouvé leur chemin vers le disque apparaissent comme si elles n’avaient jamais existé.
Un état cohérent du système de fichiers est maintenu et apparaît comme étant celui
de 30 ou 60 secondes plus tôt. L’algorithme utilisé garantie que toutes les ressources
utilisées soient marquées avec leur bons "bitmaps": blocs et inodes. Après un crash,
les seules erreurs d’allocation de ressources qui apparaissent sont les ressources qui
ont été marquées comme "utilisées" et qui sont en fait "libre". fsck(8) reconnaît cette
situation, et libère les ressources qui ne sont plus utilisées. On peut ignorer sans
risque l’état "sale" d’un système de fichiers après un crash en forçant son montage
avec mount -f. Afin de libérer les ressources qui peuvent être inutilisées, fsck(8) doit
être exécuté plus tard. C’est l’idée qu’il y a derrière le "background fsck" (fsck en tâche
de fond): au démarrage du système, seule un "snapshot" (photographie) du système
de fichiers est prise. La commande fsck peut être exécutée plus tard sur ce système
de fichiers. Tous les systèmes de fichiers peuvent être montés "sales", donc le
système passe en mode multi-utilisateurs. Ensuite, les fsck en tâche de fond seront
programmés pour tous les systèmes de fichiers pour lesquels c’est nécessaire, pour
libérer les ressources qui peuvent être inutilisées (les systèmes qui n’utilisent pas les
"Soft Updates" ont toujours besoin du fsck en avant plan).
L’avantage est que les opérations sur les méta-données sont presque aussi rapides
que les mises à jour asynchrones (i.e. plus rapide qu’avec le "logging" - traçage, qui
doit écrire les méta-données deux fois). Les inconvénients sont la complexité du code
(impliquant un haut risque de bogues dans une zone qui est hautement sensible en
raison de risque perte de données utilisateur), et une plus grande consommation en
mémoire. De plus il y a quelques particularités que l’on peut rencontrer lors de
l’utilisation. Après un crash, l’état du système apparaît être en quelque sorte "plus
vieux". Dans des situations où l’approche synchrone classique aurait donné lieu à des
fichiers de taille nulle restant après le fsck, ces fichiers n’existent pas du tout avec un
système de fichiers utilisant les "Soft Updates" parce que ni les méta-données ni les
contenus de fichiers n’ont jamais été inscrits sur le disque. L’espace disque n’est pas
rendu tant que les mises à jour n’ont pas été inscrites sur le disque, ce qui peut se
produire quelques temps après l’exécution de rm. Cela peut être à l’origine de
problèmes quand on installe une grande quantité de données sur un système de
fichiers qui ne dispose pas de suffisamment d’espace pour contenir tous les fichiers
deux fois.
Sous les anciennes versions de FreeBSD, la valeur par défaut de kern.maxfile est fixée
par l’option maxusers dans votre fichier de configuration du
noyau. kern.maxfiles augmente proportionnellement avec la valeur de maxusers.
Quand vous compilez un noyau sur mesure, il est bon de paramétrer cette option en
fonction de l’utilisation de votre système. Ce nombre fixe la plupart des limites pré-
définies du noyau. Même si une machine de production pourra ne pas avoir en réalité
256 utilisateurs connectés simultanément, les ressources requises pourront être
semblables pour un serveur web important.
Sous les anciennes versions, le système auto-ajuste ce paramètre pour vous si vous le
fixez explicitement à 0. En paramétrant cette option, vous devrez fixer maxusers à 4 au
moins, en particulier si vous utilisez le système X Window ou compilez des logiciels.
La raison de cela est que la valeur la plus importante que dimensionne maxusers est le
nombre maximal de processus, qui est fixé à 20 + 16 * maxusers, donc si vous
positionnez maxusers à 1, alors vous ne pouvez avoir que 36 processus en simultanés,
comprenant les 18, environ, que le système lance au démarrage et les 15, à peu près,
que vous créerez probablement au démarrage du système X Window. Même une
tâche simple comme la lecture d’une page de manuel lancera jusqu’à neuf processus
pour la filtrer, la décompresser, et l’afficher. Fixer maxusers à 64 autorisera jusqu’à
1044 processus simultanés, ce qui devrait suffire dans la plupart des cas. Si, toutefois,
vous obtenez le message d’erreur tant redouté quand vous tentez d’exécuter un
nouveau programme, ou gérez un serveur avec un grand nombre d’utilisateurs en
simultanés (comme ftp.FreeBSD.org), vous pouvez toujours augmenter cette valeur et
recompiler le noyau.
maxusers ne limite pas le nombre d’utilisateurs qui pourront ouvrir une session sur votre
machine. Cette valeur dimensionne simplement différentes tables à des valeurs raisonnables en
fonction du nombre maximal d’utilisateur que vous aurez vraisemblablement sur votre système
et combien de processus chacun d’entre eux pourra utiliser.
11.12.1.2. kern.ipc.somaxconn
Pour les serveurs chargés qui font une utilisation intensive de l’appel
système sendfile(2), il peut être nécessaire d’augmenter le nombre de
tampons sendfile(2) par l’intermédiaire de l’option de configuration du
noyau NSFBUFS ou en fixant sa valeur dans le fichier /boot/loader.conf (consultez la
page de manuel loader(8) pour plus de détails). Un indicateur de la nécessité d’ajuster
ce paramètre est lorsque des processus sont dans l’état sfbufa. La variable
sysctl kern.ipc.nsfbufs est un aperçu en lecture seule de la variable du noyau. Ce
paramètre s’ajuste de façon optimale avec kern.maxusers, il peut être cependant
nécessaire de l’ajuster en fonction des besoins.
Même si une "socket" a été marquée comme étant non-bloquante, un appel de sendfile(2) sur la
"socket" non-bloquante peut résulter en un blocage de l’appel sendfile(2) jusqu’à ce que
suffisamment de struct sf_buf soient libérées.
11.12.2.1. net.inet.ip.portrange.*
Cette fonctionnalité est utile si vous diffusez des données par l’intermédiaire de
modems, de connexions Ethernet Gigabit, ou même de liaisons hauts débits WAN (ou
toute autre liaison avec un produit délai-bande passante élevé), tout particulièrement
si vous utilisez également le dimensionnement des fenêtres d’émission ou que vous
avez configuré une fenêtre d’émission importante. Si vous activez cette option, vous
devriez également vous assurer que net.inet.tcp.inflight.debug est positionnée
à 0 (désactive le débogage), et pour une utilisation en production,
fixer net.inet.tcp.inflight.min à au moins 6144 peut être bénéfique. Notez,
cependant, que fixer des minima élevés peut désactiver la limitation de bande
passante selon la liaison. La fonction de limitation diminue la quantité de données
accumulées dans les files d’attente intermédiaire de routage et de commutation, et
diminue également la quantité de données présentes dans les files d’attente de
l’interface de la machine locale. Avec moins de paquets dans les files d’attente, les
connexions interactives, tout particulièrement sur des modems lents, seront en
mesure de fonctionner avec des temps d’aller-retour plus faible. Mais cette
fonctionnalité n’affecte que la transmission de données (transmission côté serveur).
Ceci n’a aucun effet sur la réception de données (téléchargement).
# sysctl vfs.numvnodes
vfs.numvnodes: 91349
# sysctl kern.maxvnodes
kern.maxvnodes: 100000
Pour des informations sur comment chiffrer l’espace de pagination, quelles options
existent pour mener à bien cette tâche et pourquoi on devrait le faire, veuillez vous
référer à la Chiffrage de l’espace de pagination du Manuel.
Utiliser la commande swapon pour ajouter une partition de pagination au système. Par
exemple:
# swapon /dev/ada1s1b
Il est possible d’utiliser n’importe quelle partition actuellement non-montée, même si cette
dernière contient des données. Utiliser swapon sur une partition contenant des données écrasera
et effacera ces données. Assurez-vous que la partition à utiliser comme espace de pagination
est bien celle prévue à cet effet avant d’exécuter swapon.
Consulter fstab(5) pour plus d’explications sur les entrées du fichier /etc/fstab. Plus
d’informations sur swapon sont disponibles dans swapon(8).
L’espace de pagination sur NFS n’est recommandé que si vous n’avez pas de disque
dur local sur lequel avoir l’espace de pagination; la pagination sur NFS sera limitée
par la bande passante du réseau et sera un fardeau supplémentaire pour le serveur
NFS.
Vous pouvez créer un fichier d’une taille spécifique pour l’utiliser comme fichier de
pagination. Dans notre exemple nous utiliserons un fichier de 64MO
appelé /usr/swap0. Vous pouvez, bien sûr, utiliser le nom de votre choix.
device md
Dans cette section, nous fournirons une information complète au sujet de l’ACPI. Il
sera fait référence à des documents supplémentaires en fin de section pour plus de
détails.
Le BIOS Plug and Play (PNPBIOS) n’était pas fiable dans de nombreuses situations. Le
PNPBIOS est une technologie 16 bits, le système d’exploitation doit utiliser une
émulation 16 bits afin de faire l'"interface" avec les méthodes PNPBIOS.
L’ACPI et l’APM ne peuvent coexister et devraient être utilisé séparément. Le dernier chargé
s’arrêtera s’il détecte l’autre en fonctionnement.
L’ACPI peut être utilisé pour mettre en veille un système avec acpiconf(8), les
options -s et 1-5. La plupart des utilisateurs n’auront besoin que de 1 ou 3 (système
suspendu en RAM). L’option 5 provoquera un arrêt de l’alimentation par logiciel, effet
identique à un:
# halt -p
D’autres options sont disponibles via sysctl(8). Consultez les pages de
manuel acpi(4) et acpiconf(8) pour plus d’informations.
Ce document est destiné à vous permettre d’aider les développeurs du système ACPI
sous FreeBSD à identifier la cause originelle des problèmes que vous observez et à
déboguer et développer une solution. Merci de lire ce document et nous espérons
pouvoir résoudre les problèmes de votre système.
Pour ceux désirant soumettre directement un problème, veuillez faire parvenir les
informations suivantes à la liste freebsd-acpi@FreeBSD.org:
L’ACPI est présent sur tous les ordinateurs modernes compatibles avec l’une des
architectures ia32 (x86), ia64 (Itanium), et amd64 (AMD). La norme complète définit
des fonctionnalités comme la gestion des performances du CPU, des contrôles des
niveaux d’énergie, des zones de températures, divers systèmes d’utilisation des
batteries, des contrôleurs intégrés, et l’énumération du bus. La plupart des systèmes
n’implémentent pas l’intégralité des fonctionnalités de la norme. Par exemple, un
ordinateur de bureau n’implémentera généralement que la partie énumération de
bus alors qu’un ordinateur portable aura également le support de la gestion du
refroidissement et de la batterie. Les ordinateurs portables disposent également des
modes de mise en veille et de réveil, avec toute la complexité qui en découle.
Dans certains cas le réveil après une mise en veille sera à l’origine d’un
dysfonctionnement de la souris. Une solution connue est d’ajouter la
ligne hint.psm.0.flags="0x3000" au fichier /boot/loader.conf. Si cela ne fonctionne
pas, pensez à envoyer un rapport de bogue comme décrit plus haut.
hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0
Cela signifie que nous pouvons utiliser acpiconf -s pour tester les modes S3, S4OS,
et S5. Si s4bios était égal à 1, nous disposerions d’un support S4BIOS à la place
de S4OS.
Quand vous testez la mise en veille et le réveil, commencez avec le mode S1, pour
voir s’il est supporté. Ce mode doit fonctionner dans la plupart des cas puisqu’il
nécessite peu de support. Le mode S2 n’est pas implémenté, mais si vous en disposez,
il est similaire au mode S1. La chose suivante à essayer est le mode S3. C’est le mode
STR le plus avancé et il nécessite un support du pilote important pour réinitialiser
correctement votre matériel. Si vous avez des problèmes au réveil de la machine,
n’hésitez pas à contacter la liste liste de diffusion concernant ACPI sous FreeBSD mais
ne vous attendez pas à ce que le problème soit résolu puisqu’il y a de nombreux
pilotes/matériels qui nécessitent plus de tests et de développement.
Un problème courant avec la mise en veille/le réveil est que de nombreux pilotes de
périphériques ne sauvegardent pas, ne restaurent pas, ou ne réinitialisent pas leurs
logiciel, registres ou mémoire proprement. En premier lieu pour débogguer le
problème, essayez:
# sysctl debug.bootverbose=1
# sysctl debug.acpi.suspend_bounce=1
# acpiconf -s 3
Les cas plus difficiles nécessitent un matériel supplémentaire, tel qu’un port série et
un câble pour débogguer à l’aide d’une console série, un port firewire et un câble
pour l’utilisation de dcons(4), et des compétences en debogguage du noyau.
Pour isoler le problème, retirez du noyau tous les pilotes de périphériques possibles.
Si cela fonctionne, vous pouvez alors identifier le pilote fautif en chargeant les pilotes
un à un jusqu’à l’apparition du problème. Généralement les pilotes binaires
comme nvidia.ko, les pilotes d’affichage X11, ou les pilotes USB seront victimes de la
plupart des problèmes tandis que ceux concernant les interfaces Ethernet
fonctionneront normalement. Si vous pouvez charger/décharger les pilotes de
périphériques correctement, vous pouvez automatiser cela en ajoutant les
commandes appropriées dans les fichiers /etc/rc.suspend et /etc/rc.resume. Il y a
un exemple en commentaire pour décharger ou charger un pilote. Essayez de
fixer hw.acpi.reset_video à zéro (0) si votre affichage est corrompu après un réveil de
la machine. Essayez des valeurs plus grandes ou plus faibles
pour hw.acpi.sleep_delay pour voir si cela aide.
Une autre méthode est d’essayer de charger une distribution Linux récente avec le
support ACPI et tester la mise en veille et le réveil sur le même matériel. Si cela
fonctionne sous Linux, c’est probablement donc un problème de pilotes FreeBSD et
déterminer quel pilote est responsable des dysfonctionnements nous aidera à
corriger le problème. Notez que les personnes qui maintiennent l’ACPI sous FreeBSD
ne s’occupe pas généralement des autres pilotes de périphériques (comme le son, le
système ATA, etc.), aussi tout rapport concernant un problème de pilote devrait
probablement en fin de compte être posté sur la liste liste de diffusion à propos de la
branche FreeBSD-CURRENT et communiqué au responsable du pilote. Si vous vous
sentez une âme d’aventurier, commencez à ajouter des printf(3)s de débogage dans
un pilote problématique pour déterminer à quel moment dans sa fonction de réveil il
se bloque.
Enfin, essayez de désactiver l’ACPI et d’activer l’APM à la place, pour voir si la mise en
veille et le réveil fonctionnent avec l’APM, tout particulièrement dans le cas de
matériel ancien (antérieur à 2000). Cela prend du temps aux constructeurs de mettre
en place le support ACPI et le matériel ancien aura sûrement des problèmes de BIOS
avec l’ACPI.
La plupart des blocages système sont le résultat d’une perte d’interruptions ou d’une
tempête d’interruptions. Les circuits ont beaucoup de problèmes en fonction de la
manière dont le BIOS configure les interruptions avant le démarrage, l’exactitude de
la table APIC (MADT), et le routage du System Control Interrupt (SCI).
Votre plus grand espoir quand vous faites face à des problèmes d’interruptions est
d’essayer de désactiver le support APIC avec la ligne hint.apic.0.disabled="1" dans le
fichier loader.conf.
11.15.3.4. Paniques
Les paniques sont relativement rares dans le cas de l’ACPI et sont au sommet des
priorités en matière de problèmes à corriger. Le premier point est d’isoler les étapes
nécessaires à la reproduction de la panique (si possible) et d’obtenir une trace de
débogage. Suivez l’aide sur l’activation de options DDB et la configuration d’une
console série (lire la Entering the DDB Debugger from the Serial Line) ou la
configuration d’une partition dump(8). Vous pouvez obtenir une trace de débogage
sous DDB avec la commande tr. Si vous devez recopier à la main la trace de
débogage, assurez-vous de relever les cinq dernières lignes et les cinq premières
ligne de la trace.
Si vous rencontrez d’autres problèmes avec l’ACPI (impossible de travailler avec une
station d’amarrage, périphériques non détectés, etc.), veuillez envoyer un courrier
descriptif à la liste de diffusion; cependant, certains de ces problèmes peuvent être
relatifs à des partie incomplètes du sous-système ACPI et qui pourront prendre du
temps à être implémentées. Soyez patient et prêt à tester les correctifs que nous
pourront éventuellement vous envoyer.
Le problème le plus courant est le fait que les constructeurs fournissent des
"bytecodes" erronés (ou plus simplement bogués!). Cela se manifeste généralement
sur la console par des messages du noyau du type:
La plupart du temps vous pouvez corriger ces problèmes en mettant à jour votre
BIOS avec la dernière version disponible. La majorité des messages sur la console
sont inoffensifs mais si vous avez d’autres problèmes comme l’état de la batterie qui
ne fonctionne pas, ce sont de bonnes raisons pour commencer à jeter un oeil à ces
problèmes dans l’AML. Le "bytecode", connu sous le nom d’AML, est compilé à partir
d’un langage source appelé ASL. L’AML se trouve dans une table appelée DSDT. Pour
obtenir une copie de votre ASL, utilisez acpidump(8). Vous devriez utiliser de paire les
options -t (qui affiche le contenu des tables fixes) et -d (qui désassemble l’AML en
ASL). Consultez la section Soumettre des informations de déboguage pour un
exemple de syntaxe.
Le tout premier test que vous pouvez effectuer est de recompiler votre ASL à la
recherche d’erreurs. Les avertissements peuvent être généralement ignorés mais les
erreurs sont des bogues qui normalement empêchent l’ACPI de fonctionner
correctement. Pour recompiler votre ASL, utilisez la commande suivante:
# iasl your.asl
A long terme, notre objectif est que tout le monde puisse avoir un système ACPI
fonctionnant sans aucune intervention de l’utilisateur. Actuellement, nous sommes
toujours en train de développer des solutions pour contourner les erreurs courantes
faites par les fabricants de BIOS. L’interpréteur de Microsoft® (acpi.sys et acpiec.sys)
ne contrôle pas de façon stricte la conformité avec la norme, et par conséquent de
nombreux fabricants de BIOS qui testent l’ACPI uniquement sous Windows® ne
corrigent donc jamais leur ASL. Nous espérons poursuivre à identifier et documenter
avec exactitude les comportements non-standards autorisés par l’interpréteur de
Microsoft® et les reproduire de manière à permettre à FreeBSD de fonctionner sans
obliger les utilisateurs à corriger leur ASL. Comme solution et pour nous aider à
identifier ces comportements, vous pouvez corriger manuellement votre ASL. Si cela
fonctionne pour vous, veuillez nous envoyer un diff(1) de l’ancien et du nouveau ASL
de façon à ce que nous puissions corriger le comportement incorrect dans ACPI-CA
et rendre donc inutile à l’avenir votre correctif.
Voici une liste des messages d’erreur courants, leur cause, et comment les corriger:
Certains AMLs supposent que le monde n’est fait de que différentes versions de
Windows®. Vous pouvez demander à FreeBSD de s’annoncer comme étant n’importe
quel système d’exploitation pour voir si cela corrige les problèmes que vous pouvez
rencontrer. Une manière simple de faire cela est de fixer la
variable hw.acpi.osname="Windows 2001" dans /boot/loader.conf ou avec une autre
chaîne de caractères que vous trouvez dans l’ASL.
Après avoir personnalisé votre.asl, vous voudrez le compiler, pour cela exécutez:
# iasl your.asl
Vous pouvez ajouter l’option -f pour forcer la création de l’AML, même s’il y a des
erreurs lors de la compilation. Rappelez-vous que certaines erreurs (e.g., missing
Return statements) sont automatiquement contournées par l’interpréteur.
DSDT.aml est le fichier de sortie par défaut pour iasl. Vous pouvez le charger à la
place de la version boguée de votre BIOS (qui est toujours présent dans la mémoire
flash) en éditant le fichier /boot/loader.conf comme suit:
acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"
Assurez-vous de bien copier votre fichier DSDT.aml dans le répertoire /boot.
Le pilote ACPI dispose d’une fonction de débogage très flexible. Elle vous permet de
spécifier un ensemble de sous-systèmes ainsi que le niveau de verbosité. Les sous-
systèmes que vous désirez déboguer sont indiqués sous la forme de "couches" et
sont divisés en composants ACPI-CA (ACPI_ALL_COMPONENTS) et en supports
matériel ACPI (ACPI_ALL_DRIVERS). La verbosité de la sortie de débogage est
spécifiée par un "niveau" et des intervalles de ACPI_LV_ERROR (rapporte juste les
erreurs) à ACPI_LV_VERBOSE (tout). Le "niveau" est un masque de bits séparés par des
espaces, aussi de nombreuses options peuvent être fixées à la fois. Dans la pratique,
vous voudrez utiliser un console série pour afficher la sortie si les informations de
débogage sont si importantes qu’elles dépassent le tampon des messages de la
console. Une liste complète des couches individuelles et des niveaux peut être
trouvée dans la page de manuel acpi(4).
L’affichage des informations de débogage n’est pas activé par défaut. Pour l’activer,
ajoutez la ligne options ACPI_DEBUG à votre fichier de configuration du noyau si l’ACPI
est compilé dans le noyau. Vous pouvez ajouter la ligne ACPI_DEBUG=1 à votre
fichier /etc/make.conf pour l’activer de façon globale. Si l’ACPI est sous forme de
module, vous pouvez recompiler votre module acpi.ko comme suit:
# cd /sys/modules/acpi/acpi
&& make clean &&
make ACPI_DEBUG=1
debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"
Si l’information que vous voulez est déclenchée par un événement particulier (disons
par exemple une mise en veille suivi d’un réveil), vous pouvez abandonner les
modifications dans loader.conf et utiliser à la place sysctl pour indiquer la couche et
le niveau après le démarrage et préparer votre système pour cet événement
particulier. Les variables sysctl sont appelées de la même manière que dans le
fichier loader.conf.
11.15.7. Références
Plus d’information au sujet de l’ACPI peut être trouvé aux emplacements suivants:
La liste de diffusion liste de diffusion concernant ACPI sous FreeBSD
Les archives de la liste de diffusion
ACPI http://lists.freebsd.org/pipermail/freebsd-acpi/
Les archives de l’ancienne liste de diffusion
ACPI http://home.jp.FreeBSD.org/mail-list/acpi-jp/
La spécification ACPI
Les pages de manuel: acpi(4), acpi_thermal(4), acpidump(8), iasl(8), acpidb(8)
Ressource sur le débogage de la DSDT. (Utilise un exemple basé sur du
matériel Compaq mais qui est en général intéressant.)