Itu sangat spesifik untuk Linux. Itu tidak berlaku untuk Unix secara umum.
muru
Saya lebih suka menggunakan integer 64 bit penuh, dengan cara itu Anda bisa menjamin daripada mereka tidak pernah digunakan kembali. Penggunaan kembali mengarah ke kondisi balapan di mana makna ID berubah antara waktu Anda mendapatkannya dan menggunakannya.
CodesInChaos
Jawaban:
34
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 :
<[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 ...
Namun, Ingo hanya menambahkan DEFAULT_PID_MAX. PID_MAX_LIMITditambahkan oleh Linus Torvalds di 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.
Anda bisa mendapatkan git repo dengan sejarah Linux yang lebih dalam, cocok untuk arkeologi, menggunakan instruksi di stackoverflow.com/questions/3264283/… . Itu muncul a5b5f6a "[PATCH] generic-pidhash-2.5.36-J2, BK-curr" oleh Ingo Molnar, dapat dilihat di sini di LWN .
hobbs
@ hobb, keren! Jadi, itu dari Ingo Molnar. Saya bertanya-tanya mengapa Linus mengambil kepemilikan di changelog.
muru
1
@uru: Saya percaya BitKeeper tidak mendukung perbedaan antara pengalih dan pengarang, itu adalah salah satu pelajaran yang diterapkan Linus ketika ia merancang Git. IIRC, Ingo menolak untuk menggunakan BitKeeper, jadi dia mengirim tambalan per surat, dan mereka mendapatkan misattributed di ChangeLogs yang dibuat secara otomatis ke committer, karena BitKeeper tidak memiliki gagasan kepengarangan yang terpisah. Lagipula itu dugaanku.
Jörg W Mittag
@ JörgWMittag mungkin. Sekarang saya berpikir saya salah membaca changelog dan bit itu mungkin tentang patch yang berbeda.
muru
3
Kutipan di dekat akhir jawaban ini menunjukkan bahwa alasan untuk tidak memilih nilai yang sewenang-wenang besar adalah kendala memori. Pada 128 KB RAM per 1M PID, menggunakan bahkan 63 bit (meninggalkan bit tanda) akan, jika saya tidak merusak matematika, memerlukan jutaan TB RAM untuk hanya tabel PID. Sedikit di sisi atas untuk sistem saat ini.
Jawaban:
Tampaknya ini pilihan murni. Bisa apa saja, tetapi seseorang 1 merasa 4 juta sudah cukup. Gunakan sumbernya :
Sejarah pada git tampaknya hanya kembali sejauh 2005, dan nilainya setidaknya selama itu.
1 Halaman manual mengatakan bahwa
/proc/sys/kernel/pid_max
ditambahkan pada 2.5.34, dan melihat changelog , sepertinya seseorang adalah Ingo Molnár :Namun, Ingo hanya menambahkanDEFAULT_PID_MAX
.PID_MAX_LIMIT
ditambahkan oleh Linus Torvalds di 2.5.37 :Ternyata, saya salah membaca changelog.
Perubahan ada di tambalan 2.5.37 :
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:
Ada diskusi panas tentang memiliki batas yang lebih tinggi, tetapi tampaknya tidak ada yang keluar pada akhirnya.
sumber