Zhvilluesi i io_uring ka identifikuar një problem në QEMU, që ka ngadalësuar fdmon nga 50-80 herë në modalitetin e pritjes

Jens Axboe, krijuesi i io_uring dhe planifikuesve të hyrjes/daljes CFQ, Deadline dhe Noop, propozoi përfshirjen në bazën e kodit të emulatorit QEMU një patch që redukton vonesat gjatë përdorimit të fdmon (monitorimi i descriptorëve të skedarëve) nga 50-80 herë në mënyrën «aio=io_uring» dhe kur sistemi është në gjendje pritjeje (idle).

Problemi shfaqej për shkak të kalimit të operacionit ppoll() në gjendjen e flijimit me një kohëmatës prej 499 ms, megjithëse kishte hyrje/dalje. Për të rinisur kryerjen e ciklit kryesor të trajtimit të ngjarjeve, i pezulluar për shkak të ppoll(), u propozua një patch që shton në funksionin e krijimit të regjistrit SQE (Submission Queue Entry) thirrjen e funksionit aio_notify(), e cila ngre ppoll() nga gjendja e flijimit.

Problemi u shfaq gjatë testimit regresiv të io_uring në makina virtuale me pajisje të ndryshme bllokuese. Jens vuri re shfaqjen rastësore të vonesave gjatë përdorimit të pajisjeve AHCI/SATA në mënyrën «aio=io_uring», ndërsa në konfigurimet me pajisjet virtio-blk ose nvme, testet gjithmonë përfundonin me sukses për rreth një sekondë. Sidoqoftë, vërehet se problemi prek të gjitha tipet e pajisjeve bllokuese, por për pajisjet AHCI/SATA shfaqja e vonesave është më e theksuar për shkak të përdorimit të MMIO.

Jens gjithashtu përshkroi përvojën e tij të debuggimit të problemit duke përdorur asistentin AI Claude. Pas përcaktimit të skenarit që riprodhon kushtet për shfaqjen e kohëmatësit, ai i dërgoi të dhënat e disponueshme të debuggimit Claude, ofroi akses në makinën virtuale dhe sugjeroi të përcaktonte shkaqet e mundshme të gabimit të identifikuar.

Claude vendosi tĂ« kontrollojĂ« nĂ«se puna do tĂ« ngadalĂ«sohej gjatĂ« pĂ«rdorimit tĂ« pajisjes virtio-blk dhe e nisi me tĂ« skenarin shkatĂ«rrues tĂ« propozuar nga zhvilluesi pĂ«r tĂ« riprodhuar problemin. GjatĂ« procesit tĂ« verifikimit, janĂ« fshirĂ« 128 MB tĂ« parat 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 dha asistenti AI shĂ«nimin pĂ«r tĂ« fshirĂ« njĂ« pjesĂ« tĂ« pĂ«rmbajtjes /dev/vda, ai u pĂ«rgjigj "Po, e kam bĂ«rĂ« kĂ«tĂ«", dhe pas kĂ«rkesĂ«s pĂ«r tĂ« riparuar — riktheu funksionalitetin e disku virtual /dev/vda. VĂ«rehet se pĂ«rdorimi i asistentit AI ndihmoi nĂ« kuptimin mĂ« tĂ« mirĂ« tĂ« veçorive tĂ« 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, pasi nĂ« testet sintetike ngadalĂ«simi nuk regjistrohet pĂ«r shkak se ndodhte ndikimi i zgjedhjes sĂ« ciklit tĂ« trajtimit tĂ« ngjarjeve me ppoll nga aktivitete tĂ« tjera, ndĂ«rsa testet sintetike tĂ« hyrjes/jeshjes nuk kryejnĂ« procesimin e tĂ« dhĂ«nave tĂ« marra. NgadalĂ«simi u bĂ« mĂ« i dukshĂ«m me shtimin e disa thirrjeve usleep() pĂ«r tĂ« simuluar procesimin e tĂ« dhĂ«nave.

Pas korrigjimit në sistemin në gjendje idle: time sudo ./iotest /dev/sda U ekzekutua në 25.76 sekonda fish external 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 idle: time sudo ./iotest /dev/sda U ekzekutua në 1.30 sekonda fish external 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

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