সার্ভারপারফমোড = 1 ম্যাকোজে আসলে কী করে?


24

এটি চালু করার বিষয়টি এখানে বর্ণিত হয়েছে তবে কোনও বিবরণ নেই।

একটি অস্পষ্ট বর্ণনা আছে:

পারফরম্যান্স মোড আপনার ম্যাকের সিস্টেমের পরামিতিগুলিকে পরিবর্তন করে। এই পরিবর্তনগুলি সার্ভার অ্যাপ্লিকেশনগুলির দাবি করার জন্য আপনার হার্ডওয়্যারের আরও ভাল সুবিধা গ্রহণ করে।

সিস্টেম / কার্নেলের ভিতরে আসলে কী পরিবর্তন হচ্ছে?

উত্তর:


16

সার্ভার পারফরম্যান্স মোড চালু করে প্রয়োজনীয় / অনুমোদিত প্রক্রিয়া এবং সংযোগের সর্বাধিক সংখ্যার সাথে সম্পর্কিত কিছু কার্নেল / নেট প্যারামিটারগুলি বাড়ায় এবং কিছু মেমরি / টাইমার সেটিংস সংশোধন করে:

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

লক্ষ্যটি হ'ল আরও বেশি ফাইল (বিশেষত ওয়েব সার্ভারগুলির জন্য প্রয়োজনীয়) এবং সংযোগগুলিকে একই সাথে আরও ক্লায়েন্ট পরিবেশন করার অনুমতি দেওয়া এবং মেমরি / ভার্চুয়াল মেমরি থেকে একক সার্ভার থ্রেডগুলি দ্রুত ত্যাগ করা (যদি আমি নির্দিষ্ট কিছু পরিবর্তন সঠিকভাবে ব্যাখ্যা করি)।


অতীতে, অ্যাপল একটি ভিন্ন ওএস প্রকাশ করেছে এবং এখন যে সার্ভারটি গ্রাহক ওএসের উপরে লোড হয় কিছু বেসিক টিউনিং অপারেটিং সিস্টেমটিকে 25 ব্যবহারকারীদের জন্য অপারেটিং সিস্টেম চালানোর প্রক্রিয়াগুলিতে সহায়তা করতে পারে যা ওএস ব্যবহার করে একজন ব্যক্তির সাথে সুর পরিবর্তনের পরিবর্তে কোনও সার্ভারের সাথে সংযুক্ত থাকে। এই টিউনিংগুলি কেবলমাত্র একটি সূচনাপ্রবাহ - যে কেউ তাদের সার্ভারকে উচ্চ লোডের অধীনে সঞ্চালন করতে চায় সেগুলি পারফরম্যান্স মোড চালু বা বন্ধ রাখার চেয়ে আরও বিস্তৃত স্তরে জিনিসগুলিকে কাস্টমাইজ করতে এবং নজরদারি করতে হবে।

এছাড়াও, এই সীমাবদ্ধতাগুলি আন্তঃ প্রক্রিয়া সংকেত সংকেতকারী চ্যানেলগুলির (আইপিসি) মতো সীমিত সংস্থাগুলি নিষ্ক্রিয় করে খারাপ সফ্টওয়্যারকে কোনও সার্ভার নামিয়ে আনতে বাধা দেওয়ার জন্য। এমন একটি সিস্টেমে যেখানে একজন ব্যবহারকারীর চলমান রয়েছে, আপনি কয়েক ডজন ব্যবহারকারীর জন্য কয়েক ডজন প্রক্রিয়া চলমান রয়েছে তার চেয়ে শীঘ্রই একটি পলাতক প্রক্রিয়াটি থামাতে চান। "একটি ফাইল বা একটি ওয়েব পৃষ্ঠা দ্রুত সরবরাহ করুন" এর বিপরীতে "পারফরম্যান্স" কিছু শক্ত সীমা বাড়ানো হিসাবে দেখা যেতে পারে।


যেহেতু এখানে 1100 টির বেশি নির্দিষ্ট আইটেম রয়েছে তার দ্বারা প্রতিবেদন করা sysctl -aহ'ল আপনি সার্ভার টিউনিং বা কার্নেল প্যারামিটার পরিবর্তনগুলিতে নতুন হয়ে থাকলে আপনি প্রথমে দেখতে পারেন এমন জিনিসগুলির খুব সুন্দর সংক্ষিপ্তসার। অন্যদের সহায়তা করার ক্ষেত্রে আমি উত্তরে কিছু "মতামত" যুক্ত করব। মতামত প্রকাশিত মতামত না হলে দয়া করে আমার সম্পাদনাগুলি ফিরিয়ে দিন।
বিমিক

এটি কি কোনও ম্যাকবুক প্রোতে কাজ করে?
তাদেজ

1
@ জেদাতকিনপোর্টগুলি এটি ম্যাকবুকগুলির জন্যও কাজ করে, হ্যাঁ
ক্লোনামথ

এবং এই "# প্রতিটি বিশেষ" সেটিংস কি? আরও: আমার মনে হয় কিছু নন-সিসটেল সেটিংসও পরিবর্তিত হয়েছে। অনুমতি শক্ত করা; অন্যান্য 'জিনিস' স্বতন্ত্র ওএস এক্স সার্ভারের পুরানো সংস্করণগুলিতে সমান আলাদা?
LаngLаngС

9

সার্ভার পারফরম্যান্স মোড (ওরফে perfmodeবা serverperfmode) অনেকগুলি কার্নেল প্যারামিটার পরিবর্তন করে, অনেক বেশি সীমাবদ্ধতা সরবরাহ করার জন্য কার্নেলের জন্য অনেক বেশি মেমরি সংরক্ষণ করে এবং আরও অনেকগুলি প্রক্রিয়া চালাতে সক্ষম করে, ফাইলগুলি খোলার জন্য এবং নেটওয়ার্ক সংযোগগুলি হতে পারে হ্যান্ডেল, অন্যান্য জিনিসগুলির মধ্যে। মেমরির পরিমাণের সাথে সীমাবদ্ধতার মধ্যে থাকা সমস্ত পরামিতি স্কেল করে এবং আপনার কমপক্ষে 16 গিগাবাইট মেমরি ইনস্টল না করা থাকলে কিছুই পরিবর্তন হয় না । @ ক্লোনামথের সংখ্যাগুলি 16 গিগাবাইট মেমরি ইনস্টল করার সাথে সম্পর্কিত।

এখানে সার্ভার 10.6 সম্পর্কে অ্যাপল থেকে পুরানো সমর্থন নথি থেকে একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে :

  • প্রতিটি 8 জিবি ইনস্টলড মেমরির জন্য, 2500 প্রক্রিয়া এবং 150,000 ভিএনড উপলব্ধ।
  • সর্বাধিক সংখ্যার থ্রেড সর্বাধিক প্রক্রিয়া সংখ্যার পাঁচগুণ (5x) সেট করা হয়েছে। (এটি আর সত্য বলে মনে হয় না)
  • একটি একক ব্যবহারকারী আইডি (uid) সর্বোচ্চ সংখ্যক প্রক্রিয়াগুলির 75% পর্যন্ত ব্যবহার করতে পারে।
  • একটি একক প্রক্রিয়া সর্বোচ্চ থ্রেড মানের 20% অবধি বরাদ্দ করতে পারে।

48 গিগাবাইট মেমরি সহ পারফরম্যান্স মোডে, আমি দেখছি:

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

আপনি যদি সত্যিই এটিতে খনন করতে চান তবে আপনি আসল কোডটি পড়তে পারেন। নীচে এল ক্যাপিটেন 10.11.6 থেকে। সার্ভার মোডটি এখনও একই (সাম্প্রতিক প্রকাশিত কোড পর্যন্ত, যা ওএস এক্স 10.14 মোজাভে থেকে রয়েছে), তবে আপনার যদি কমপক্ষে 12 গিগাবাইট মেমরি থাকে তবে সাধারণ মোডটি ওএস এক্স 10.13 হাই সিয়েরাতে শুরু করে একটি পারফরম্যান্স বাম্প পেয়েছে (পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে) কোড মন্তব্যে)।

scale_seutpফাংশন সেট আপ scaleফ্যাক্টর হিসেবে floor(memsize / 8 GiB)যদি আপনি সার্ভার পারফরমেন্স মোড সক্ষম এবং মেমরি অন্তত 16 GiB ইনস্টল করা নেই। অন্যথায় এটি শূন্য হয় যদি না আপনার কমপক্ষে 3 গিগাবাইট মেমরি থাকে, তবে এটি উচ্চতর সিয়েরা , মেমসাইজ / 4 জিআইবি দিয়ে শুরু করে 2 হয় is ( task_maxকার্নেলটি তৈরি হওয়ার পরে কোড স্নিপেটের মান সেট করা হয়, এবং ওএস এক্স বিতরণ করার সময় অ্যাপল কীভাবে সেট হয়ে যায় তা অস্পষ্ট। এটি সম্ভবত 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; 
    }

তারপরে সেই scaleফ্যাক্টরটি প্রয়োগ করা হয় bsd_scale_setup(কেবলমাত্র একটি -৪-বিট কার্নেলের জন্য) বা এখানে হাই সিয়েরার জন্য । এটি কার্নেল প্যারামিটারগুলি পরিবর্তন করে যা উপরে আলোচনা করা হয়েছে এবং এর মাধ্যমে দৃশ্যমান sysctl। মনে রাখবেন যদি সার্ভার পারফরমেন্স মোড সক্ষম করা নেই, শুধুমাত্র জিনিস যে স্কেল করা হয় হয় maxproc(532 -> 1064) এবং maxprocperuid(266 -> 709) উচ্চ সিয়েরা অবশেষে যখন maxfilesএবং maxfilesperprocযদি আপনি মেমরি অন্তত 12 GiB রয়েছে তারা bumped করছে।

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

অবশেষে, স্কেল ফ্যাক্টরটিও প্রয়োগ করা হয় bsd_exec_setup। প্রক্রিয়া আরম্ভের জন্য প্রয়োজনীয় সমস্ত ডেটা একত্রিত করার জন্য কতটা কার্নেল মেমরি সংরক্ষণ করা হয়েছে এটি এটি কনফিগার করে। প্রক্রিয়াটি কীভাবে execহয় তা ইউনিক্স কার্নেলের কোনও বইয়ের একটি সম্পূর্ণ অধ্যায়ের যোগ্য, তাই আমি এখানে এটিতে যাব না। এই সেটিংটির উচ্চ-স্তরের পরিণতিটি হ'ল বড় সংখ্যা আরও মেমরি গ্রহণ করে তবে প্রতি সেকেন্ডে বৃহত সংখ্যক প্রক্রিয়া তৈরি হতে দেয়। (যদিও এই কোডটি বর্তমান / মোজাবের মাধ্যমে একই রকম রয়েছে, scaleহাই সিয়েরায় কীভাবে গণনা করা হয় তার পরিবর্তনের সাথে প্রভাবটি পরিবর্তিত হয়েছিল above উপরের বিশদগুলি পুনরুদ্ধার করুন: উচ্চ সিয়েরা এবং পরবর্তী সময়ে, স্কেল মোটামুটি ( memory / 4 GiB) সাধারণ মোডের জন্য এবং ( memory / 8 GiB) সার্ভার মোডের জন্য So তাই bsd_simul_execsআপনি যখন সার্ভার মোডে স্যুইচ করেন তখন আসলে নিচে যেতে পারে)

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

এল ক্যাপিটেনের কাছে বর্তমান / মোজভেভের BSD_PAGEABLE_SIZE_PER_EXEC = 264 * 1024জন্য, সুতরাং আমার 48 জিআইবি ম্যাকের জন্য নতুন প্রসেস স্থাপনের জন্য বাফার স্পেসের মতো কার্নেলটি প্রায় 67 এমআইবি মেমরি সংরক্ষণ করবে। একদিকে, এটি একটি ওয়েব সার্ভারের জন্যও একটি উন্মাদ উচ্চ সংখ্যা। অন্যদিকে, 67 এমআইবি মেশিনে 48 জিআইবির তুলনায় চিনাবাদাম।

সুতরাং সার্ভার পারফরম্যান্স মোড আরও বেশি স্মৃতি গ্রহণ করে এবং যদি কোনও প্রোগ্রাম গ্রাসকারী রিসোর্সগুলি নিয়ন্ত্রণের বাইরে চলে যায় তবে সিস্টেমটিকে আরও বেশি ক্ষতিগ্রস্থ হওয়ার সম্ভাবনা তৈরি করে, তবে অনেক বেশি ব্যাকগ্রাউন্ড কার্য পরিচালনা করার জন্য সিস্টেমের সক্ষমতা ব্যাপকভাবে বৃদ্ধি করে। আমি মনে করি অ্যাপল ডিফল্টরূপে এটি চালু না করে এটি সক্ষম করার পক্ষে সহজ করেও সঠিক কল করেছে। আমি আনন্দিত যে হাই সিয়েরার সাথে তারা যদি আপনার পর্যাপ্ত স্মৃতিশক্তি থাকে তবে তারা এখন সাধারণ মোডে সীমাবদ্ধতা বাড়িয়ে তুলছে। আমি সার্ভার মোডটি বন্ধ রেখে দেব (এবং এটিকে ছেড়ে দিয়েছি) যতক্ষণ না আমি তাদের সমস্যার সমাধানের দিকে লক্ষ্য করি কারণ এতে আমার উপর প্রচুর সার্ভার প্রোগ্রাম চলছে। সর্বোপরি, এটি সিস্টেমের ঘড়ির গতি বাড়ায় না, এটি ডিস্কের গতি বাড়ায় না, এবং যদি আপনার শত সংযোগ থাকে তবে এটি কেবল নেটওয়ার্ক I / O বৃদ্ধি করে। সেখানে '

অন্যদিকে, আপনার যদি সত্যিই 2000 প্রসেস চালানোর প্রয়োজন হয় তবে আপনি হাই সিয়েরায় না আসা পর্যন্ত সার্ভার মোডই আপনার একমাত্র বিকল্প। সুসংবাদটি হ'ল এটি চালু করা, চেষ্টা করে দেখার পক্ষে যথেষ্ট সহজ এবং যদি আপনি এটি পছন্দ করেন না তবে ফিরে যান।


👏🏻! উপসংহারের নিকটে লক্ষ করার জন্য দুর্দান্ত পরামর্শ: "আমি সার্ভার মোডটি বন্ধ রেখে দেব […]"।
Dan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.