Mode Performa Server (alias perfmode
atau serverperfmode
) mengubah sejumlah parameter kernel, menyimpan lebih banyak memori untuk kernel agar dapat memberikan batas yang lebih tinggi dan dengan demikian memungkinkan lebih banyak proses untuk dijalankan, file menjadi terbuka, dan koneksi jaringan menjadi ditangani, antara lain. Semua parameter berskala dengan jumlah memori terpasang, dalam batas, dan tidak ada yang berubah kecuali Anda memiliki setidaknya 16 GiB memori terpasang . Nomor @ klanomath sesuai dengan memiliki 16 GiB memori terpasang.
Berikut adalah deskripsi singkat dari dokumen dukungan lama dari Apple tentang Server 10.6:
- Untuk setiap 8GB memori terpasang, tersedia 2500 proses dan 150.000 vnode.
- Jumlah maksimum utas diatur ke lima kali (5x) jumlah proses maksimum. (Ini sepertinya tidak lagi benar)
- ID pengguna tunggal (uid) dapat menggunakan hingga 75% dari jumlah maksimum proses.
- Satu proses tunggal dapat mengalokasikan hingga 20% dari nilai utas maksimum.
Dalam mode kinerja dengan memori 48 GiB, saya melihat:
kern.maxvnodes: 900000
kern.maxproc: 15000
kern.maxprocperuid: 11250
kern.num_tasks: 15000
kern.num_taskthreads: 15000
kern.num_threads: 75000
kern.maxfiles: 900000
kern.maxfilesperproc: 450000
kern.ipc.maxsockbuf:8388608
kern.ipc.somaxconn: 2048
kern.ipc.nmbclusters: 131072
kern.ipc.sbmb_cnt_peak: # This parameter is not in my kernel
kern.ipc.njcl: 43688
...
kern.timer.longterm.qlen: 0 # same
kern.timer.longterm.threshold: 0 # same
...
net.inet.ip.maxfragpackets: 4096
...
net.inet.tcp.tcbhashsize: 32768
net.inet.tcp.fastopen_backlog: 600
...
net.inet6.ip6.maxfragpackets: 4096
net.inet6.ip6.maxfrags: 8192
Jika Anda benar-benar ingin menggali ke dalamnya, Anda dapat membaca kode yang sebenarnya. Di bawah ini dari El Capitan 10.11.6. Mode server masih sama (hingga kode yang baru-baru ini diterbitkan, yaitu dari OS X 10.14 Mojave), tetapi mode normal mendapat tonjolan kinerja mulai di OS X 10.13 High Sierra jika Anda memiliki setidaknya 12 GiB memori (termasuk perubahan dalam komentar dalam kode).
The scale_seutp
fungsi set up scale
faktor seperti floor(memsize / 8 GiB)
jika Anda memiliki Server Kinerja Mode diaktifkan dan setidaknya 16 GB dari memori yang terpasang. Kalau tidak, nol kecuali Anda memiliki setidaknya 3 GiB memori, dalam hal ini adalah 2, atau, dimulai dengan High Sierra , memsize / 4 GiB. (Nilai task_max
di awal potongan kode diatur ketika kernel dibangun, dan tidak jelas bagaimana itu akan ditetapkan oleh Apple ketika mendistribusikan OS X. Mungkin 1024.)
typeof(task_max) task_max_base = task_max;
/* Raise limits for servers with >= 16G */
if ((serverperfmode != 0) && ((uint64_t)sane_size >= (uint64_t)(16 * 1024 * 1024 *1024ULL))) {
scale = (int)((uint64_t)sane_size / (uint64_t)(8 * 1024 * 1024 *1024ULL));
/* limit to 128 G */
if (scale > 16)
scale = 16;
task_max_base = 2500;
} else if ((uint64_t)sane_size >= (uint64_t)(3 * 1024 * 1024 *1024ULL))
scale = 2;
/* Starting with OS X 10.13 High Sierra, if more than 8 GiB of memory,
* scale = sane_size / 4 GiB with max of 16 (64 GiB or more)
*/
task_max = MAX(task_max, task_max_base * scale);
if (scale != 0) {
task_threadmax = task_max;
thread_max = task_max * 5;
}
Kemudian scale
faktor itu diterapkan di bsd_scale_setup
(hanya untuk kernel 64-bit) atau di sini untuk High Sierra . Ini memodifikasi parameter kernel yang dibahas di atas dan dapat dilihat melalui sysctl
. Perhatikan bahwa jika Server Performance Mode tidak diaktifkan, satu - satunya hal yang diskalakan adalah maxproc
(532 -> 1064) dan maxprocperuid
(266 -> 709) hingga High Sierra, kapan maxfiles
dan maxfilesperproc
juga terbentur jika Anda memiliki setidaknya 12 GiB memori.
/* The initial value of maxproc here is 532 */
if ((scale > 0) && (serverperfmode == 0)) {
maxproc *= scale;
maxprocperuid = (maxproc * 2) / 3;
/* Starting with OS X 10.13 High Sierra, this clause is added
if (scale > 2) {
maxfiles *= scale;
maxfilesperproc = maxfiles/2;
}
*** end of High Sierra addition */
}
/* Apply server scaling rules */
if ((scale > 0) && (serverperfmode !=0)) {
maxproc = 2500 * scale;
hard_maxproc = maxproc;
/* no fp usage */
maxprocperuid = (maxproc*3)/4;
maxfiles = (150000 * scale);
maxfilesperproc = maxfiles/2;
desiredvnodes = maxfiles;
vnodes_sized = 1;
tcp_tfo_backlog = 100 * scale;
if (scale > 4) {
/* clip somaxconn at 32G level */
somaxconn = 2048;
/*
* For scale > 4 (> 32G), clip
* tcp_tcbhashsize to 32K
*/
tcp_tcbhashsize = 32 *1024;
if (scale > 7) {
/* clip at 64G level */
max_cached_sock_count = 165000;
} else {
max_cached_sock_count = 60000 + ((scale-1) * 15000);
}
} else {
somaxconn = 512*scale;
tcp_tcbhashsize = 4*1024*scale;
max_cached_sock_count = 60000 + ((scale-1) * 15000);
}
}
Akhirnya, faktor skala juga diterapkan di bsd_exec_setup
. Ini mengkonfigurasi berapa banyak memori kernel dicadangkan untuk mengumpulkan semua data yang diperlukan untuk menginisialisasi suatu proses. Bagaimana prosesnya akan exec
layak bab penuh dalam sebuah buku tentang kernel Unix jadi saya tidak akan masuk ke sini. Konsekuensi tingkat tinggi dari pengaturan ini adalah bahwa jumlah yang lebih besar membutuhkan lebih banyak memori, tetapi memungkinkan jumlah proses yang lebih besar untuk dibuat per detik. (Meskipun kode ini tetap sama hingga saat ini / Mojave, efeknya berubah dengan perubahan dalam cara scale
dikomputasi di High Sierra. Ingat detail di atas: di High Sierra dan kemudian, skala kira-kira ( memory / 4 GiB
) untuk mode normal dan ( memory / 8 GiB
) untuk mode server. Jadi bsd_simul_execs
sebenarnya bisa turun ketika Anda beralih ke mode server.)
switch (scale) {
case 0:
case 1:
bsd_simul_execs = BSD_SIMUL_EXECS;
break;
case 2:
case 3:
bsd_simul_execs = 65;
break;
case 4:
case 5:
bsd_simul_execs = 129;
break;
case 6:
case 7:
bsd_simul_execs = 257;
break;
default:
bsd_simul_execs = 513;
break;
}
bsd_pageable_map_size = (bsd_simul_execs * BSD_PAGEABLE_SIZE_PER_EXEC);
Untuk El Capitan sampai sekarang / Mojave, BSD_PAGEABLE_SIZE_PER_EXEC = 264 * 1024
jadi untuk 48 GiB Mac saya kernel akan mencadangkan sekitar 67 MiB memori seperti ruang penyangga untuk mengatur proses baru yang akan dihasilkan. Di satu sisi, itu adalah angka tinggi yang gila, bahkan untuk server web. Di sisi lain, 67 MiB adalah kacang dibandingkan dengan 48 GiB pada mesin.
Jadi Server Performance Mode memang mengambil lebih banyak memori, dan membuat sistem lebih mungkin untuk menderita jika beberapa program keluar dari kendali sumber daya yang dikonsumsi, tetapi sangat meningkatkan kemampuan sistem untuk menangani lebih banyak tugas latar belakang. Saya pikir Apple membuat panggilan yang benar dengan tidak menyalakannya secara default tetapi juga membuatnya mudah untuk diaktifkan. Saya senang bahwa dengan High Sierra mereka sekarang menaikkan batas dalam mode normal jika Anda memiliki cukup memori. Saya akan membiarkan mode server mati (dan tidak aktif) di semua komputer saya sampai saya melihat mereka mengalami masalah karena saya memiliki begitu banyak program server yang berjalan di sana. Bagaimanapun, itu tidak mempercepat jam sistem, itu tidak meningkatkan kecepatan disk, dan itu hanya meningkatkan I / O jaringan jika Anda memiliki ratusan koneksi. Sana'
Di sisi lain, jika Anda benar-benar harus menjalankan 2000 proses, mode server adalah satu-satunya pilihan hingga Anda mencapai High Sierra. Berita baiknya adalah cukup mudah untuk dihidupkan, dicoba, dan jika Anda tidak menyukainya, matikan kembali.
sysctl -a
ini adalah ringkasan yang sangat bagus dari hal-hal yang mungkin Anda tonton pertama kali jika Anda baru mengenal penyetelan server atau modifikasi parameter kernel. Saya akan menambahkan beberapa "pendapat" pada jawaban jika membantu orang lain. Harap kembalikan hasil edit saya jika pendapat yang diajukan bukan milik Anda.