ʻIkepili o ka hopena hana o ke kumu manawa i koho ʻia ma ka ʻōnaehana

Ua hōʻuluʻulu ʻo Brendan Gregg, kekahi o nā mea hoʻomohala o DTrace, ka mea e hoʻomohala nei i nā mea hana loiloi hana ma ka BPF ma ka kernel Linux, i ka ʻike i loaʻa mai ka nānā ʻana i nā pilikia hana i loaʻa iā Netflix i ka neʻe ʻana i ka Cassandra DBMS mai CentOS a i Ubuntu. ke ao Amazon EC2 ma muli o Xen. Ma hope o ka neʻe ʻana, ua hoʻonui ʻia ka ukana CPU e 30% a ua hoʻonui ʻia nā lohi i ka wā o nā hana kākau e like me ka nui like. E like me ka mea i ʻike ʻia, ʻo ka hana o nā noi e noi nui nei i ka ʻike manawa e hilinaʻi nui ʻia i ke kumu manawa i koho ʻia i ka ʻōnaehana.

I ka wā mua, ʻaʻole maopopo ke kumu o ka emi ʻana o ka hana a ua hoʻomaka ka ʻike me ka nānā ʻana i ka hopena o ka holo mau ʻana a i ʻole i hoʻokuʻu ʻia i kēlā me kēia manawa i nā kaʻina hana kumu waiwai-intensive me ka hoʻohana ʻana i nā mea hana kiʻekiʻe a me execsnoop. Akā, ua hōʻike nā mea a pau ua hoʻonui nui ʻia ka hoʻohana waiwai ma ka Cassandra DBMS, i kākau ʻia ma Java. ʻO ka hoʻohālikelike ʻana i nā metric profiling o nā kaʻina Cassandra ʻelua e holo like ana ma CentOS a me Ubuntu, ka hoʻoponopono ʻana i nā nīnau like, hōʻike ʻia ma kahi o 32% o ka manawa holoʻokoʻa i hoʻopau ʻia i ke kelepona ʻana os ::javaTimeMillis (), i hoʻohana ʻia e kiʻi i ka ʻike e pili ana i kēia manawa. .

Ma hope o kēia, ua hana ʻia kahi hoʻokolohua kahi i kākau ʻia ai kahi palapala Java maʻalahi i kapa ʻia ʻo System.currentTimeMillis() hana hoʻokahi haneli miliona mau manawa i ka loop. ʻO ka holo ʻana i ka noi ua hōʻike ʻia he 13 kekona e hoʻopau ma CentOS, a ma kahi o 68 kekona ma Ubuntu, ʻo ia hoʻi. 5 manawa lohi. Ua kākau ʻia kahi papahana like ma C i kapa ʻia ʻo ka hana gettimeofday() hoʻokahi haneli miliona mau manawa, akā i ka wā i hoʻokō ʻia ai, loaʻa nā hopena like.

Ma muli o ka maopopo ʻana o ke kumu o ka pilikia ka hana o ka hoʻihoʻi ʻana i ka manawa o kēia manawa, huli ka nānā ʻana i nā loli i nā hōʻailona ke koho ʻana i nā kumu like ʻole o ka manawa pololei i ka ʻōnaehana. Ke hoʻoholo nei i nā mea o "/sys/devices/system/clocksource/clocksource0/current_clocksource", ua hoʻohana ʻia ka manawa "xen" ma ke ʻano maʻamau i ka wā e holo ana i Linux ma ka ʻōnaehana malihini. Ma hope o ka hoʻololi ʻana i ke kumu manawa i "tsc", ua emi ka manawa hoʻokō o ka noi hoʻāʻo ma Ubuntu mai 68 a 3.3 kekona, ʻo ia hoʻi. ua lilo i 20 manawa wikiwiki. Hoʻohui ʻia, ua hoʻokō ʻia kahi hōʻike hoʻokō o ke kumu manawa kvm-clock, i hōʻike i ka piʻi ʻana o nā lohi e 20% i hoʻohālikelike ʻia me TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ manawa java TimeBench maoli 1m8.300s mea hoʻohana 0m38.337s $s sy. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ manawa java TimeBench maoli 29.875m0s mea hoʻohana 0m3.370s sys 0m3.353s

No ka loaʻa ʻana o ka manawa i ke koho ʻana i kahi kumu TSC, hoʻohana ʻia ka ʻōlelo aʻoaʻo kaʻina RDTSC, ʻaʻole pono ka hoʻokō ʻana i kahi kelepona ʻōnaehana (ʻaʻole pono ke aʻo ʻana i nā pono kiʻekiʻe a hoʻopuka i kahi waiwai mai ka manawa counter i kūkulu ʻia i ka CPU). Ma ka maʻamau, ʻaʻole i hoʻāla ʻia ʻo TSC no ka mea i ka wā kahiko ʻaʻole i hoʻokaʻawale kēia kumu i ka manawa lohi, i hoʻoponopono ʻia i nā kaʻina hana ʻē aʻe e nā polokalamu e hoʻokō i nā heluhelu pololei. Wahi a kekahi ʻenekinia loea i ka hoʻomohala ʻana i ka ʻōnaehana, hopohopo e pili ana i ka hoʻololi ʻana o ka manawa i ka wā e hoʻohana ai i ka TSC ua hewa ʻole a i nā kaʻina hana hou hiki i kēia kumu ke hana i nā heluhelu paʻa no nā makahiki.

ʻO ka hoʻololi ʻana i nā kikowaena hana ma Netflix i kahi kumu TSC i hopena i ka 43% hōʻemi i ka latency kākau a loaʻa i nā hopena me ka hoʻohana ʻana iā Ubuntu ʻo 4 mau manawa ʻoi aku ka wikiwiki ma mua o nā hoʻonohonoho e holo ana i CentOS me kahi kumu manawa "xen". Ua hoʻoili ʻia nā hopena o ke aʻo ʻana i Amazon, ka mea i ʻōlelo ʻia me ka hoʻohana ʻana i ke kumu manawa TSC paʻamau i nā kaiapuni AWS EC2 e pili ana i ka Xen hypervisor (kvm-clock e hoʻomau ʻia i nā kaiapuni e pili ana i ka Nitro hypervisor).

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka