Системд сонгосон цаг хугацааны эх үүсвэрийн гүйцэтгэлийн нөлөөллийн дүн шинжилгээ

Одоогоор Linux цөмд BPF-д суурилсан гүйцэтгэлийн шинжилгээний хэрэгслүүдийг хөгжүүлж буй DTrace-ийн хөгжүүлэгчдийн нэг Брендан Грегг Cassandra DBMS-ийг CentOS-аас Ubuntu руу шилжүүлэх үед Netflix-д тулгарч байсан гүйцэтгэлийн асуудлуудад дүн шинжилгээ хийж олж авсан туршлагыг нэгтгэн дүгнэв. Xen дээр суурилсан Amazon EC2 үүл. Шилжүүлсний дараа CPU-ийн ачаалал 30%-иар нэмэгдэж, бичих үйл ажиллагааны саатал ойролцоогоор ижил хэмжээгээр нэмэгдсэн. Эндээс харахад цаг хугацааны мэдээллийг эрчимтэй шаарддаг програмуудын гүйцэтгэл нь системд сонгосон цаг хугацааны эх сурвалжаас ихээхэн хамаардаг.

Эхлээд гүйцэтгэлийн бууралтын шалтгаан нь тодорхойгүй байсан бөгөөд оношийг дээд болон execsnoop хэрэгслүүдийг ашиглан байнга ажиллаж байгаа эсвэл үе үе эхлүүлсэн нөөц их шаарддаг системийн процессуудын болзошгүй нөлөөллийг хянах замаар эхэлсэн. Гэхдээ Java хэл дээр бичигдсэн Кассандра DBMS дээр нөөцийн хэрэглээ нэмэгдсэнийг бүх зүйл харуулж байна. CentOS болон Ubuntu дээр зэрэгцэн ажиллаж байгаа Кассандрагийн хоёр процессын профайлыг тодорхойлох хэмжигдэхүүнийг харьцуулж, ижил асуултуудыг боловсруулахад нийт цагийн 32 орчим хувь нь одоогийн цагийн талаарх мэдээллийг олж авахад ашигладаг os::javaTimeMillis() руу залгахад зарцуулагдсан болохыг харуулсан. .

Үүний дараа System.currentTimeMillis() аргыг давталтаар зуун сая удаа гэж нэрлэсэн энгийн Java программыг бичсэн туршилтыг явуулсан. Аппликешныг ажиллуулснаар CentOS дээр 13 секунд, Ubuntu дээр 68 секунд зарцуулсан байна. 5 дахин удаан. Gettimeofday() функцийг зуу сая удаа дуудсан ижил төстэй программыг Си хэл дээр бичсэн боловч гүйцэтгэсэн үед ижил төстэй үр дүн гарсан.

Асуудлын эх үүсвэр нь одоогийн цагийг буцаах функц байсан нь тодорхой болсон тул систем дэх тодорхой цаг хугацааны янз бүрийн эх үүсвэрийг сонгохдоо үзүүлэлтүүдийн өөрчлөлтөд анхаарлаа хандуулав. "/sys/devices/system/clocksource/clocksource0/current_clocksource"-ын контентоос харахад "xen" таймерыг зочны системд Линуксыг ажиллуулахдаа анхдагч байдлаар ашигласан. Цагийн эх үүсвэрийг "tsc" болгон өөрчилсний дараа Ubuntu дахь туршилтын програмыг гүйцэтгэх хугацаа 68 секундээс 3.3 секунд болж буурсан. 20 дахин хурдан болсон. Нэмж дурдахад квм цагийн цагийн эх үүсвэрийн гүйцэтгэлийн туршилтыг хийсэн бөгөөд энэ нь 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 бодит 1m8.300s хэрэглэгч 0m38.337ms.s. echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench бодит 29.875m0s хэрэглэгч 0m3.370s sys 0m3.353s

TSC эх үүсвэрийг сонгох цагийг олж авахын тулд RDTSC процессорын зааврыг ашигладаг бөгөөд үүнийг гүйцэтгэхэд системийн дуудлага шаарддаггүй (заавар нь өндөр эрх шаарддаггүй бөгөөд CPU-д суурилуулсан цаг тоологчоос утгыг үүсгэдэг). Анхдагч байдлаар, TSC идэвхжээгүй, учир нь хуучин өдрүүдэд энэ эх сурвалж нь бусад процессоруудад илүү нарийвчлалтай уншихын тулд программ хангамжаар тохируулдаг цаг хугацааны аажмаар шилжилтийг үгүйсгэдэггүй. Процессор боловсруулах чиглэлээр мэргэшсэн инженерийн хэлснээр TSC-ийг ашиглах үед цаг хугацааны өөрчлөлтийн талаархи айдас нь эрт дээр үеэс үнэн биш байсан бөгөөд орчин үеийн процессоруудад энэ эх үүсвэр нь олон жилийн турш тогтвортой уншилтыг гаргаж чаддаг.

Netflix дээрх үйлдвэрлэлийн серверүүдийг TSC эх үүсвэр рүү шилжүүлснээр бичих хоцрогдол 43%-иар буурч, Ubuntu-г ашиглан "xen" цагийн эх үүсвэртэй CentOS-ийг ажиллуулж байгаа тохиргооноос 4 дахин хурдан үр дүнд хүрсэн. Судалгааны үр дүнг Амазон руу шилжүүлсэн бөгөөд энэ нь Xen гипервизор дээр суурилсан AWS EC2 орчинд анхдагч TSC цагийн эх үүсвэрийг ашиглахыг албан ёсоор санал болгосон (Nitro гипервизор дээр суурилсан орчинд kvm цагийг санал болгосон хэвээр байна).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх