Zhvilluesi io_uring zbuloi në QEMU një problem që ngadalësonte fdmon në mënyrë të papritur me 50-80 herë

Jens Axboe, krijuesi i io_uring dhe planifikuesve të hyrjes/jeshëve CFQ, Deadline dhe Noop, ofroi përfshirjen në bazën koduese të emulatorit QEMU një patch që redukton vonesat nga 50-80 herë gjatë punës me fdmon (monitorimi i descriptorëve të skedarëve) nën modalitetin "aio=io_uring" dhe kur sistemi është në gjendje pushimi.

Problemi shfaqej për shkak të kalimit të operacionit ppoll() në gjendje gjumi me një kohë skadimi prej 499 ms, përkundër pranisë së hyrjes/jeshëve. Për të rikthyer kryerjen e ciklit kryesor të përpunimit të ngjarjeve, i cili ishte pezulluar për shkak të ppoll(), është propozuar një patch që shton në funksionin e krijimit të regjistrimit SQE (Submission Queue Entry) thirrjen e funksionit aio_notify(), i cili e nxjerr ppoll() nga gjendja e gjumit.

Problemi doli gjatĂ« testeve regresore tĂ« io_uring nĂ« makinat virtuale me pajisje tĂ« ndryshme bllokuese. Jens vuri re shfaqjen rastĂ«sore tĂ« vonesave gjatĂ« pĂ«rdorimit tĂ« pajisjeve AHCI/SATA nĂ«n modalitetin "aio=io_uring", ndĂ«rsa nĂ« konfigurimet me pajisje virtio-blk ose nvme, testet gjithmonĂ« pĂ«rfundonin me sukses brenda rreth njĂ« sekonde. ËshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se problemi prek tĂ« gjitha llojet e pajisjeve bllokuese, por pĂ«r pajisjet AHCI/SATA shfaqja e vonesave Ă«shtĂ« mĂ« e dukshme pĂ«r shkak tĂ« pĂ«rdorimit tĂ« MMIO.

Jens gjithashtu përshkroi përvojën e tij në debugin e një problemi duke përdorur asistentin AI Claude. Pasi përcaktoi një skenar që riprodhonte kushtet për ndodhjën e timeout-it, ai i dërgoi të dhënat e disponueshme të debuginit Claude, i ofroi qasje në makinën virtuale dhe sugjeroi të përcaktonte shkaktarët e mundshëm të defektit të zbuluar.

Claude vendosi tĂ« kontrollonte nĂ«se performanca do tĂ« ngadalĂ«sohej gjatĂ« pĂ«rdorimit tĂ« pajisjes virtio-blk dhe nisi skenarin destruktiv tĂ« propozuar nga zhvilluesi qĂ« riprodhonte problemin. GjatĂ« verifikimit, u fshinĂ« 128 MB tĂ« para tĂ« pĂ«rmbajtjes nga pajisja bllokuese /dev/vda nĂ« makinĂ«n virtuale. Pas kĂ«saj, Claude arriti nĂ« pĂ«rfundimin se problemi nuk ishte te virtio-blk. Kur Jens i tregoi asistetit AI pĂ«r tĂ« fshirĂ« njĂ« pjesĂ« tĂ« pĂ«rmbajtjes nga /dev/vda, ai u pĂ«rgjigj "Po, e bĂ«ra kĂ«tĂ«", dhe pas kĂ«rkesĂ«s pĂ«r ta riparuar — riktheu funksionalitetin e diskut virtual /dev/vda. Vlen tĂ« theksohet se pĂ«rdorimi i asistetit AI ndihmoi pĂ«r tĂ« kuptuar mĂ« mirĂ« karakteristikat e ekzekutimit tĂ« cikleve tĂ« ndryshme tĂ« trajtimit tĂ« ngjarjeve nĂ« QEMU.

Ësht e rĂ«ndĂ«sishme tĂ« theksohet se problemi ishte mjaft i vĂ«shtirĂ« pĂ«r t'u zbuluar, sepse nĂ« testet sintetike nuk vĂ«rehet ngadalĂ«simi, pĂ«r shkak se shfaqja e çrregullimit ndikohet nga zgjerimi i ciklit tĂ« pĂ«rpunimit tĂ« ngjarjeve me ppoll pĂ«r shkak tĂ« aktiviteteve tĂ« tjera, dhe testet sintetike tĂ« hyrjes/daljes nuk e trajtojnĂ« pĂ«rpunimin e tĂ« dhĂ«nave tĂ« marra. NgadalĂ«simi u bĂ« mĂ« i dukshĂ«m kur u shtuan disa thirrje usleep() pĂ«r tĂ« simuluar pĂ«rpunimin e tĂ« dhĂ«nave.

Para korrigjimit në sistemin në gjendje pushimi (idle): time sudo ./iotest /dev/sda Ekzekutuar në 25.76 secs fish jashtë usr time 6.19 millis 783.00 micros 5.41 millis sys time 12.43 millis 642.00 micros 11.79 millis

Pas korrigjimit në sistemin në gjendje pushimi: time sudo ./iotest /dev/sda Ekzekutuar në 1.30 secs fish jashtë usr time 2.14 millis 0.14 millis 2.00 millis sys time 16.93 millis 1.16 millis 15.76 millis

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster