Tại sao không phải là 2 ^ 62, hay 2 ^ 31 hay bất cứ thứ gì khác?
Tại sao không phải là 2 ^ 62, hay 2 ^ 31 hay bất cứ thứ gì khác?
Câu trả lời:
Nó dường như là một sự lựa chọn hoàn toàn tùy ý. Nó có thể là bất cứ điều gì, nhưng ai đó 1 cảm thấy 4 triệu là đủ. Sử dụng nguồn :
/*
* 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ịch sử trên git dường như chỉ quay trở lại cho đến năm 2005, và giá trị đã kéo dài ít nhất là như vậy.
1 Các manpage nói rằng /proc/sys/kernel/pid_max
đã được bổ sung trong 2.5.34, và nhìn vào changelog , có vẻ như ai đó đã 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 ...
Tuy nhiên, Ingo chỉ thêm vào DEFAULT_PID_MAX
. PID_MAX_LIMIT
đã được Linus Torvalds thêm vào trong 2.5.37 :
<torvalds@home.transmeta.com>
Make pid_max grow dynamically as needed.
Hóa ra, tôi đọc sai thay đổi.
Những thay đổi nằm trong bản vá 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
Đó là theo như kỹ năng tìm kiếm của tôi có được tôi.
Nhờ @hobbs, có vẻ như Ingo là người cuối cùng. Bản vá tôi trích dẫn ở trên lần đầu tiên được gửi bởi anh ấy. Từ bài viết của LKML kèm theo nó:
dấu chân bộ nhớ của bộ cấp phát PID mới tự động thay đổi tỷ lệ với / Proc / sys / kernel / pid_max: các bộ nhớ 32K mặc định gây ra phân bổ 4K, pid_max là 1 triệu gây ra dấu chân 128K. Giới hạn tuyệt đối hiện tại cho pid_max là 4 triệu PID - điều này không gây ra bất kỳ sự phân bổ nào trong kernel, bitmap là thời gian chạy được phân bổ theo nhu cầu. Bảng pidmap chiếm 512 byte.
Đã có một cuộc thảo luận sôi nổi về việc có giới hạn cao hơn, nhưng dường như cuối cùng không có gì ra khỏi nó.