Serverperfmode = 1 thực sự làm gì trên macOS?


24

Bật nó lên được mô tả ở đây nhưng không có chi tiết.

Có một mô tả mơ hồ:

Chế độ hiệu suất thay đổi các tham số hệ thống của máy Mac. Những thay đổi này tận dụng tốt hơn phần cứng của bạn để yêu cầu các ứng dụng máy chủ.

Điều gì thực sự thay đổi bên trong hệ thống / kernel?

Câu trả lời:


16

Bật Chế độ hiệu suất máy chủ về cơ bản làm tăng một số tham số kernel / net liên quan đến số lượng tối đa của các quá trình và kết nối có thể / được phép và sửa đổi một số cài đặt bộ nhớ / hẹn giờ:

...
kern.maxvnodes: 66560 > 300000
kern.maxproc: 1064 > 5000
...
kern.maxfilesperproc: 10240 > 150000
kern.maxprocperuid: 709 > 3750
kern.ipc.maxsockbuf: 4194304 > 8388608
...
kern.ipc.somaxconn: 128 > 1024
...
kern.ipc.nmbclusters: 32768 > 65536
...
kern.ipc.sbmb_cnt_peak: 1120 > 1170
...
kern.ipc.njcl: 10920 > 21840
...
kern.timer.longterm.qlen: 100 > 0
kern.timer.longterm.threshold: 1000 > 0
...
net.inet.ip.maxfragpackets: 1024 > 2048
...
net.inet.tcp.tcbhashsize: 4096 > 8192
...
net.inet.tcp.fastopen_backlog: 10 > 200
...
net.inet6.ip6.maxfragpackets: 1024 > 2048
...
net.inet6.ip6.maxfrags: 2048 > 4096
#and some very special vm page-outs/compressor and and memory/cache settings

Mục tiêu là cho phép nhiều tệp mở hơn (đặc biệt cần thiết cho máy chủ web) và các kết nối để phục vụ nhiều máy khách hơn cùng một lúc và loại bỏ các luồng máy chủ đơn nhanh hơn khỏi bộ nhớ / bộ nhớ ảo (nếu tôi diễn giải một số sửa đổi chính xác).


Trước đây, Apple đã phát hành một HĐH khác và giờ đây, máy chủ tải lên trên HĐH tiêu dùng, một số điều chỉnh cơ bản có thể giúp hệ điều hành chạy các quy trình cho 25 người dùng kết nối với máy chủ thay vì điều chỉnh cho một người sử dụng HĐH. Những điều chỉnh này chỉ là điểm khởi đầu - bất kỳ ai muốn máy chủ của họ thực hiện dưới tải trọng cao cần tùy chỉnh và giám sát mọi thứ ở mức chi tiết hơn nhiều so với bật hoặc tắt chế độ hiệu suất.

Ngoài ra, các giới hạn này chủ yếu là để ngăn chặn phần mềm xấu hạ gục máy chủ bằng cách làm cạn kiệt các tài nguyên hạn chế như các kênh báo hiệu liên lạc giữa các quá trình (ipc). Trên hệ thống có một người dùng đang chạy, bạn muốn tạm dừng quá trình chạy trốn sớm hơn nếu có hàng tá quy trình đang chạy cho hàng tá người dùng. "Hiệu suất" có thể được xem là tăng một số giới hạn cứng thay vì "phục vụ một tệp hoặc một trang web nhanh hơn".


Vì có hơn 1100 mục cụ thể được báo cáo bở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.
bmike

Điều này có hoạt động trên macbook pro không?
Tadej

1
@JedatKinports Điều này cũng hoạt động cho MacBook, vâng
klanomath

Và những cài đặt "#very đặc biệt" này là gì? Hơn nữa: Tôi nghĩ rằng có một số cài đặt không sysctl cũng bị thay đổi. Quyền được thắt chặt; 'những thứ' khác nhau như nhau trong các phiên bản cũ hơn của OS X Server độc lập?
LаngLаngС

9

Server Performance Mode (aka perfmodehoặ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_seutpbộ chức năng lên các scaleyế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 đó, scaleyế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 maxfilesmaxfilesperproccũ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à execxứ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_execsthự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 * 1024do đó, đố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.


👏🏻! Lời khuyên thú vị cần lưu ý gần kết luận: "Tôi sẽ tắt chế độ máy chủ [[]]".
dan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.