Server Performance Mode (aka perfmode
hoặc serverperfmode
) thay đổi một số thông số hạt nhân, đặt bộ nhớ nhiều hơn cho hạt nhân để cung cấp giới hạn cao hơn rất nhiều và do đó cho phép rất nhiều quá trình hơn để chạy, các file được mở, và kết nối mạng được xử lý, trong số những thứ khác. Tất cả các tham số tỷ lệ với số lượng bộ nhớ được cài đặt, trong giới hạn và không có gì thay đổi trừ khi bạn có ít nhất 16 GiB bộ nhớ được cài đặt . Số của @ klanomath tương ứng với việc cài đặt 16 GiB bộ nhớ.
Dưới đây là một mô tả ngắn gọn từ một tài liệu hỗ trợ cũ của Apple về Máy chủ 10.6:
- Đối với mỗi 8GB bộ nhớ được cài đặt, 2500 quy trình và 150.000 vnodes có sẵn.
- Số lượng chủ đề tối đa được đặt thành năm lần (5x) số lượng quy trình tối đa. (Điều này dường như không còn đúng nữa)
- Một ID người dùng (uid) có thể sử dụng tới 75% số lượng quy trình tối đa.
- Một quy trình có thể phân bổ tối đa 20% giá trị luồng tối đa.
Trong chế độ hiệu suất với 48 GiB bộ nhớ, tôi thấy:
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
Nếu bạn thực sự muốn đào sâu vào nó, bạn có thể đọc mã thực tế. Dưới đây là từ El Capitan 10.11.6. Chế độ máy chủ vẫn giống nhau (tối đa mã được xuất bản gần đây nhất là từ OS X 10.14 Mojave), nhưng chế độ bình thường có một vết sưng hiệu năng bắt đầu trong OS X 10.13 High Sierra nếu bạn có ít nhất 12 GiB bộ nhớ (bao gồm các thay đổi trong các bình luận trong mã).
Các scale_seutp
bộ chức năng lên các scale
yếu tố như floor(memsize / 8 GiB)
nếu bạn có Server Performance Mode được kích hoạt và ít nhất 16 GiB bộ nhớ được cài đặt. Mặt khác, nó bằng 0 trừ khi bạn có ít nhất 3 GiB bộ nhớ, trong trường hợp đó là 2, hoặc, bắt đầu với High Sierra , memsize / 4 GiB. (Giá trị task_max
ở đầu đoạn mã được đặt khi kernel được xây dựng và không rõ Apple được đặt như thế nào khi phân phối OS X. Có lẽ là 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;
}
Sau đó, scale
yếu tố đó được áp dụng bsd_scale_setup
(chỉ cho hạt nhân 64 bit) hoặc ở đây cho High Sierra . Điều này sửa đổi các tham số kernel được thảo luận ở trên và hiển thị thông qua sysctl
. Lưu ý rằng nếu Chế độ Hiệu suất Máy chủ không được bật, điều duy nhất được chia tỷ lệ là maxproc
(532 -> 1064) và maxprocperuid
(266 -> 709) cho đến High Sierra, khi maxfiles
và maxfilesperproc
cũng bị lỗi nếu bạn có ít nhất 12 GiB bộ nhớ.
/* 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);
}
}
Cuối cùng, hệ số tỷ lệ cũng được áp dụng trong bsd_exec_setup
. Điều này cấu hình bao nhiêu bộ nhớ kernel được dành riêng để lắp ráp tất cả dữ liệu cần thiết để khởi tạo một quy trình. Làm thế nào một quá trình là exec
xứng đáng với một chương đầy đủ trong một cuốn sách về nhân Unix vì vậy tôi sẽ không đi sâu vào đây. Hậu quả cấp cao của cài đặt này là số lượng lớn hơn chiếm nhiều bộ nhớ hơn, nhưng cho phép tạo ra số lượng lớn hơn các quy trình mỗi giây. (Mặc dù mã này đã ở lại cùng thông qua hiện tại / Mojave, hiệu ứng thay đổi với sự thay đổi trong cách scale
được tính trong High Sierra Nhớ lại các chi tiết trên:. Trong High Sierra và sau đó, quy mô xấp xỉ ( memory / 4 GiB
) cho chế độ bình thường và ( memory / 8 GiB
) cho chế độ máy chủ. Vì vậy, bsd_simul_execs
thực sự có thể đi xuống khi bạn chuyển sang chế độ máy chủ.)
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);
Đối với El Capitan thông qua hiện tại / Mojave, BSD_PAGEABLE_SIZE_PER_EXEC = 264 * 1024
do đó, đối với máy Mac 48 GiB của tôi, hạt nhân sẽ dự trữ khoảng 67 MiB bộ nhớ giống như không gian bộ đệm để thiết lập các quy trình mới được sinh ra. Một mặt, đó là một con số cao điên rồ, ngay cả đối với một máy chủ web. Mặt khác, 67 MiB là đậu phộng so với 48 GiB trên máy.
Vì vậy, Chế độ Hiệu suất Máy chủ chiếm nhiều bộ nhớ hơn và khiến hệ thống dễ bị ảnh hưởng hơn nếu một số chương trình vượt khỏi tầm kiểm soát tiêu tốn tài nguyên, nhưng làm tăng đáng kể khả năng của hệ thống để xử lý nhiều tác vụ nền hơn. Tôi nghĩ rằng Apple đã thực hiện cuộc gọi đúng bằng cách không bật nó theo mặc định nhưng cũng giúp dễ dàng kích hoạt. Tôi rất vui vì với High Sierra, họ hiện đang tăng giới hạn ở chế độ bình thường nếu bạn có đủ bộ nhớ. Tôi sẽ tắt chế độ máy chủ (và đã tắt nó) trên tất cả các máy tính của mình cho đến khi tôi nhận thấy chúng gặp sự cố vì tôi có quá nhiều chương trình máy chủ đang chạy trên đó. Rốt cuộc, nó không tăng tốc đồng hồ hệ thống, nó không tăng tốc độ đĩa và nó chỉ tăng I / O mạng nếu bạn có hàng trăm kết nối. Có
Mặt khác, nếu bạn thực sự có nhu cầu chạy 2000 quy trình, chế độ máy chủ là tùy chọn duy nhất của bạn cho đến khi bạn đến High Sierra. Tin tốt là nó đủ dễ để bật, thử, và nếu bạn không thích nó, hãy tắt đi.
sysctl -a
đây là một bản tóm tắt rất hay về những điều bạn có thể xem đầu tiên nếu bạn chưa quen với điều chỉnh máy chủ hoặc sửa đổi tham số kernel. Tôi sẽ thêm một số "ý kiến" vào câu trả lời trong trường hợp giúp đỡ người khác. Vui lòng hoàn nguyên các chỉnh sửa của tôi nếu ý kiến bày tỏ không phải của bạn.