मेरे पास दो दोहरे कोर लिनक्स सिस्टम हैं जो अपेक्षाकृत हाल की गुठली के साथ लिनक्स cgroups का उपयोग करके स्थापित हैं; एक डेबियन स्क्वीज़ चला रहा है, दूसरा उबंटू 11.04 नट्टी नरवाल। मैंने सीपीयू लोड को अपने पुराने कर्नेल के बावजूद डेबियन सिस्टम पर थोड़ा बेहतर काम करने वाले cgroups के साथ संतुलित किया है। लेकिन यह सब कुछ के लिए सही नहीं है, और मैं यहां जो विशिष्ट विषमता पूछ रहा हूं वह दोनों प्रणालियों पर होता है।
यदि आप नियंत्रण समूह के साथ लिनक्स में संसाधन प्रबंधन पढ़ते हैं, तो यह एक उदाहरण देता है जिसमें दिखाया गया है कि समस्या को कैसे पुन: उत्पन्न किया जाए। यहाँ Ubuntu संस्करण है (इसे रूट के रूप में चलाएँ):
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
यह बताते हुए कि यह कार्य यह पता लगाने की दिशा में एक उपयोगी कदम होगा कि पहले वाला भी क्यों नहीं।