Warum nicht 2 ^ 62 oder 2 ^ 31 oder irgendetwas anderes?
Warum nicht 2 ^ 62 oder 2 ^ 31 oder irgendetwas anderes?
Antworten:
Es scheint eine rein willkürliche Wahl zu sein. Es könnte alles sein, aber jemand 1 fühlte 4.000.000 genug ist. Verwenden Sie die Quelle :
/*
* 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))
Die Geschichte von Git scheint nur bis 2005 zurück zu gehen, und der Wert ist mindestens so lang.
1 Die manpage sagt, /proc/sys/kernel/pid_max
wurde in 2.5.34 hinzugefügt, und Blick auf den Changelog , es sieht aus wie das jemand war 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 ...
Ingo fügte jedoch nur hinzu DEFAULT_PID_MAX
. PID_MAX_LIMIT
wurde von Linus Torvalds in 2.5.37 hinzugefügt :
<torvalds@home.transmeta.com>
Make pid_max grow dynamically as needed.
Es stellte sich heraus, dass ich das Changelog falsch gelesen habe.
Die Änderungen sind im Patchset 2.5.37 enthalten :
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
Soweit meine Suchfähigkeiten reichen.
Dank @hobbs scheint es, dass Ingo schließlich der Jemand ist . Der Patch, den ich oben zitiert habe, wurde zuerst von ihm gesendet. Aus dem dazugehörigen LKML-Beitrag :
Der Speicherbedarf des neuen PID-Zuordners skaliert dynamisch mit / proc / sys / kernel / pid_max: Die Standard-32-KB-PIDs verursachen eine 4-KB-Zuordnung, ein pid_max von 1 Million verursacht einen 128-KB-Speicherbedarf. Das aktuelle absolute Limit für pid_max liegt bei 4 Millionen PIDs - dies führt zu keiner Zuordnung im Kernel, die Bitmaps werden zur Laufzeit nach Bedarf zugeordnet. Die pidmap-Tabelle belegt 512 Bytes.
Es gab eine hitzige Diskussion darüber, höhere Limits zu haben, aber es scheint, als wäre am Ende nichts dabei herausgekommen.