Por que o PID máximo em um sistema Linux de 64 bits 2 ^ 22?

19

Por que não 2 ^ 62 ou 2 ^ 31 ou qualquer outra coisa?

Qual é o valor máximo do ID do processo?

    
por grandma 24.09.2015 / 06:12

1 resposta

28

Parece ser uma escolha puramente arbitrária. Pode ser qualquer coisa, mas alguém 1 acha que 4 milhões é suficiente. Use a origem :

/*
 * 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))

O histórico no git só parece voltar em 2005, e o valor tem sido pelo menos esse tempo.

1 A página de manual diz que /proc/sys/kernel/pid_max foi adicionado em 2.5.34, e olhando para o changelog , parece que o alguém era 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 compile ...

No entanto, o Ingo adicionou apenas DEFAULT_PID_MAX . PID_MAX_LIMIT foi adicionado por Linus Torvalds em 2.5.37 :

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

Acontece que eu interpretei mal o changelog.

As mudanças estão no o 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 levam.

Graças a @hobbs, parece que o Ingo é o alguém depois de tudo. O patch que citei acima foi enviado pela primeira vez por ele. De post de LKML que o acompanha:

memory footprint of the new PID allocator scales dynamically with /proc/sys/kernel/pid_max: the default 32K PIDs cause a 4K allocation, a pid_max of 1 million causes a 128K footprint. The current absolute limit for pid_max is 4 million PIDs - this does not cause any allocation in the kernel, the bitmaps are demand-allocated runtime. The pidmap table takes up 512 bytes.

Houve uma discussão acalorada sobre limites mais altos, mas parece que nada saiu disso no final.

    
por 24.09.2015 / 06:30

Tags