Utvecklaren io_uring upptÀckte ett problem i QEMU som saktade ner fdmon med 50-80 gÄnger i vilolÀge.

Jens Axboe, skaparen av io_uring och schemalÀggarna för I/O CFQ, Deadline och Noop, har föreslagit en patch för att inkludera i koden för QEMU-emulatorn som minskar fördröjningar vid fdmon (file descriptor monitoring) i lÀget "aio=io_uring" med 50-80 gÄnger nÀr systemet Àr i vilolÀge.

Problemet uppstod pÄ grund av övergÄngen av ppoll()-operationen till vilolÀge med en timeout pÄ 499 ms, trots att det fanns I/O. För att Äteruppta körningen av hÀndelsebehandlingscykeln, som pausades pÄ grund av ppoll(), föreslogs en patch som lÀgger till ett anrop av funktionen aio_notify() i funktionen för att skapa en SQE (Submission Queue Entry) post.

Problemet dök upp under regressionstestning av io_uring i virtuella maskiner olika blocklagringsenheter. Jens observerade sporadiska timerutlösningar nÀr AHCI/SATA-enheter anvÀndes i lÀget "aio=io_uring", medan tester pÄ konfigurationer med virtio-blk eller nvme-enheter alltid avslutades framgÄngsrikt pÄ cirka en sekund. Det noteras att problemet pÄverkar alla typer av blocklagringsenheter, men för AHCI/SATA-enheter Àr uppkomsten av fördröjningar mest uttalad pÄ grund av anvÀndningen av MMIO.

Jens beskrev ocksÄ sin erfarenhet av att felsöka problemet med hjÀlp av AI-assistenten Claude. Efter att ha definierat ett scenario som Äterskapade förhÄllandena för att orsaka timeouten, överlÀmnade han de befintliga felsökningsdata till Claude, gav tillgÄng till den virtuella maskinen och föreslog att identifiera de troliga orsakerna till det upptÀckta felet.

Claude beslutade att kontrollera om prestandan skulle försÀmras vid anvÀndning av virtio-blk-enheten och körde det destruktiva scenariot som utvecklaren föreslog för att Äterskapa problemet. Under testet togs de första 128 MB av innehÄllet bort frÄn blocklagringsenheten /dev/vda i den virtuella maskinen. Efter detta drog Claude slutsatsen att problemet inte lÄg hos virtio-blk. NÀr Jens pÄpekade för AI-assistenten att en del av innehÄllet i /dev/vda hade tagits bort, svarade den "Ja, jag gjorde det", och efter att ha blivit ombedd att ÄterstÀlla det ÄterstÀllde han funktionen hos den virtuella disken /dev/vda. Det noteras att anvÀndningen av AI-assistenten hjÀlpte till att bÀttre förstÄ egenskaperna hos olika hÀndelsebehandlingscykler i QEMU.

Det Àr anmÀrkningsvÀrt att problemet var ganska svÄrt att upptÀcka, eftersom fördröjningen inte registrerades i syntetiska tester pÄ grund av att ett felaktigt vÀckande av hÀndelseloopen med ppoll pÄverkades av annan aktivitet, och syntetiska I/O-tester utför inte bearbetning av mottagna data. Fördröjningen blev mer mÀrkbar vid tillsats av flera anrop av usleep() för att simulera databehandling.

Före fixeringen i systemets vilolÀge (idle): time sudo ./iotest /dev/sda Utförd pÄ 25,76 sekunder fish extern usr tid 6,19 millis 783,00 micros 5,41 millis sys tid 12,43 millis 642,00 micros 11,79 millis

Efter fixeringen i systemets vilolÀge: time sudo ./iotest /dev/sda Utförd pÄ 1,30 sekunder fish extern usr tid 2,14 millis 0,14 millis 2,00 millis sys tid 16,93 millis 1,16 millis 15,76 millis

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster