Por que não 2 ^ 62 ou 2 ^ 31 ou qualquer outra coisa?
Por que não 2 ^ 62 ou 2 ^ 31 ou qualquer outra coisa?
Respostas:
Parece ser uma escolha puramente arbitrária. Poderia ser qualquer coisa, mas alguém 1 sentiu 4 milhões é suficiente. Use a fonte :
/*
* 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))
A história do git parece remontar a 2005, e o valor é esse pelo menos há tanto tempo.
1 A página de manual diz que /proc/sys/kernel/pid_maxfoi adicionada em 2.5.34 e, olhando para o changelog , parece que alguém foi Ingo Molnár :
<mingo@elte.hu>
[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 compile ...
No entanto, o Ingo foi adicionado apenas DEFAULT_PID_MAX. PID_MAX_LIMITfoi adicionado por Linus Torvalds em 2.5.37 :
<torvalds@home.transmeta.com>
Make pid_max grow dynamically as needed.
Acontece que eu li mal o changelog.
As alterações estão no patchset 2.5.37 :
diff -Nru a/include/linux/threads.h b/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
Isso é tanto quanto minhas habilidades de pesquisa me permitem.
Graças a @hobbs, parece que Ingo é a pessoa, afinal. O patch que citei acima foi enviado pela primeira vez por ele. Na postagem do LKML que o acompanha:
a pegada de memória do novo alocador de PID é dimensionada dinamicamente com / proc / sys / kernel / pid_max: os PIDs de 32K padrão causam uma alocação de 4K, um pid_max de 1 milhão causa uma pegada de 128K. O limite absoluto atual para pid_max é de 4 milhões de PIDs - isso não causa alocação no kernel, os bitmaps são tempo de execução alocado por demanda. A tabela pidmap ocupa 512 bytes.
Houve uma discussão acalorada sobre ter limites mais altos, mas parece que nada saiu disso no final.