-
bsd/os
-
Mémoire partagée. Par défaut, seulement 4 Mo de
mémoire partagée est supportée. Gardez en tête que la mémoire
partagée n'est pas paginable ; elle est verrouillée en RAM.
Pour accroître la mémoire partagée supportée par votre
système, ajoutez ce qui suit à la configuration de votre
noyau. Une valeur de 1024 pour shmall représente 4 mo de mémoire partagée.
Pour argumenter la mémoire partagée supportée par votre
système, ajoutez quelque chose comme ceci à votre
configuration du noyau :
options "SHMALL=8192"
options "SHMMAX=\(SHMALL*PAGE_SIZE\)"
shmall est mesuré en pages de 4 Ko,
donc une valeur de 1024 représente 4 Mo de mémoire partagée.
Du coup, la configuration ci-dessus augmente l'aire de
mémoire partagée à 32 Mo. Pour ceux utilisant une version 4.3
ou ultérieure, vous aurez probablement besoin d'augmenter
kernel_virtual_mb au-dessus de la
valeur par défaut, 248. une fois
tous les changements effectués, recompilez le noyau et
redémarrez.
Pour ceux utilisant une version 4.0 ou antérieures, utilisez
bpatch
pour
connaître la valeur sysptsize dans
le noyau actuel. Elle est calculée dynamiquement au
démarrage.
$ bpatch -r sysptsize
0x9 = 9
Ensuite, ajoutez sysptsize comme
valeur codée en dur dans le fichier de configuration du
noyau. Augmentez la valeur que vous trouvez en utilisant
bpatch
. ajoutez
1 pour chaque 4 Mo supplémentaire de mémoire partagée que
vous souhaitez.
options "SYSPTSIZE=16"
sysptsize ne peut pas être modifié
avec
sysctl
.
Sémaphores. Vous voudrez probablement aussi
augmenter le nombre de sémaphores ; la somme totale par
défaut du système (60) n'autorisera seulement que 50
connexions PostgreSQL™. initialisez les
valeurs que vous souhaitez dans le fichier de configuration
du noyau :
options "SEMMNI=40"
options "SEMMNS=240"
-
freebsd
-
Les paramètres par défaut sont seulement acceptables pour de
petites installations (par exemple, la valeur par défaut de
shmmax est de 32 mo). les
modifications se font via les interfaces
sysctl
ou
loader
. les paramètres
suivants peuvent être configurés en utilisant
sysctl
:
$ sysctl -w kern.ipc.shmall=32768
$ sysctl -w kern.ipc.shmmax=134217728
$ sysctl -w kern.ipc.semmap=256
Pour que ces paramètres persistent après les redémarrages,
modifiez /etc/sysctl.conf.
Les paramètres restant, concernant les sémaphores, sont en
lecture seule en ce qui concerne
sysctl
mais peuvent être
modifiés avant le redémarrage en utilisant l'invite
loader
:
(loader) set kern.ipc.semmni=256
(loader) set kern.ipc.semmns=512
(loader) set kern.ipc.semmnu=256
De façon similaire, ils peuvent être sauvegardés entre les
redémarrages dans /boot/loader.conf.
Vous pourriez aussi vouloir configurer votre noyau pour
verrouiller la mémoire partagée en RAM et l'empêcher d'être
envoyé dans la swap. Ceci s'accomplit en utilisant le
paramètre kern.ipc.shm_use_phys de
sysctl
.
En cas d'exécution dans une cage FreeBSD en activant
security.jail.sysvipc_allowed de
sysctl, les postmaster exécutés dans différentes
cages devront être exécutés par différents utilisateurs du
système d'exploitation. Ceci améliore la sécurité car cela
empêche les utilisateurs non root d'interférer avec la
mémoire partagée ou les sémaphores d'une cage différente et
cela permet au code de nettoyage des IPC PostgreSQL de
fonctionner correctement (dans FreeBSD 6.0 et ultérieurs, le
code de nettoyage IPC ne détecte pas proprement les processus
des autres cages, empêchant les postmaster en cours
d'exécution d'utiliser le même port dans différentes cages).
Les freebsd, avant la 4.0,
fonctionnent comme netbsd et
OpenBSD (voir ci-dessous).
-
netbsd,
openbsd
-
Les options sysvshm et sysvsem doivent être activées à la compilation
du noyau (ils le sont par défaut). La taille maximum de
mémoire partagée est déterminée par l'option shmmaxpgs (en pages). ce qui suit montre un
exemple de l'initialisation des différents paramètres
(OpenBSD utilise option à la place) :
options SYSVSHM
options SHMMAXPGS=4096
options SHMSEG=256
options SYSVSEM
options SEMMNI=256
options SEMMNS=512
options SEMMNU=256
options SEMMAP=256
Vous pourriez aussi vouloir configurer votre noyau pour
verrouiller la mémoire partagée en RAM et l'empêcher d'être
paginée en swap. Ceci se fait en utilisant le paramètre
kern.ipc.shm_use_phys de
sysctl
.
-
hp-ux
-
Les paramètres par défaut tendent à suffire pour des
installations normales. Sur hp-ux™ 10, la valeur par défaut de
semmns est 128, qui pourrait être
trop basse pour de gros sites de bases de données.
Les paramètres ipc peuvent
être initialisés dans system
administration manager (sam) sous → . allez sur
create a new kernel une fois
terminée.
-
linux
-
Les paramètres par défaut sont seulement convenables pour de
petites installations (la taille du segment max par défaut
est de 32 Mo). Néanmoins, les paramètres restants sont assez
généreusement configurés et ne requièrent pas habituellement
de modifications. La taille du segment max peut être modifiée
via l'interface
sysctl
. Par exemple, pour
autoriser 128 Mo et pour configurer explicitement la taille
de la mémoire partagée à 2097152 pages (la valeur par défaut)
:
$ sysctl -w kernel.shmmax=134217728
$ sysctl -w kernel.shmall=2097152
De plus, ces paramètrages peuvent être conservés entre les
redémarrages dans /etc/sysctl.conf.
Les anciennes distributions pourraient ne pas disposer du
programme
sysctl
mais des
modifications équivalentes peuvent se faire en manipulant le
système de fichiers /proc :
$ echo 134217728 >/proc/sys/kernel/shmmax
$ echo 2097152 >/proc/sys/kernel/shmall
-
macos x
-
Avec OS X 10.2 et antérieures, éditez le fichier /system/library/startupitems/systemtuning/systemtuning
et modifiez les valeurs avec les commandes suivantes :
sysctl -w kern.sysv.shmmax
sysctl -w kern.sysv.shmmin
sysctl -w kern.sysv.shmmni
sysctl -w kern.sysv.shmseg
sysctl -w kern.sysv.shmall
Avec OS X 10.3 et les versions suivantes, ces commandes ont
été déplacées dans /etc/rc et
doivent être éditées là-bas. Notez que /etc/rc est habituellement surchargé par les
mises à jour d'OS X (comme celle de 10.3.6 à 10.3.7) donc
vous devez vous attendre à avoir à refaire votre édition
après chaque mise à jour.
Sous OS X 10.3.9 et les versions ultérieures, au lieu de
modifier /etc/rc, vous pouvez créer
un fichier nommé /etc/sysctl.conf
contenant des affectations de variables comme
kern.sysv.shmmax=4194304
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.sysv.shmall=1024
Cette méthode est préférée à la modification de /etc/rc car vos modifications seront
préservées y compris après les mises à jour du système. Notez
que
les cinq
paramètres de mémoire partagée doivent être configurés dans
/etc/sysctl.conf, sinon les valeurs
seront ignorées.
Attention au fait que les versions récentes d'OS X ignorent
les tentatives de configuration de SHMMAX à une valeur qui n'est pas un multiple
exact de 4096.
SHMALL est mesuré en page de 4 Ko
sur cette plateforme.
Dans toutes les versions d'OS X, vous aurez besoin de
redémarrer pour que les modifications de mémoire partagée
soient prises en considération.
-
sco
openserver
-
Dans la configuration par défaut, seuls 512 Ko de mémoire
partagée par segment est autorisé. Pour augmenter ce
paramétrage, allez tout d'abord dans le répertoire /etc/conf/cf.d. pour afficher la valeur
courante de shmmax, lancez
./configure -y SHMMAX
Pour configurer une nouvelle valeur de shmmax, lancez
./configure SHMMAX=valeur
où
value
est la
nouvelle valeur que vous voulez utiliser (en octets). Après
avoir configuré shmmax,
reconstruisez le noyau :
./link_unix
et redémarrez.
-
aix
-
Au moins à partir de la version 5.1, il ne devrait plus être
nécessaire de faire une configuration spéciale pour tel
paramètre comme shmmax car il
apparaît qu'il est configuré pour autoriser l'utilisation de
toute la mémoire comme mémoire partagée. C'est la sorte de
configuration utilisée habituellement pour les autres bases
de données comme db/2.
Néanmoins, cela pourrait être nécessaire pour modifier
l'information globale
ulimit
dans /etc/security/limits car les limites dures
par défaut pour les tailles de fichiers (fsize) et les nombres de fichiers (nofiles) pourraient être trop bas.
-
solaris
-
Au moins dans la version 2.6, la taille maximum par défaut
des segments de mémoire partagée est trop basse pour
PostgreSQL™. le
paramétrage adéquat peut être modifié dans /etc/system, par exemple :
set shmsys:shminfo_shmmax=0x2000000
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256
set semsys:seminfo_semmap=256
set semsys:seminfo_semmni=512
set semsys:seminfo_semmns=512
set semsys:seminfo_semmsl=32
Vous avez besoin de redémarrer pour que les modifications
prennent effet.
Voir aussi
http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.html
pour des informations sur la mémoire partagée sous
solaris™.
-
unixware
-
Avec unixware™ 7, la
taille maximum des segments de mémoire partagée est de 512 Ko
dans la configuration par défaut. Pour afficher la valeur
courante de shmmax, lancez
/etc/conf/bin/idtune -g SHMMAX
qui affiche la valeur courante, par défaut, minimum et
maximum. Pour configurer une nouvelle valeur de shmmax, lancez
/etc/conf/bin/idtune SHMMAX valeur
où
valeur
est la
nouvelle valeur que vous voulez utiliser (en octets). Après
avoir initialisé shmmax,
reconstruisez le noyau :
/etc/conf/bin/idbuild -B
et relancez.