প্রতিটি ব্যবহারকারী যেভাবে সিপিইউ কোর ব্যবহার করতে পারেন তার সংখ্যা কীভাবে সীমাবদ্ধ করতে পারে?


18

আমাদের একটি কম্পিউটার রয়েছে যার সিপিইউতে 32 টি কোর রয়েছে এবং এটি কয়েকটি পৃথক ব্যবহারকারী দ্বারা প্রোগ্রাম চালানোর জন্য ব্যবহৃত হতে চলেছে। প্রতিটি ব্যবহারকারী যে কোনও সময় যে পরিমাণ কোর ব্যবহার করতে পারে তা সীমাবদ্ধ করার কোনও উপায় আছে যাতে কোনও ব্যবহারকারী সমস্ত সিপিইউ শক্তি একচেটিয়া না রাখতে পারে?


5
উত্তর নয়, কেবল একটি ধারণা। আপনি বেশ কয়েকটি ভার্চুয়াল মেশিন স্থাপন করতে চাইতে পারেন। প্রত্যেকের সিপিইউ-এর সীমিত পরিমাণ থাকতে পারে। প্রতিটি ব্যবহারকারী কেবল ভার্চুয়াল মেশিনগুলির মধ্যে একটিতে থাকবে এবং সেই ভিএম-র ব্যবহারকারীরা সিপিইউ ব্যবহারের মধ্যে সীমাবদ্ধ থাকবেন। এটি হতে পারে যে ভার্চুয়ালাইজেশন সফ্টওয়্যারগুলির কয়েকটিতে এটি সমর্থন করার জন্য সরঞ্জাম রয়েছে।
ghellquist

1
@ দোহাই আপনার উত্তরটি দেওয়া উচিত
slebetman 10'19

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

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

উত্তর:


16

যদিও এটি সম্ভব , এটি জটিল এবং প্রায় অবশ্যই একটি খারাপ ধারণা। এই মুহুর্তে যদি কেবলমাত্র একজন ব্যবহারকারী মেশিনটি ব্যবহার করে থাকেন তবে তাদের এন কোরগুলিতে সীমাবদ্ধ করা সম্পদের অপচয় is একটি আরও ভাল পদ্ধতির সাথে সবকিছু চালানো হবে nice:

NAME
       nice - run a program with modified scheduling priority

SYNOPSIS
       nice [OPTION] [COMMAND [ARG]...]

DESCRIPTION
       Run  COMMAND  with an adjusted niceness, which affects process scheduling.  With
       no COMMAND, print the current niceness.  Niceness values range  from  -20  (most
       favorable to the process) to 19 (least favorable to the process).

এটি একটি দুর্দান্ত সরঞ্জাম যা কোনও প্রক্রিয়াটির অগ্রাধিকার সেট করে। সুতরাং যদি কেবলমাত্র একজন ব্যবহারকারী কিছু চালাচ্ছেন, তারা তাদের প্রয়োজন মতো সিপিইউ সময় পাবে, তবে অন্য কেউ যদি নিজস্ব (এছাড়াও ভাল) কাজ শুরু করেন তবে তারা সুন্দর হবে এবং একে অপরের সাথে ভাগ করে নেবে। এইভাবে, যদি আপনার ব্যবহারকারীরা সমস্ত কমান্ড দিয়ে কমান্ড চালু করেন তবে nice 10 commandকেউ রিসোর্স সংস্থান করবে না (এবং সার্ভারকে কেউ হাঁটুতে আনবে না)।

মনে রাখবেন যে একটি উচ্চ সুন্দর মান মানে একটি নিম্ন অগ্রাধিকার। এটি আমাদের কতটা সুন্দর হওয়া উচিত এবং আমরা যত সুন্দর থাকি, ততই আমরা ভাগ করি of

এছাড়াও মনে রাখবেন যে এটি মেমরির বরাদ্দ পরিচালিত করতে সহায়তা করবে না, এটি কেবল সিপিইউ শিডিয়ুলিংকেই প্রভাবিত করে। সুতরাং যদি একাধিক ব্যবহারকারী একাধিক মেমরি-নিবিড় প্রক্রিয়াগুলি চালু করেন তবে আপনার এখনও সমস্যা হবে। যদি একটি বিষয়, আপনি যেমন সঠিক কিউয়িং সিস্টেমের মধ্যে হওয়া উচিত ঘূর্ণন সঁচারক বল


আপনার উত্তরের জন্য ধন্যবাদ. কিছু "ওয়ার্কলোড পরিচালক" যেমন SLURM তবে সেগুলি একাধিক নোডযুক্ত কম্পিউটারগুলির জন্য। আমি অনুমান করি যে এটি বোধগম্য হয় যে লোকেরা একক নোড কম্পিউটারের জন্য অনুরূপ অ্যাপ্লিকেশন বিকাশ করতে পারে নি যতটা চাহিদা নেই।
রেজা

@ রেজা niceআপনি যা বর্ণনা করেছেন তা থেকে চেষ্টা করুন , এটি আপনার প্রয়োজনের থেকে ঠিক ঠিক।
টেরডন

3
@ রেজা: এটি কারণ ওএস ইতিমধ্যে এটি করে। এটি স্বয়ংক্রিয়ভাবে উপলব্ধ সিপিইউগুলিকে প্রয়োজনীয় থ্রেড / প্রসেসের সাথে ভাগ করে দেয়।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

13

টিএল; ডিআর : সংক্ষিপ্ত গবেষণা থেকে দেখা যাচ্ছে যে নির্দিষ্ট সংখ্যক কোরের জন্য কমান্ডগুলি সীমাবদ্ধ করা সম্ভব, তবে সব ক্ষেত্রে আপনাকে একটি কমান্ড ব্যবহার করতে হবে যা আসলে সীমাবদ্ধতা প্রয়োগ করে।

Cgroups

লিনাক্স রয়েছে cgroupsযা প্রক্রিয়াগুলিতে উপলব্ধ সংস্থানগুলি সীমাবদ্ধ করার লক্ষ্যে প্রায়শই ব্যবহৃত হয়। খুব সংক্ষিপ্ত গবেষণা থেকে, আপনি আর্চ উইকিতে মতলব (একটি বৈজ্ঞানিক সফ্টওয়্যার) কনফিগারেশন সহ সেট করেছেন /etc/cgconfig.conf:

group matlab {
    perm {
        admin {
            uid = username;
        }
        task {
            uid = username;
        }
    }

    cpuset {
        cpuset.mems="0";
        cpuset.cpus="0-5";
    }
    memory {
        memory.limit_in_bytes = 5000000000;
    }
}

এই জাতীয় কনফিগারেশন কার্যকর হওয়ার জন্য আপনাকে cgexecকমান্ডের মাধ্যমে প্রক্রিয়াটি চালাতে হবে , যেমন একই উইকি পৃষ্ঠা থেকে:

$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop

taskset

জিজ্ঞাসা উবুন্টু সম্পর্কিত একটি প্রশ্ন এবং লিনাক্সের একটি সিপিইউ কোরটিতে কীভাবে একটি প্রক্রিয়া সীমাবদ্ধ? ইউনিক্স এবং লিনাক্স সাইটে [সদৃশ]taskset প্রক্রিয়াটির জন্য সিপিইউগুলিকে সীমাবদ্ধ করতে ব্যবহার করার একটি উদাহরণ দেখায় । প্রথম প্রশ্নে, এটি কোনও নির্দিষ্ট ব্যবহারকারীর জন্য সমস্ত প্রক্রিয়া বিশ্লেষণের মাধ্যমে অর্জন করা হয়েছে

$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001

অন্য প্রশ্নে, একটি প্রক্রিয়া tasksetনিজেই শুরু করা হয়:

$ taskset -c 0 mycommand --option  # start a command with the given affinity

উপসংহার

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

মাধ্যমে অ্যাপলিকেশন বেছে নিয়ে চলমান tasksetবা cgexecতাদের জানা তারা যা অ্যাপ্লিকেশন চালাতে পারেন যাক আপনার ব্যবহারকারীদের সাথে যোগাযোগ প্রয়োজন, অথবা স্ক্রিপ্ট যা মাধ্যমে অ্যাপলিকেশন বেছে আরম্ভ হবে মোড়কের তৈরি taskselবা cgexec

অতিরিক্তভাবে, কোনও ব্যবহারকারী বা গোষ্ঠী সিপিইউ'র সংখ্যার সীমা নির্ধারণের পরিবর্তে উত্সাহিত করতে পারে এমন প্রসেসের সংখ্যা নির্ধারণের বিষয়টি বিবেচনা করুন। এটি /etc/security/limits.confফাইলের মাধ্যমে অর্জন করা যায় ।

আরো দেখুন


1
ভাল, cgxlesengd এবং cgrules.conf রয়েছে ব্যবহারকারী / গোষ্ঠীর উপর ভিত্তি করে যথাযথ সিগ্রুপে প্রসেসগুলি স্বয়ংক্রিয়ভাবে সিজেেক্সেক দিয়ে তাদের প্রক্রিয়াগুলি চালিত ব্যবহারকারীদের উপর নির্ভর না করে স্থানান্তরিত করতে। তবে দেখে মনে হচ্ছে, উবুন্টুতে এটি স্থাপন কিছুটা বেআইনী is
হান্স-জাকোব

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

2
sched_setaffinity(2)বলেছেন সম্বন্ধ মাস্ক জুড়ে সংরক্ষিত আছে execve(2), এবং একটি শিশু উত্তরাধিকারী এটিতে যে fork(2)। সুতরাং যদি আপনি কোনও ব্যবহারকারীর জন্য শেলটি (বা একটি এক্স সেশনের জন্য তাদের গ্রাফিকাল শেল) টিসেটসেট করেন তবে সেই শেলটি থেকে তারা শুরু করা সমস্ত কিছুই ডিফল্টরূপে একই স্নেহযুক্ত মাস্ক ব্যবহার করবে।
পিটার

1
একটি সম্ভাব্য ডাউনসাইড হ'ল প্রোগ্রামগুলি যা কতগুলি থ্রেড শুরু করতে হবে তা সিদ্ধান্ত নেওয়ার সময় মেশিনটিতে কতটি সিপিইউ রয়েছে তা পরীক্ষা করে; তারা প্রকৃতপক্ষে নির্ধারিত হবে এমন কোরের সংখ্যার জন্য তাদের কাছে অনেকগুলি থ্রেড থাকবে। আপনি কি খুঁজে পেয়েছেন যে সিগ্রুপগুলি সে সম্পর্কে কিছু করতে পারে কিনা?
পিটার

@ পিটারকর্ডস স্প্যানিং শেল ধারণাটি আকর্ষণীয় মনে হচ্ছে। আমি এটি খতিয়ে দেখা প্রয়োজন। ধন্যবাদ! দ্বিতীয় মন্তব্য হিসাবে, না, আমি এই মুহুর্তে যথেষ্ট পরিমাণে সিগ্রুপ নিয়ে গবেষণা করেছি না।
সের্গেই কোলোডিয়াজনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.