Serverperfmode = 1 aslında macOS'ta ne yapar?


24

Açmak burada açıklanmıştır , ancak ayrıntı yoktur.

Belirsiz bir açıklama var:

Performans modu, Mac'inizin sistem parametrelerini değiştirir. Bu değişiklikler, zorlu sunucu uygulamaları için donanımınızdan daha iyi yararlanır.

Sistemin / çekirdeğin içinde gerçekte ne değişiyor?

Yanıtlar:


16

Sunucu Performansı Modunu açmak, esasen olası / izin verilen maksimum işlem ve bağlantı sayısı ile ilgili bazı çekirdek / net parametrelerini artırır ve bazı bellek / zamanlayıcı ayarlarını değiştirir:

...
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

Amaç, daha fazla açık dosyaya (özellikle web sunucuları için gerekli) ve bağlantılara aynı anda daha fazla istemciye hizmet vermek ve tek sunucu iş parçacıklarını bellek / sanal bellekten daha hızlı atmak (belirli değişiklikleri doğru şekilde yorumluyorsam) sağlamaktır.


Geçmişte, Apple farklı bir işletim sistemi yayınladı ve şimdi sunucu tüketici işletim sisteminin üstüne yüklendiğinde bazı temel ayarlamalar, işletim sisteminin işletim sistemini kullanan bir kişi için ayarlanmak yerine bir sunucuya bağlanan 25 kullanıcı için işlemleri çalıştırmasına yardımcı olabilir. Bu ayarlamalar sadece bir başlangıç ​​noktasıdır - sunucusunun yüksek yük altında çalışmasını isteyen herkes, performans modunu açıp kapatmaktan çok daha ayrıntılı bir düzeyde şeyleri özelleştirmeli ve izlemelidir.

Ayrıca, bu sınırlamalar çoğunlukla, süreçler arası iletişim sinyal kanalları (ipc) gibi sınırlı kaynakları tüketerek kötü yazılımların bir sunucuyu devirmesini önlemek içindir. Bir kullanıcının çalıştığı bir sistemde, düzinelerce kullanıcı için çalışan onlarca işlemden daha hızlı bir şekilde kaçak işlemi durdurmak istersiniz. "Performans", "bir dosyaya veya bir web sayfasına daha hızlı hizmet verme" yerine bazı zor sınırlar getirdiği düşünülebilir.


sysctl -aBu tarafından bildirilen 1100'den fazla belirli öğe olduğundan, sunucu ayarı veya çekirdek parametresi değişikliklerinde yeniyseniz ilk izleyebileceğiniz şeylerin çok güzel bir özeti. Başkalarına yardımcı olması halinde cevaba bazı "görüşler" ekleyeceğim. İfade edilen görüşler size ait değilse lütfen düzenlemelerimi geri alın.
bmike

Bu bir macbook pro'da da çalışıyor mu?
Tadej

1
@JedatKinports Bu ayrıca MacBooks için de çalışıyor, evet
klanomath

Ve bu "# çok özel" ayarlar nelerdir? Ayrıca: Ben de bazı sysctl ayarları değiştirilmiş olduğunu düşünüyorum. İzinler sıkılaştırıldı; diğer 'şeyler' tek başına OS X Server'ın eski sürümlerinde eşit derecede farklı?
LаngLаngС

9

Sunucu Performans Modu (aka perfmodeveya serverperfmode) bir dizi çekirdek parametresini değiştirir, çok daha yüksek sınırlar sağlamak ve böylece çok daha fazla işlemin çalışmasını, dosyaların açılmasını ve ağ bağlantılarının etkinleştirilmesini sağlamak için çekirdek için çok daha fazla bellek ayırır diğer şeylerin yanında. Tüm parametreler, takılı bellek miktarı sınırlar dahilinde ölçeklenir ve en az 16 GiB bellek yüklü olmadığı sürece hiçbir şey değişmez . @ klanomath'ın numaraları 16 GiB belleğin yüklü olmasına karşılık gelir.

Apple'ın eski bir destek belgesinden Sunucu 10.6 hakkında kısa bir açıklama :

  • Takılı her 8 GB bellek için 2500 işlem ve 150.000 vod kullanılabilir.
  • Maksimum iş parçacığı sayısı, maksimum işlem sayısının beş katı (5x) olarak ayarlanır. (Bu artık doğru gibi görünmüyor)
  • Tek bir kullanıcı kimliği (uid) maksimum işlem sayısının% 75'ini kullanabilir.
  • Tek bir işlem maksimum evre değerinin% 20'sine kadar tahsis edebilir.

48 GiB bellekli performans modunda şunu görüyorum:

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

Gerçekten içine girmek istiyorsanız, gerçek kodu okuyabilirsiniz. Aşağıda El Capitan 10.11.6'dan alınmıştır. Sunucu modu hala aynı (OS X 10.14 Mojave'den olan en son yayınlanan koda kadar), ancak en az 12 GiB belleğiniz varsa normal mod OS X 10.13 High Sierra'da başlayarak bir performans artışı aldı (değişiklikler dahil koddaki yorumlarda).

scale_seutpYukarı fonksiyon setleri scalefaktör olarak floor(memsize / 8 GiB)size Sunucu Performans Modu etkin ve bellek en az 16 GiB yüklü varsa. Aksi takdirde, en az 3 GiB belleğiniz olmadığı sürece sıfırdır, bu durumda 2 veya High Sierra ile başlayarak , memsize / 4 GiB. ( task_maxKod pasajının başlangıcındaki değer , çekirdek oluşturulduğunda ayarlanır ve OS X dağıtılırken Apple tarafından nasıl ayarlandığı belirsizdir. Muhtemelen 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; 
    }

Daha sonra bu scalefaktör bsd_scale_setup(sadece 64 bit çekirdek için) veya burada High Sierra için uygulanır . Bu, yukarıda tartışılan ve üzerinden görülebilen çekirdek parametrelerini değiştirir sysctl. Sunucu Performans Modu etkin değilse , ölçeklendirilen tek şeyin High Sierra'ya kadar maxproc(532 -> 1064) ve maxprocperuid(266 -> 709) olduğunu maxfilesve maxfilesperprocen az 12 GiB belleğiniz varsa ne zaman ve çarpılacağını unutmayın.

    /* 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);
        }
    }

Son olarak ölçek faktörü de uygulanmaktadır bsd_exec_setup. Bu, bir işlemi başlatmak için gereken tüm verileri birleştirmek için ne kadar çekirdek belleğinin ayrıldığını yapılandırır. Bir sürecin nasıl olduğu exec, Unix çekirdeği hakkındaki bir kitapta tam bir bölüme layık olduğu için buraya girmeyeceğim. Bu ayarın üst düzey sonucu, daha büyük bir sayının daha fazla bellek kaplaması, ancak saniyede daha fazla sayıda işlem oluşturulmasına izin vermesidir. (Bu kod şimdiki / Mojave'de aynı kalsa da, etki scaleHigh Sierra'da nasıl hesaplandığındaki değişiklikle değişti . Yukarıdaki ayrıntıları hatırlayın: High Sierra ve daha sonra, ölçek memory / 4 GiBnormal mod için kabaca ( ) ve ( memory / 8 GiB) Sunucu moduna bsd_simul_execsgeçtiğinizde aşağı inebilirsiniz.)

    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);

El Capitan için şimdiki / Mojave aracılığıyla, bu BSD_PAGEABLE_SIZE_PER_EXEC = 264 * 1024yüzden 48 GiB Mac'im için çekirdek, ortaya çıkacak yeni süreçler kurmak için arabellek alanı olarak yaklaşık 67 MiB bellek ayıracak. Bir yandan, bu bir web sunucusu için bile çılgın bir rakam. Öte yandan, 67 MiB, makinedeki 48 GiB'ye kıyasla fıstıktır.

Dolayısıyla, Sunucu Performansı Modu daha fazla bellek kaplar ve bazı programların kontrol tüketen kaynaklardan çıkması durumunda sistemin zarar görme olasılığını arttırır, ancak sistemin çok daha fazla arka plan görevini işleme yeteneğini büyük ölçüde artırır. Apple'ın varsayılan olarak açarak değil, aynı zamanda etkinleştirmeyi de kolaylaştırarak doğru aramayı yaptığını düşünüyorum. Yeterli belleğiniz varsa, High Sierra ile normal modda limitleri yükselttiklerinden memnunum. Üzerinde çalışan birçok sunucu programım olduğu için sorunla karşılaştıklarını fark edene kadar tüm bilgisayarlarımda sunucu modunu kapalı bıraktım (ve kapalı bıraktım). Sonuçta, sistem saatini hızlandırmaz, disk hızını arttırmaz ve sadece yüzlerce bağlantınız varsa ağ G / Ç'yi artırır. Orada'

Öte yandan, 2000 işlemi çalıştırmaya gerçekten ihtiyacınız varsa, High Sierra'ya ulaşana kadar tek seçenek sunucu modu. İyi haber şu ki, açmanın, denemenin ve sevmiyorsanız, geri dönün.


👏🏻! Sonuç yakın not etmek için güzel bir tavsiye: "Ben sunucu modunu kapalı bırakacaktı […]".
dan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.