Je suis toujours débutant et donc je débute par quelques unes de mes vielles compréhensions du sujet, aussi étant donné que je programme encore sur plusieurs plateformes, dont 3 versions de Raspberry Pi d'ici peu (tout mes projets sont en GNAT -gnat2005, tcsh et g++, oui C++ voir C/gcc selon case-of-study),
Donc pour situé un peu l'histoire de la pagination/système (~ 1960) ...
... "de mon temps" ...
La "pagination" était une méthode de gestion de la mémoire vive (RAM) qui incluait la possibilité de faire "swapper" (échanger) des pages de processus "latents" (En général "dormant depuis le plus longtemps à un moment donné, TimeSlice/System selon la politique de Memory_Managment pour l'OS, je pense à VAX/VMS par ex.) (...) et donc d'échanger des pages de processus en attente d'interruption(s) I/O (autre ex. de processus latent) avec une plage d'un support de
mémoire permanente prévue à cet effet, afin de laisser un maximum de RAM pour les processus actifs [...].
En gros on (l'OS) "pagine" pour les cas ou la mémoire vive n'est plus suffisante,...
ce qui donne assez souvent l'equation RAM(physique) = RAM(virtuel*users)+SWAP ...
La bonne question (?): Que fait votre distro_de_LINUX aujourd'hui si la RAM(physique) est débordée dans le cas de la solution 'ramdisk' si RAM(virtuel*users) = RAM(phy) - RAM(SWAP) ? (Je précise donc que la RAM "virtuelle" est amputée d'autant de SWAP que l'on lui reprendrais avec une ramdisk... #théorie_d_un_ancètre)
~
raise [Memory]PageFault ? #hardware_interrupt (?)
Autrement-dit (aussi), on se retrouve dans la situation où
l'on se met à allouer de la RAM pour laisser (une autre partie) de la RAM aux processus actifs (et ou prioritaire, etc.) #...simple remarque...
Mais....
Il est pourtant, d'un point de vue électronique, pour la vitesse d'accès à la SWAP (plage de pagination) il est vrai que ce choix d'utiliser la RAM via un
ramdisk demeure parfaitement légitime, après
une solide estimation de l'utilisation courante ET d'éventuels cas de surcharge de l'ensemble des processus potentiellements activables en tout temps. [êtes-vous bien sûr de pouvoir faire ça? ~ laboratoire d'informatique industriel, statistiques, etc.]
Autres remarques, sur IBM s/38 on avait des options systèmes telles que
*JOBPOOL QMAXJOB(n) (les processus étaient de *JOB) et on gérait un paramètre QMAXJOB(n) si ma mémoire est bonne. Sur d'autres systèmes (orientés mainframe) des gestion de quotas/users pour Sun, Vax, Pr1me, idem pour Unix, Linux(s), xxxBSD, QNX, etc. -- je suppose

--
En fait, je n'ai jamais eu ce problème sur Linux.
Mais sur mes HP41[C[V|X]], oui et "ça" se présente autrement (hors sujet)
Par contre pour économiser des accès à ce qui aujourd'hui fait office de "mémoire permanente" (SSD dont les accès sont comptés) la situation justifie à nouveau de se préoccuper de la zone d'échange (swap), mais j'aurais,
si les contraintes de vitesse d'accès le permettent (situation non Hard RT), j'opterais plutôt pour la solution FlashMem externe sur USB ou au pire... sshfs[d] exploitant un FileServer qui trainerait dans les parages d'ethernet. (je plaisante un peu là, quoique pour les situation de HighSpeed clusters, "grid", ceci se justifie bien pour la répartition des
tâches physiques par exemple en Hard-RTP.
Sur les IBM s/38 et bien d'autres, VAX/VMS, SPARC-Stations/SUN, Univac, Pr1me, (...) les paramètres de gestion de charges admettent des politiques très distinctes (...) c'est évidemment partie de ce qui distingue un système d'exploitation d'un autre.
Pour plus d'info de culture générale:
Niklaus Emil Wirth, et plein d'autres morts...
Sinon pour les [Open|Net|Free]BSD spécifiquement: Cahiers de l'admin BSD de Emmanuel Dreyfus, il est très bon.
Ou
pour Linux/kernel en général heu...
Linux Kernel Programming (ma vielle Third Edition) m'indique
à la page 88, que le cas de défaut de mémoire vive entrainerait l'appel d'un
do_page_fault(...) qui aurait encore l'occasion de un check du flag
VM_GROWSDOWN sur la page en question et, qui recherche s'il est prévu un page virtuelle libre, sinon c'est, soit le
SIGBUS, soit le
SIGKILL qui ferait juste tomber le process "incriminé" (...) En fait c'est encore un petit peu plus compliqué:
handle_mm_fault() peut aussi engendrer un
SIGSEGV .... je laisse le soin d'approfondir (ou pas), d'autant que mes infos sont peut-être déjà
éculées en ce qui concerne
Linux et son architecture.
REFS/noyaux-Linux: (attention aux éventuelles nuances d'architecture matérielle et au "trash-goto-programming"/QuickAndDirty et au code illisible, ou presque, considérant qu'à l'époque
on devait se contenter de 80 colonnes pour 24 lignes ... peu importe))
http://elixir.free-electrons.com/linux/ ... ult.c#L259
http://elixir.free-electrons.com/linux/ ... ry.c#L3833
http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
REFS
https://fr.wikipedia.org/wiki/M%C3%A9moire_virtuelle
https://fr.wikipedia.org/wiki/Grappe_de_serveurs
https://wiki.archlinux.org/index.php/swap
exemple à la volée... (sans reboot, sur une vielle debian)
Code: Select all
#++ balancer des 00x0 dans un fichier presque amusant...
sudo dd if=/dev/zero of=/my/path/swapFile bs=1024 count=65536
#++ Remplacer 65536 par la taille voulu en kB (bs=1024(=1ko)) multiplié par le count=N[ko]
$ sudo mkswap swapFile
$ sudo swapon swapFile
$ sudo swapoff -a # pour stopper l'accès "à la volée" (voir man swapon)
# et aussi "man 2 swapon" pour la gestion des priorités de swap-zones (areas)
Code: Select all
$ sudo swapon --show
NAME TYPE SIZE USED PRIO
/dev/sda5 partition 4.9G 0B -1
# ou encore...
Code: Select all
$ sudo free -h
total used free shared buffers cached
Mem: 3.9G 2.6G 1.3G 0B 135M 1.8G
-/+ buffers/cache: 655M 3.2G
Swap: 4.9G 0B 4.9G
Code: Select all
$ man mkswap #-- attention avec cette formule "systemd" <--- bouh le vilain jeu de motD
$ sudo lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
sda1 8:1 0 114.4G 0 part /
sda2 8:2 0 1K 0 part
sda5 8:5 0 4.9G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
$ sudo lsblk -l /dev/sda1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda1 8:1 0 114.4G 0 part /
s'arranger entre autre pour que la /etc/fstab ait quelques lignes comme ci-dessous...
Code: Select all
$ sudo vi /etc/fstab #oui je préfère "vi" pour ce type de plateforme (X)
...
/my/path/swapfile none swap defaults 0 0
UUID=<UUID> none swap defaults 0 0
/dev/sda1 none swap defaults,pri=100 0 0
/dev/sdb2 none swap defaults,pri=10 0 0
...etc...
Code: Select all
$ swapon -p 100 /dev/sdb2 #...etc...
Il est donc AUSSI
à noter qu'en cas d
'utilisation de plusieurs zones de paginations, une gestion de priorité est prévue (voir
man 2 swapon) et surtout que
ces zones ne gagnent PAS à être contigües (!) j'entends par là que bien souvent une seule suffit (surtout pour débuter).
Tout le détail pour tes documents se trouvent (entre autres) ici:
https://wiki.archlinux.org/index.php/swap Notament vérifier à l'age de votre version debian (init ~ ex-SystemV ou systemd avec sysctl ?) pour le Raspberry Pi3 je n'ai pas encore essayé :/ mais il me semble que sur le premier c'était 'init' ... remarquont que même sur 'init' (systemV-like, sysctl peut y être implémenté comme base de registres ~ en quelque sorte, soupir)
C'est cool d'être vieux non? #non
Et bravo pour la plus grande accessibilité rendue par
Sharka
En fait j'en ai aussi besoin car ma mémoire pagine et freeze bientôt quelques Sapins tout secs.
Merci et bravo.
PS: Excusez-moi du manque de Beyscherelles, ils ne les vendaient pas en suisse dans mon quartier à l'époque où je n'eu jamais passé mon BAC, pour des raisons évidentes d'infrastructures locales qui me font encore défaut, si ma mémoire me trompe.
non (ou plutot oui) <--- faire un choix. (ni oui, ni non)_étant aussi un choix (ou pas?) #kamoulox