Hallo,
Am Don, 21 Feb 2008, Thomas Hertweck schrieb:
David Haller wrote:
[...] Negative Zahlen werden dabei AFAIK per "Überlauf" auf die höchsten Prioritäten umgebogen, d.h. -1 = 32767, -2 = 32766 usw.
Wir hatten hier auf der Liste (oder war das noch auf suse-linux) mal eine Diskussion darueber, was die negativen Zahlen eigentlich bedeuten. Vielleicht einfach mal im Archiv suchen. Momentan zeigt hier
$> cat /proc/swaps Filename Type Size Used Priority /dev/sda5 partition 2104472 0 -1
an. Die Prioritaet ist also in der Tat hier als -1 angegeben, wie auch im Artikel auf der Webseite. IMHO macht es im Prinzip wenig Sinn, da die Prioritaet ganz am Ende der Skala angesiedelt ist (wenn es tatsaechlich zu einem Ueberlauf kommt) - damit kann man dann einen evtl. eingefuegten weiteren Swap-Bereich nur noch mit gleicher oder niedrigerer Prioritaet anlegen, nicht aber mit hoeherer Prioritaet.
Naja, ich setze in der fstab explizit positive Prioritäten, aus genau diesem Grund. Das ist IMNSHO ein Problem des Admins, nicht der Kernelprogrammier.
Waere vielleicht mal eine Frage fuer suse-kernel oder so, ich glaube damals endete die Diskussion mit keiner definitiven Antwort.
==== linux-2.6.18.8-0.9/include/linux/swap.h === [..] @:13 #define SWAP_FLAG_PREFER 0x8000 /* set if swap priority specified */ #define SWAP_FLAG_PRIO_MASK 0x7fff #define SWAP_FLAG_PRIO_SHIFT 0 [..] @:130 struct swap_info_struct { unsigned int flags; int prio; /* swap priority */ ==== linux-2.6.18.8-0.9/mm/swapfile.c ==== [..] @:1368 asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) { [..] @:1415 if (swap_flags & SWAP_FLAG_PREFER) { p->prio = (swap_flags & SWAP_FLAG_PRIO_MASK)>>SWAP_FLAG_PRIO_SHIFT; } else { ====
Bei 2.4.10 und 2.4.33.2 sieht's identisch aus (mit anderen Zeilennummern), andere Kernel hab ich grad nicht griffbereit ausgepackt rumliegen.
$ perl -e 'for(-1, -2) { printf "if( %i ) { p->prio = ( %i ) >> 0;\n", $_ & 0x8000, $_ & 0x7fff; }' if( 32768 ) { p->prio = ( 32767 ) >> 0; if( 32768 ) { p->prio = ( 32766 ) >> 0;
Ich hab's also nicht richtig erklärt, es ist kein Überlauf sondern es wird maskiert. Für mich liest sich das jetzt wie ne definitive Antwort. ;P
Warum in /proc/swaps (swap_flags?) die -1 stehen bleibt weiß ich nicht, da nachzukruschteln bin ich jetzt zu müde.
-dnh