Various updates.

This commit is contained in:
Marc Fonvieille 2004-09-02 20:02:06 +00:00
parent f0a31a64e3
commit 725347a499
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=22214

View file

@ -3,8 +3,7 @@
The FreeBSD French Documentation Project
$FreeBSD$
$Id: chapter.sgml,v 1.8 2004-01-24 10:30:12 blackend Exp $
Original revision: 1.79
Original revision: 1.91
-->
<chapter id="config-tuning">
@ -40,7 +39,9 @@
<sect1 id="config-synopsis">
<title>Synopsis</title>
<indexterm><primary>configuration/optimisation du
<indexterm><primary>configuration du
syst&egrave;me</primary></indexterm>
<indexterm><primary>optimisation du
syst&egrave;me</primary></indexterm>
<para>La configuration correcte d'un syst&egrave;me peut sensiblement
@ -67,6 +68,10 @@
<filename>rc.conf</filename> et des fichiers de d&eacute;marrage
<filename>/usr/local/etc/rc.d</filename>.</para>
</listitem>
<listitem>
<para>Comment configurer et tester une carte
r&eacute;seau.</para>
</listitem>
<listitem>
<para>Comment configurer des h&ocirc;tes virtuels sur vos
p&eacute;riph&eacute;riques r&eacute;seau.</para>
@ -1344,7 +1349,7 @@ round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen>
avoir une adresse qui repr&eacute;sente correctement le masque de
r&eacute;seau de votre r&eacute;seau. Tout autre adresse appartenant
&agrave; ce r&eacute;seau devra avoir un masque de r&eacute;seau
avec chaque bit &agrave; 1.</para>
avec chaque bit &agrave; <literal>1</literal>.</para>
<para>Par exemple, consid&eacute;rez le cas o&ugrave;
l'interface <devicename>fxp0</devicename> est connect&eacute;e &agrave;
@ -1819,6 +1824,93 @@ device_probe_and_attach: cbb0 attach returned 12</screen>
faire des exp&eacute;riences pour le d&eacute;terminer.</para>
</sect3>
<sect3>
<title><varname>vfs.write_behind</varname></title>
<indexterm>
<primary><varname>vfs.write_behind</varname></primary>
</indexterm>
<para>La variable sysctl <varname>vfs.write_behind</varname> est
positionn&eacute;e par d&eacute;faut &agrave;
<literal>1</literal> (activ&eacute;e). Elle demande au
syst&egrave;me de fichiers d'effectuer les &eacute;critures
lorsque des grappes compl&egrave;tes de donn&eacute;es ont
&eacute;t&eacute; collect&eacute;es, ce qui se produit
g&eacute;n&eacute;ralement lors de l'&eacute;criture
s&eacute;quentielle de gros fichiers. L'id&eacute;e est
d'&eacute;viter de saturer le cache tampon avec des tampons
sales quand cela n'am&eacute;liorera pas les performances d'E/S.
Cependant, cela peut bloquer les processus et dans certaines
conditions vous pouvez vouloir d&eacute;sactiver cette
fonction.</para>
</sect3>
<sect3>
<title><varname>vfs.hirunningspace</varname></title>
<indexterm>
<primary><varname>vfs.hirunningspace</varname></primary>
</indexterm>
<para>La variable sysctl <varname>vfs.hirunningspace</varname>
d&eacute;termine combien d'op&eacute;rations d'&eacute;criture
peuvent &ecirc;tre mises en attente &agrave; tout moment au
niveau des contr&ocirc;leurs disques du syst&egrave;me. La
valeur par d&eacute;faut est normalement suffisante mais sur les
machines avec de nombreux disques, vous pouvez vouloir
l'augmenter jusqu'&agrave; quatre ou cinq
<emphasis>m&eacute;ga-octets</emphasis>. Notez que fixer une
valeur trop &eacute;lev&eacute;e (d&eacute;passant la limite
d'&eacute;criture du cache tampon) peut donner lieu &agrave; de
tr&egrave;s mauvaises performances. Ne fixez pas cette valeur
&agrave; une valeur &eacute;lev&eacute;e arbitraire! Des
valeurs d'&eacute;criture &eacute;lev&eacute;es peuvent ajouter
des temps de latence aux op&eacute;rations d'&eacute;criture
survenant au m&ecirc;me moment.</para>
<para>Il existent d'autres variables sysctl relatives aux caches
tampons et aux pages VM. Nous ne recommandons pas de modifier
ces valeurs. Depuis &os;&nbsp;4.3, le syst&egrave;me VM
effectue un tr&egrave;s bon travail d'auto-optimisation.</para>
</sect3>
<sect3>
<title><varname>vm.swap_idle_enabled</varname></title>
<indexterm>
<primary><varname>vm.swap_idle_enabled</varname></primary>
</indexterm>
<para>La variable <varname>vm.swap_idle_enabled</varname> est
utile dans le cas de syst&egrave;mes multi-utilisateurs
importants o&ugrave; il y a beaucoup d'utilisateurs s'attachant
et quittant le syst&egrave;me et de nombreux processus inactifs.
De tels syst&egrave;mes tendent &agrave; g&eacute;n&eacute;rer
une pression assez importante et continue sur les
r&eacute;serves de m&eacute;moire libres. Activer cette
fonction et r&eacute;gler l'hyst&eacute;resis de
lib&eacute;ration de l'espace de pagination (en secondes
d'inactivit&eacute;) par l'interm&eacute;diaire des variables
<varname>vm.swap_idle_threshold1</varname> et
<varname>vm.swap_idle_threshold2</varname>, vous permet de
diminuer la priorit&eacute; des pages m&eacute;moire
associ&eacute;es avec les processus inactifs plus rapidement
qu'avec l'algorithme normal de lib&eacute;ration. Cela aide le
<quote>daemon</quote> de lib&eacute;ration des pages. N'activez
cette option que si vous en besoin, parce que la concession que
vous faites est d'utiliser l'espace de pagination pour les pages
m&eacute;moire plus t&ocirc;t qu'&agrave; l'accoutum&eacute;,
consommant par cons&eacute;quent plus d'espace de pagination et
de bande passante disque. Sur un petit syst&egrave;me, cette
option aura un effet limit&eacute; mais dans le cas d'un
syst&egrave;me important qui fait appel &agrave; l'espace de
pagination de fa&ccedil;on mod&eacute;r&eacute;e, cette option
permettra au syst&egrave;me VM de transf&eacute;rer l'ensemble
des processus de et vers la m&eacute;moire
ais&eacute;ment.</para>
</sect3>
<sect3>
<title><varname>hw.ata.wc</varname></title>
@ -1858,6 +1950,32 @@ device_probe_and_attach: cbb0 attach returned 12</screen>
<para>Pour plus d'informations, veuillez consulter la page de
manuel &man.ata.4;.</para>
</sect3>
<sect3>
<title><literal>SCSI_DELAY</literal>
(<varname>kern.cam.scsi_delay</varname>)</title>
<indexterm>
<primary><literal>SCSI_DELAY</literal></primary>
<secondary><varname>kern.cam.scsi_delay</varname></secondary>
</indexterm>
<para>L'option de configuration du noyau
<literal>SCSI_DELAY</literal> peut &ecirc;tre utilis&eacute;e
pour r&eacute;duire le temps de d&eacute;marrage du
syst&egrave;me. Le d&eacute;lai par d&eacute;faut est important
et peut &ecirc;tre responsable de plus de <literal>15</literal>
secondes d'attente lors du processus de d&eacute;marrage.
R&eacute;duire ce d&eacute;lai &agrave; <literal>5</literal>
secondes est g&eacute;n&eacute;ralement suffisant (tout
particuli&egrave;rement avec les disques modernes). Les
versions de &os; r&eacute;centes (5.0 et suivantes) devraient
utiliser l'option de d&eacute;marrage
<varname>kern.cam.scsi_delay</varname>. Cette option de
d&eacute;marrage et celle de configuration du noyau acceptent
des valeurs en <emphasis>millisecondes</emphasis> et <emphasis>non pas</emphasis> en
<emphasis>secondes</emphasis>.</para>
</sect3>
</sect2>
<sect2 id="soft-updates">
@ -2170,28 +2288,217 @@ device_probe_and_attach: cbb0 attach returned 12</screen>
valeur raisonnable par d&eacute;faut bas&eacute;e sur la
quantit&eacute; de m&eacute;moire pr&eacute;sente sur votre
syst&egrave;me.</para></note>
</sect3>
<sect3>
<title><varname>kern.ipc.somaxconn</varname></title>
<indexterm>
<primary><varname>kern.ipc.somaxconn</varname></primary>
</indexterm>
<para>La variable sysctl <varname>kern.ipc.somaxconn</varname>
limite la taille de la file d'attente acceptant les
nouvelles connexions TCP. La valeur par d&eacute;faut de
<literal>128</literal> est g&eacute;n&eacute;ralement trop
faible pour une gestion robuste des nouvelles connexions
dans un environement de serveur web tr&egrave;s
charg&eacute;. Pour de tels environnements, il est
recommand&eacute; d'augmenter cette valeur &agrave;
<literal>1024</literal> ou plus. Le <quote>daemon</quote>
en service peut de lui-m&ecirc;me limiter la taille de la
file d'attente (e.g. &man.sendmail.8;, ou
<application>Apache</application>) mais disposera, la
plupart du temps, d'une directive dans son fichier de
configuration pour ajuster la taille de la file d'attente.
Les files d'attentes de grandes tailles sont plus
adapt&eacute;es pour &eacute;viter les attaques par
d&eacute;ni de service (<abbrev>DoS</abbrev>).</para>
</sect3>
</sect2>
<sect2>
<title>Limitations r&eacute;seau</title>
<para>L'option du noyau <option>NMBCLUSTERS</option> fixe la
quantit&eacute; de &ldquo;mbuf&rdquo;s disponibles pour le
<para>L'literal du noyau <literal>NMBCLUSTERS</literal> fixe la
quantit&eacute; de <quote>Mbuf</quote>;s disponibles pour le
syst&egrave;me. Un serveur &agrave; fort trafic avec un nombre faible
de &ldquo;mbuf&rdquo;s sous-emploiera les capacit&eacute;s de FreeBSD.
Chaque &ldquo;cluster&rdquo; repr&eacute;sente approximativement 2KO
de <quote>Mbuf</quote>;s sous-emploiera les capacit&eacute;s de FreeBSD.
Chaque &ldquo;cluster&rdquo; repr&eacute;sente approximativement 2&nbsp;Ko
de m&eacute;moire, donc une valeur de 1024 repr&eacute;sente 2
m&eacute;gaoctets de m&eacute;moire noyau r&eacute;serv&eacute;e
pour les tampons r&eacute;seau. Un simple calcul peut
&ecirc;tre fait pour d&eacute;terminer combien sont
n&eacute;cessaires. Si vous avez un serveur web qui culmine &agrave;
1000 connexions simultan&eacute;es, et que chaque connexion
consomme un tampon de r&eacute;ception de 16KO et un tampon
d'&eacute;mission de 16KO, vous avez approximativement besoin
de 32MO de tampon r&eacute;seau pour couvrir les besoin du
consomme un tampon de r&eacute;ception de 16Ko et un tampon
d'&eacute;mission de 16&nbsp;Ko, vous avez approximativement besoin
de 32&nbsp;Mo de tampon r&eacute;seau pour couvrir les besoin du
serveur web. Un bon principe est de multiplier ce nombre
par 2, soit 2x32 MO / 2KO = 64MO / 2KO =32768.</para>
par 2, soit 2x32&nbsp;Mo / 2&nbsp;Ko = 64&nbsp;Mo / 2&nbsp;Ko =32768.
Nous recommendons des valeurs comprises entre 4096 et 32768
pour les machines avec des quantit&eacute;s de m&eacute;moire
plus &eacute;lev&eacute;es. Vous ne devriez, dans aucun
circonstance, sp&eacute;cifier de valeur &eacute;lev&eacute;e
arbitraire pour ce param&egrave;tre &eacute;tant donn&eacute;
que cela peut &ecirc;tre &agrave; l'origine d'un plantage au
d&eacute;marrage. L'option <option>-m</option> de
&man.netstat.1; peut &ecirc;tre utilis&eacute;e pour observer
l'utilisation des <quote>clusters</quote>.</para>
<para>La variable <varname>kern.ipc.nmbclusters</varname>
configurable au niveau du chargeur est utilis&eacute;e pour
ajuster cela au d&eacute;marrage. Seules les anciennes
versions de &os; vous demanderont d'utiliser l'option de
configuration du noyau <literal>NMBCLUSTERS</literal>.</para>
<para>Pour les serveurs charg&eacute;s qui font une utilisation
intensive de l'appel syst&egrave;me &man.sendfile.2;, il peut
&ecirc;tre n&eacute;cessaire d'augmenter le nombre de tampons
&man.sendfile.2; par l'interm&eacute;diaire de l'option de
configuration du noyau <literal>NSFBUFS</literal> ou en fixant
sa valeur dans le fichier
<filename>/boot/loader.conf</filename> (consultez la page de
manuel &man.loader.8; pour plus de d&eacute;tails). Un
indicateur de la n&eacute;cessit&eacute; d'ajuster ce
param&egrave;tre est lorsque des processus sont dans
l'&eacute;tat <literal>sfbufa</literal>. La variable sysctl
<varname>kern.ipc.nsfbufs</varname> est un aper&ccedil;u en
lecture seule de la variable du noyau. Ce param&egrave;tre
s'ajuste de fa&ccedil;on optimale avec
<varname>kern.maxusers</varname>, il peut &ecirc;tre cependant
n&eacute;cessaire de l'ajuster en fonction des besoins.</para>
<important>
<para>M&ecirc;me si une <quote>socket</quote> a
&eacute;t&eacute; marqu&eacute;e comme &eacute;tant
non-bloquante, un appel de &man.sendfile.2; sur la
<quote>socket</quote> non-bloquante peut r&eacute;sulter en un
blocage de l'appel &man.sendfile.2; jusqu'&agrave; ce que
suffisament de <literal>struct sf_buf</literal> soient
lib&eacute;r&eacute;es.</para>
</important>
<sect3>
<title><varname>net.inet.ip.portrange.*</varname></title>
<indexterm>
<primary>net.inet.ip.portrange.*</primary>
</indexterm>
<para>Les variables <varname>net.inet.ip.portrange.*</varname>
contr&ocirc;lent les intervalles de ports automatiquement
allou&eacute;s aux <quote>socket</quote>s TCP et UDP. Il y
a trois intervalles: un intervalle bas, un intervalle par
d&eacute;faut, et intervalle un haut. La plupart des
programmes r&eacute;seau utilisent l'intervalle par
d&eacute;faut qui est contr&ocirc;l&eacute; par
<varname>net.inet.ip.portrange.first</varname> et
<varname>net.inet.ip.portrange.last</varname>, qui ont pour
valeur par d&eacute;faut respectivement 1024 et 5000. Ces
intervalles de ports sont utilis&eacute;s pour les
connexions sortantes, et il est possible de se trouver
&agrave; court de ports dans certaines conditions. Cela
arrive le plus souvent quand votre syst&egrave;me fait
tourner un proxy web tr&egrave;s charg&eacute;.
L'intervalle de ports n'est pas un probl&egrave;me quand
vous ex&eacute;cutez des serveurs qui ne g&egrave;rent
principalement que des connexions entrantes, comme un server
web classique, ou qui ont un nombre de connexions sortantes
limit&eacute;es comme un relai de messagerie. Pour les cas
o&ugrave; vous risquez d'&ecirc;tre &agrave; court de ports,
il est recommand&eacute; d'augmenter
l&eacute;g&egrave;rement
<varname>net.inet.ip.portrange.last</varname>. Une valeur
de <literal>10000</literal>, <literal>20000</literal> ou
<literal>30000</literal> doit &ecirc;tre suffisante. Vous
devriez &eacute;galement penser au probl&egrave;me du
coupe-feu lors du changement de l'intervalle des ports.
Certains coupes-feu peuvent bloquer de grands intervalles de
ports (en g&eacute;n&eacute;ral les ports inf&eacute;rieurs)
et s'attendent &agrave; ce que les syst&egrave;mes utilisent
les intervalles sup&eacute;rieurs pour les connexions
sortantes &mdash; pour cette raison il est conseill&eacute;
de diminuer
<varname>net.inet.ip.portrange.first</varname>.</para>
</sect3>
<sect3>
<title>Le produit d&eacute;lai-bande passante TCP</title>
<indexterm>
<primary>limitation du produit d&eacute;lai-bande passante
TCP</primary>
<secondary><varname>net.inet.tcp.inflight_enable</varname></secondary>
</indexterm>
<para>La limitation du produit d&eacute;lai-bande passante TCP
est semblable au TCP/Vegas sous NetBSD. Elle peut
&ecirc;tre activ&eacute;e en positionnant &agrave;
<literal>1</literal> la variable
<varname>net.inet.tcp.inflight_enable</varname>. Le
syst&egrave;me tentera alors de calculer le produit
d&eacute;lai-bande passante pour chaque connexion et
limitera la quantit&eacute; de donn&eacute;es en attente
&agrave; la quantit&eacute; juste n&eacute;cessaire au
maintient d'un flux de sortie optimal.</para>
<para>Cette fonctionnalit&eacute; est utile si vous diffusez
des donn&eacute;es par l'interm&eacute;diare de modems, de
connexions Ethernet Gigabit, ou m&ecirc;me de liaisons hauts
d&eacute;bits WAN (ou toute autre liaison avec un produit
d&eacute;lai-bande passante &eacute;lev&eacute;), tout
particuli&egrave;rement si vous utilisez &eacute;galement le
dimensionnement des fen&ecirc;tres d'&eacute;mission ou que
vous avez configur&eacute; une fen&ecirc;tre
d'&eacute;mission importante. Si vous activez cette option,
vous devriez &eacute;galement vous assurer que
<varname>net.inet.tcp.inflight_debug</varname> est
positionn&eacute;e &agrave; <literal>0</literal>
(d&eacute;sactive le d&eacute;bogage), et pour une
utilisation en production, fixer
<varname>net.inet.tcp.inflight_min</varname> &agrave; au
moins <literal>6144</literal> peut &ecirc;tre
b&eacute;n&eacute;fique. Notez, cependant, que fixer des
minimas &eacute;lev&eacute;s peut d&eacute;sactiver la
limitation de bande passante selon la liaison. La fonction
de limitation diminue la quantit&eacute; de donn&eacute;es
accumul&eacute;es dans les files d'attente
interm&eacute;diaire de routage et de commutation, et
diminue &eacute;galement la quantit&eacute; de
donn&eacute;es pr&eacute;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&egrave;rement sur des modems lents, seront en
mesure de fonctionner avec des <emphasis>temps
d'aller-retour</emphasis> plus faible. Mais cette
fonctionnalit&eacute; n'affecte que la transmission de
donn&eacute;es (transmission c&ocirc;t&eacute; serveur).
Ceci n'a aucun effet sur la r&eacute;ception de
donn&eacute;es (t&eacute;l&eacute;chargement).
</para>
<para>Modifier <varname>net.inet.tcp.inflight_stab</varname>
n'est <emphasis>pas</emphasis> recommand&eacute;. Ce
param&egrave;tre est fix&eacute; par d&eacute;faut &agrave;
la valeur 20, repr&eacute;sentant au maximum 2 paquets
ajout&eacute;s &agrave; la fen&ecirc;tre de calcul du
produit d&eacute;lai-bande passante. La fen&ecirc;tre
suppl&eacute;mentaire est n&eacute;cessaire pour stabiliser
l'algorithme et am&eacute;liorer la r&eacute;ponse aux
changements de conditions, mais il peut en r&eacute;sulter
des temps de <quote>ping</quote> plus &eacute;lev&eacute;s
sur les liaisons lentes (mais cependant inf&eacute;rieurs
&agrave; ce que vous obtiendriez sans l'algorithme de
limitation). Dans de tels cas, vous pouvez essayer de
r&eacute;duire ce param&egrave;tre &agrave; 15, 10, ou 5, et
vous pouvez avoir &agrave; r&eacute;duire le
param&egrave;tre
<varname>net.inet.tcp.inflight_min</varname> (par exemple
&agrave; 3500) pour obtenir l'effet d&eacute;sir&eacute;.
Ces param&egrave;tres ne doivent &ecirc;tre r&eacute;duits
qu'en dernier ressort.</para>
</sect3>
</sect2>
</sect1>