Mengapa tidak 2 ^ 62, atau 2 ^ 31 atau yang lainnya?
Mengapa tidak 2 ^ 62, atau 2 ^ 31 atau yang lainnya?
Jawaban:
Tampaknya ini pilihan murni. Bisa apa saja, tetapi seseorang 1 merasa 4 juta sudah cukup. Gunakan sumbernya :
/*
* 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))
Sejarah pada git tampaknya hanya kembali sejauh 2005, dan nilainya setidaknya selama itu.
1 Halaman manual mengatakan bahwa /proc/sys/kernel/pid_maxditambahkan pada 2.5.34, dan melihat changelog , sepertinya seseorang adalah 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 ...
Namun, Ingo hanya menambahkan DEFAULT_PID_MAX. PID_MAX_LIMITditambahkan oleh Linus Torvalds di 2.5.37 :
<torvalds@home.transmeta.com>
Make pid_max grow dynamically as needed.
Ternyata, saya salah membaca changelog.
Perubahan ada di tambalan 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
Sejauh itulah kemampuan pencarian saya.
Berkat @hobbs, tampaknya Ingo adalah seseorang setelah semua. Patch yang saya kutip di atas pertama kali dikirim olehnya. Dari pos LKML yang menyertainya:
jejak memori skala pengalokasian PID baru secara dinamis dengan / proc / sys / kernel / pid_max: PID 32K default menyebabkan alokasi 4K, pid_max dari 1 juta menyebabkan jejak 128K. Batas absolut saat ini untuk pid_max adalah 4 juta PID - ini tidak menyebabkan alokasi apa pun di kernel, bitmap adalah runtime yang dialokasikan berdasarkan permintaan. Tabel pidmap membutuhkan 512 byte.
Ada diskusi panas tentang memiliki batas yang lebih tinggi, tetapi tampaknya tidak ada yang keluar pada akhirnya.