စနစ်တွင် ရွေးချယ်ထားသော အချိန်ရင်းမြစ်၏ စွမ်းဆောင်ရည်သက်ရောက်မှုကို လေ့လာခြင်း။

လက်ရှိတွင် Linux kernel ရှိ BPF-based စွမ်းဆောင်ရည်ခွဲခြမ်းစိတ်ဖြာမှုကိရိယာများကို ဖန်တီးနေသည့် DTrace ၏ developer များထဲမှ Brendan Gregg သည် Cassandra DBMS ကို CentOS မှ Ubuntu သို့ပြောင်းရွှေ့သောအခါ Netflix ကြုံတွေ့ရသည့် စွမ်းဆောင်ရည်ပြဿနာများကို ခွဲခြမ်းစိတ်ဖြာခြင်းမှ ရရှိသည့်အတွေ့အကြုံကို အကျဉ်းချုံးဖော်ပြခဲ့သည်။ Xen ကိုအခြေခံထားသော Amazon EC2 cloud ရွှေ့ပြောင်းပြီးနောက်၊ CPU load သည် 30% တိုးလာပြီး စာရေးခြင်းလုပ်ဆောင်မှုအတွင်း နှောင့်နှေးမှုများသည် တူညီသောပမာဏခန့် တိုးလာသည်။ ထွက်ပေါ်လာသည့်အတိုင်း၊ အချိန်အချက်အလက်များကို အလွန်အမင်းတောင်းဆိုသည့် အပလီကေးရှင်းများ၏ စွမ်းဆောင်ရည်သည် စနစ်တွင် ရွေးချယ်ထားသော အချိန်ရင်းမြစ်အတိအကျပေါ်တွင် မူတည်ပါသည်။

အစပိုင်းတွင်၊ စွမ်းဆောင်ရည်ကျဆင်းရခြင်း၏အကြောင်းရင်းသည် ထင်ရှားစွာမသိရသေးဘဲ၊ ထိပ်တန်းနှင့် execsnoop utilities များကိုအသုံးပြု၍ အဆက်မပြတ်လည်ပတ်နေသည့် သို့မဟုတ် အချိန်အခါအလိုက် အရင်းအမြစ်-အလေးပေးစနစ်လုပ်ဆောင်ခြင်း၏ ဖြစ်နိုင်ခြေသက်ရောက်မှုများကို စောင့်ကြည့်ခြင်းဖြင့် စတင်ခဲ့သည်။ သို့သော် Java ဖြင့်ရေးသားထားသော Cassandra DBMS တွင် အရင်းအမြစ်သုံးစွဲမှု တိုးလာကြောင်းအရာအားလုံးက ထောက်ပြသည်။ CentOS နှင့် Ubuntu တွင်အပြိုင်လုပ်ဆောင်နေသည့် Cassandra လုပ်ငန်းစဉ်နှစ်ခု၏ ပရိုဖိုင်းမက်ထရစ်များကို နှိုင်းယှဉ်ကာ တူညီသောမေးခွန်းများကိုလုပ်ဆောင်ရာတွင် လက်ရှိအချိန်နှင့်ပတ်သက်သောအချက်အလက်များကိုရယူရန်အသုံးပြုသည့် os::javaTimeMillis() ကိုခေါ်ဆိုအသုံးပြုသည့်အချိန်စုစုပေါင်း၏ 32% ခန့်ကိုပြသခဲ့သည် .

၎င်းနောက်၊ System.currentTimeMillis() method ဟုခေါ်သော ရိုးရှင်းသော Java အပလီကေးရှင်းကို အကြိမ်ပေါင်း သန်းတစ်ရာအတွင်း စမ်းသပ်မှုတစ်ခု ပြုလုပ်ခဲ့ပါသည်။ အပလီကေးရှင်းကိုအသုံးပြုခြင်းသည် CentOS တွင် ပြီးမြောက်ရန် 13 စက္ကန့်ကြာကြောင်းပြသခဲ့ပြီး Ubuntu တွင် 68 စက္ကန့်ခန့်၊ ဆိုလိုသည်မှာ၊ ၅ ဆ ပိုနှေးပါတယ်။ အလားတူ ပရိုဂရမ်တစ်ခုကို gettimeofday() လုပ်ဆောင်ချက်ကို အကြိမ်ပေါင်း သန်းတစ်ရာဟု ခေါ်သည့် C ဖြင့် ရေးသားထားသော်လည်း လုပ်ဆောင်သောအခါတွင် အလားတူရလဒ်များကို ရရှိခဲ့သည်။

ပြဿနာ၏ရင်းမြစ်သည် လက်ရှိအချိန်ကို ပြန်ပေးသည့်လုပ်ဆောင်ချက်ဖြစ်ကြောင်း ရှင်းရှင်းလင်းလင်းသိလာသောကြောင့် စနစ်ရှိ အချိန်အတိအကျ၏ မတူညီသောအရင်းအမြစ်များကို ရွေးချယ်သည့်အခါ ညွှန်ကိန်းများတွင် အပြောင်းအလဲများဆီသို့ အာရုံစိုက်လာခဲ့သည်။ “/sys/devices/system/clocksource/clocksource0/current_clocksource” ၏ အကြောင်းအရာများဖြင့် အကဲဖြတ်ကာ၊ ဧည့်သည်စနစ်တွင် Linux ကို အသုံးပြုသည့်အခါ ပုံမှန်အားဖြင့် “xen” timer ကို အသုံးပြုခဲ့သည်။ အချိန်ရင်းမြစ်ကို "tsc" သို့ပြောင်းပြီးနောက် Ubuntu တွင်စမ်းသပ်မှုအပလီကေးရှင်း၏လုပ်ဆောင်ချိန်သည် 68 မှ 3.3 စက္ကန့်သို့လျော့နည်းသွားသည်၊ ဆိုလိုသည်မှာ၊ အဆ 20 ပိုမြန်လာတယ်။ ထို့အပြင်၊ kvm-clock time source ၏ စွမ်းဆောင်ရည်စမ်းသပ်မှုကို ပြုလုပ်ခဲ့ပြီး TSC နှင့် နှိုင်းယှဉ်ပါက နှောင့်နှေးမှု 20% တိုးလာကြောင်း ပြသခဲ့သည်။ $cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $time java TimeBench real 1m8.300s အသုံးပြုသူ 0m38.337s $0m echo tsc > /sys/devices/system/clocksource/clocksource29.875/current_clocksource $time java TimeBench real 0m0s အသုံးပြုသူ 3.370m0s sys 3.353m0s

TSC အရင်းအမြစ်ကိုရွေးချယ်သည့်အချိန်ကိုရယူရန်၊ RDTSC ပရိုဆက်ဆာညွှန်ကြားချက်ကိုအသုံးပြုသည်၊ စနစ်ခေါ်ဆိုမှုမလိုအပ်သည့်လုပ်ဆောင်မှု (ညွှန်ကြားချက်သည် မြင့်မားသောအခွင့်အရေးများမလိုအပ်ဘဲ CPU တွင်တည်ဆောက်ထားသောအချိန်ကောင်တာမှတန်ဖိုးတစ်ခုထုတ်ပေးသည်)။ ပုံသေအားဖြင့်၊ TSC သည် ရှေးယခင်က ဤရင်းမြစ်သည် တဖြည်းဖြည်းအချိန်ရွေ့လျားမှုကို မဖယ်ထုတ်ဘဲ၊ ပိုမိုတိကျသောဖတ်ရှုမှုရရှိစေရန် အခြားပရိုဆက်ဆာများတွင် ဆော့ဖ်ဝဲဖြင့် ချိန်ညှိထားသည့်အရာဖြစ်သောကြောင့်၊ ပရိုဆက်ဆာ ဖွံ့ဖြိုးတိုးတက်မှုတွင် အထူးပြု အင်ဂျင်နီယာတစ်ဦး၏ ပြောကြားချက်အရ TSC ကို အသုံးပြုသည့်အခါ အချိန်အပြောင်းအရွှေ့နှင့် ပတ်သက်၍ ကြောက်ရွံ့မှုများမှာ မမှန်ကြောင်းနှင့် ခေတ်မီပရိုဆက်ဆာများတွင် ဤအရင်းအမြစ်သည် နှစ်ပေါင်းများစွာ တည်ငြိမ်သော ဖတ်ရှုမှုများကို ထုတ်ပေးနိုင်သည်။

Netflix ရှိ ထုတ်လုပ်မှုဆာဗာများကို TSC ရင်းမြစ်သို့ ပြောင်းခြင်းဖြင့် ရေးမှတ်နေချိန်ကို 43% လျှော့ချနိုင်ခဲ့ပြီး "xen" အချိန်ရင်းမြစ်ဖြင့် CentOS အသုံးပြုသည့် ဖွဲ့စည်းမှုစနစ်များထက် 4 ဆ ပိုမိုမြန်ဆန်သော Ubuntu ကို အသုံးပြု၍ ရလဒ်များ ရရှိခဲ့သည်။ လေ့လာမှု၏ရလဒ်များကို Xen hypervisor ပေါ်အခြေခံ၍ AWS EC2 ပတ်၀န်းကျင်ရှိ ပုံမှန် TSC အချိန်ရင်းမြစ်ကိုအသုံးပြု၍ တရားဝင်အကြံပြုထားသည့် Amazon သို့လွှဲပြောင်းခဲ့သည် (kvm-clock သည် Nitro hypervisor ကိုအခြေခံ၍ ပတ်ဝန်းကျင်များတွင် အကြံပြုထားဆဲဖြစ်သည်)။

source: opennet.ru

မှတ်ချက် Add