मैं RedHat 7.1 में जोड़ने के लिए "isolcpus = 3 nohz_full = 3 rcu_nocbs = 3" grub.conf में, कर्नेल: लिनक्स 3.10.0-229 गिरी और http://www.breakage.org/2013/11/15/nohz_fullgodmode/ मैं के अनुसार भी निम्न आदेश निष्पादित करें:टिकलेस कर्नेल, isolcpus, nohz_full, और rcu_nocbs
cat /sys/bus/workqueue/devices/writeback/cpumask
f
echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
cat /sys/bus/workqueue/devices/writeback/numa
1
echo 0 > /sys/bus/workqueue/devices/writeback/numa
बॉक्स केवल 4 सीपीयू कोर होने पर, मैं निम्नलिखित खोल चलाएँ:
watch -d 'cat /proc/interrupts'
सही काम की तरह लग रहे हैं, केवल स्थानीय टाइमर बीच में आता है cpu0 2000 प्रति 2 सेकेंड है, अन्य सी cuu 3 से pu 1 में 10 से 2 सेकेंड से कम है। में उत्पादन
taskset -c 3 ./x1.exe
घड़ी:
और उसके बाद मैं निम्नलिखित स्रोत का परीक्षण:
void *Thread2(void *param)
{
pthread_detach(pthread_self());
while(1){
sleep(100000) ;
}
}
void *Thread1(void *param)
{
pthread_detach(pthread_self());
while(1){
;
}
}
int main(int argc, char** argv)
{
pthread_t tid ;
pthread_create(&tid , NULL, Thread1, (void*)(long)3);
pthread_create(&tid , NULL, Thread2, (void*)(long)3);
while(1)
sleep(5) ;
}
और से इसे चलाने के लिए इस समय
watch -d 'cat /proc/interrupts'
, सीपीयू 3 से 10 मिल ~ 30 स्थानीय टाइमर प्रति सेकंड सेकेंड इंटरप्ट करता है, ठीक दिखता है, तो मैं 2 थ्रेड 1 को चलाने की कोशिश करता हूं:
pthread_create(&tid , NULL, Thread1, (void*)(long)3);
pthread_create(&tid , NULL, Thread1, (void*)(long)3);
उसके बाद फिर से इसे चलाने:
taskset -c 3 ./x1.exe
तो मैं घड़ी कोर 3 एक ही स्थानीय टाइमर कोर 0 से बाधित है, यह 2 सेकेंड प्रति 2000 बीच में आता है है।
क्या मैं पूछ सकता हूं, क्यों 2 बहुत व्यस्त थ्रेड 1 कोर 3 का कारण होगा अधिक टाइमर इंटरप्ट्स? यह क्या हुआ? और यह कैसे हो सकता है इसे संशोधित करने के लिए?