io_uring arendaja tuvastas QEMU probleemi, mis aeglustas fdmon'i 50-80 korda ooteolukorras

Jens Axboe, io_uring'i ja CFQ, Deadline ning Noop'i sisend/vĂ€ljund planeerijate looja, pakkus QEMU emulaatori koodibaasi kaasamiseks plaani, mis vĂ€hendab ooteaegu fdmon (faili descriptori jĂ€lgimise) töö kĂ€igus 'aio=io_uring' reĆŸiimis 50-80 korda, kui sĂŒsteem on ooteolekus.

Probleem ilmus, kui ppoll() operatsiooni kasutati unereĆŸiimis 499 ms ajutise viivitusega, olenemata sisse/vĂ€ljundest. Peamise sĂŒndmuste töötlemise tsĂŒkli taastamiseks, mis oli peatatud ppoll() tĂ”ttu, pakuti vĂ€lja patch, mis lisas SQE (Submission Queue Entry) loomise funktsiooni kutsumise aio_notify(), mis tĂ”ukab ppoll() unereĆŸiimist vĂ€lja.

Probleem ilmus io_uring'i regressioonitestimise ajal virtuaalmasinaid erinevate plokkseadmetega. Jens mĂ€rkis, et AHCI/SATA seadmete kasutamisel 'aio=io_uring' reĆŸiimis ilmnes ootamatult viivitusi, samas kui virtio-blk vĂ”i nvme seadmetega konfigureerimisel lĂ€biviidud testid said alati edukalt lĂ”petatud umbes ĂŒhe sekundiga. Tuleb mĂ€rkida, et probleem mĂ”jutab kĂ”iki plokkseadmete tĂŒĂŒpe, kuid AHCI/SATA seadmete puhul on viivituste ilmnemine kĂ”ige selgem, kuna kasutatakse MMIO-d.

Jens kirjeldas ka oma kogemust probleemi tÔrgete lahendamisel AI-abistaja Claude'i kasutamise kaudu. PÀrast ajendite tuvastamist, mis taasloovad tingimused viivituse tekkimiseks, edastas ta olemasolevad tÔrkeotsingud andmed Claude'ile, andis juurdepÀÀsu virtuaalmasinale ja palus tal mÀÀrata tÔenÀolised pÔhjused tuvastatud tÔrkeks.

Claude otsustas kontrollida, kas virtio-blk seadme kasutamisel aeglustub töö ja kĂ€ivitas arendaja soovitatud hĂ€vitava stsenaariumi, mis probleemile jĂ€rgi. Kontrollimise kĂ€igus kustutati esimene 128 MB sisu plokkseadmest /dev/vda virtuaalmasinas. PĂ€rast seda teatas Claude, et probleem ei ole virtio-blk'is. kui Jens juhtis AI-abistaja tĂ€helepanu sisu kustutamisele /dev/vda-st, vastas ta 'Jah, ma tegin seda', ning pĂ€rast palvet parandada taastati virtuaalse ketta /dev/vda töövĂ”ime. TĂ”detakse, et AI-abistaja kasutamine aitas paremini mĂ”ista erinevate sĂŒndmuste töötlemise tsĂŒklite eripĂ€rasid QEMU-s.

MĂ€rkimisvÀÀrne on see, et probleemi oli ĂŒsna raske avastada, kuna sĂŒnteetilistes testides ei registreerita aeglustumist, kuna tĂ”rke ilmnemine sĂ”ltub sĂŒndmuste töötlemise tsĂŒkli kĂ€ivitamisest ppoll tĂ”ttu muust tegevusest, ja sĂŒnteetilised sisendi/vĂ€ljundi testid ei töötle saadud andmeid. Aeglustumine muutus mĂ€rgatavamaks mitme usleep() kutsumise lisamisel andmete töötlemise simuleerimiseks.

Enne parandamist seisundis olev sĂŒsteem (idle): time sudo ./iotest /dev/sda Tehtud 25,76 sekundi jooksul fish vĂ€line usr aeg 6,19 millis 783,00 mikrosekundit 5,41 millis sys aeg 12,43 millis 642,00 mikrosekundit 11,79 millis

PĂ€rast parandamist seisundis olev sĂŒsteem: time sudo ./iotest /dev/sda Tehtud 1,30 sekundi jooksul fish vĂ€line usr aeg 2,14 millis 0,14 millis 2,00 millis sys aeg 16,93 millis 1,16 millis 15,76 millis

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster