Pourquoi le PID maximum dans un système Linux 64 bits 2 ^ 22?

Pourquoi pas 2 ^ 62, ou 2 ^ 31 ou quoi que ce soit d'autre?

Quelle est la valeur maximale de l'ID de process?

Cela semble être un choix purement arbitraire. Ça pourrait être n'importe quoi, mais quelqu'un me disait que 4 millions suffisaient. Utilisez la source :

/* * A maximum of 4 million PIDs should be enough for a while. * [NOTE: PID/TIDs are limited to 2^29 ~= 500+ million, see futex.h.] */ #define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \ (sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT)) 

L'histoire de git ne semble remonter qu'en 2005 et la valeur a été au less aussi longue.


1 La page de manuel indique que /proc/sys/kernel/pid_max été ajouté dans la version 2.5.34, et en regardant le changelog , on dirait que quelqu'un était Ingo Molnár :

 <[email protected]> [PATCH] pid-max-2.5.33-A0 This is the pid-max patch, the one i sent for 2.5.31 was botched. I have removed the 'once' debugging stupidity - now PIDs start at 0 again. Also, for an unknown reason the previous patch missed the hunk that had the declaration of 'DEFAULT_PID_MAX' which made it not comstack ... 

Cependant, Ingo n'a ajouté que DEFAULT_PID_MAX . PID_MAX_LIMIT été ajouté par Linus Torvalds dans la version 2.5.37 :

 <[email protected]> Make pid_max grow dynamically as needed. 

Il s'avère, j'ai mal lu le changelog.

Les modifications sont dans le patchset 2.5.37 :

 diff -Nru a/include/linux/threads.hb/include/linux/threads.h --- a/include/linux/threads.h Fri Sep 20 08:20:41 2002 +++ b/include/linux/threads.h Fri Sep 20 08:20:41 2002 @@ -17,8 +17,13 @@ #define MIN_THREADS_LEFT_FOR_ROOT 4 /* - * This controls the maximum pid allocated to a process + * This controls the default maximum pid allocated to a process */ -#define DEFAULT_PID_MAX 0x8000 +#define PID_MAX_DEFAULT 0x8000 + +/* + * A maximum of 4 million PIDs should be enough for a while: + */ +#define PID_MAX_LIMIT (4*1024*1024) #endif 

C'est aussi loin que mes compétences de search m'obtiennent.


Merci à @hobbs, il semble qu'Ingo soit la personne après tout. Le patch que j'ai cité ci-dessus a d'abord été envoyé par lui. Du post LKML qui l' accompagne:

l'empreinte memory du nouvel allocateur PID évolue dynamicment avec / proc / sys / kernel / pid_max: les PID 32K par défaut provoquent une allocation 4K, un pid_max de 1 million provoque une empreinte 128K. La limite absolue actuelle pour pid_max est de 4 millions de PID – cela n'entraîne pas d'allocation dans le kernel, les bitmaps sont des runtime alloués à la request. La table pidmap prend 512 octets.

Il y a eu une discussion animée au sujet d'avoir des limites plus élevées, mais il ne semble rien en sortir à la fin.