সিপিইউর কর্মক্ষমতা ভারসাম্য বজায় রাখতে লিনাক্স সিগ্রুপ ব্যবহার করা


13

আমি তুলনামূলকভাবে সাম্প্রতিক কার্নেলের সাথে লিনাক্স সিগ্রুপ ব্যবহার করে দুটি ডুয়াল-কোর লিনাক্স সিস্টেম ইনস্টল করেছি; একটি চালাচ্ছেন দেবিয়ান স্কুইজ, অন্যটি উবুন্টু ১১.০৪ নাট্টি নার্ভাল। আমি সিপিউ লোড ভারসাম্য অর্জন করেছি সিগ্রুপের সাথে পুরানো কার্নেল সত্ত্বেও কিছুটা ভাল কাজ করেছে working তবে এটি প্রতিটি কিছুর জন্য সঠিক নয় এবং আমি এখানে নির্দিষ্ট বিশিষ্টতাটি জিজ্ঞাসা করছি উভয় সিস্টেমেই ঘটে।

আপনি যদি কন্ট্রোল গ্রুপ সহ লিনাক্সে রিসোর্স ম্যানেজমেন্ট পড়েন তবে সমস্যাটি কীভাবে পুনরুত্পাদন করা যায় সে সম্পর্কে এটি একটি উদাহরণ দেয়। এখানে উবুন্টু সংস্করণটি (এটি রুট হিসাবে চালান):

cd /sys/fs/cgroup/cpu
    [On Debian Squeeze start at /mnt/cgroups/cpu instead]
mkdir low high
echo 512 > low/cpu.shares
echo 2048 > high/cpu.shares
yes low > /dev/null &
echo $! > low/tasks
yes high > /dev/null &
echo $! > high/tasks
ps -C yes -opid,%cpu,psr,args
    [repeat that a few times]
killall -9 yes

আমি আশা করছিলাম যে "উচ্চ" প্রক্রিয়াটি "নিম্ন" এর চেয়ে বেশি সময় বরাদ্দ হবে; এই পরীক্ষার ক্ষেত্রে আসলে যা ঘটে তা সর্বদা এরকম:

root@black:/sys/fs/cgroup/cpu# ps -C yes -opid,%cpu,psr,args
  PID %CPU PSR COMMAND
 3105 88.3   1 yes low
 3106 94.5   0 yes high

যেখানে সময়গুলি প্রায় সমান। এখানে আমার প্রশ্ন: কেন এমন হচ্ছে?

উপস্থাপনায়, প্রতিটি প্রসেসকে একই সিপিইউতে পিন করে এই সমস্যাটি দেখানো হবে; পরীক্ষা করার জন্য অতিরিক্ত লাইন:

taskset -c 1 yes high > /dev/null &
echo $! > high/tasks
taskset -c 1 yes low > /dev/null &
echo $! > low/tasks
ps -C yes -opid,%cpu,psr,args
[later, rinse, repeat]
killall -9 yes

তারপরে ফলাফলটি আমি সবসময় দেখার প্রত্যাশা করছিলাম: "উচ্চ" প্রক্রিয়াটি সিপিইউর চেয়ে অনেক বেশি শতাংশ পেয়েছে:

root@black:/sys/fs/cgroup/cpu# ps -C yes -opid,%cpu,psr,args
  PID %CPU PSR COMMAND
 3128 83.3   1 yes high
 3129 20.7   1 yes low

এই কাজগুলি কেন পূর্ববর্তীটি কেন খুব বেশি হয় না তা নির্ধারণের জন্য দরকারী পদক্ষেপ হবে তা ব্যাখ্যা করে।


উত্তর:


10

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

ক্ষেত্রে যেখানে দুটি প্রক্রিয়া (এখানে উচ্চ এবং নিম্ন) চলছে => 2 কোরে, এটি কেবল একটি কোরকে উচ্চ এবং অন্যদিকে কম রাখবে। উভয়ই প্রায় 100% ব্যবহারের প্রায় সময় চালাবে, কারণ শিডিয়ুলার সিপিইউতে পর্যাপ্ত সময় দেয় না এমন পরিস্থিতিতে আঘাত না করেই তারা এটি করতে পারে। cpu.share তফসিল কেবল তখনই ঘটে যদি কোনও ঘাটতি থাকে।

দ্বিতীয় ক্ষেত্রে, উভয় প্রক্রিয়া একই সিপিইউতে পিন করা হয়। তারপরে সিপিইউ ভাগ করে নেওয়ার যুক্তিকে আপেক্ষিক সিপু.শায়ার সংখ্যাগুলির সাথে সামঞ্জস্য করার জন্য দরকারী কিছু করতে হবে এবং এটি প্রত্যাশার মতো তা করে।

সিপিউসের ব্যবহারের উপর সীমাবদ্ধতা সিএফএস ব্যান্ডউইথ কন্ট্রোল প্যাচ হিট হওয়ার আগ পর্যন্ত প্রদর্শিত হবে না । এই মুহুর্তে আমি যা আশা করছিলাম তার মতো আরও কিছু পাওয়া সম্ভব।


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