Haku

Embedded dynamic memory allocator optimisation

QR-koodi

Embedded dynamic memory allocator optimisation

Työn tavoitteena oli parantaa U-Bloxin GNSS laitteissa käytettyä muistiallokaattoria. Alustavan analyysin perusteella, nykyisen Buddy-allokaattorin heikkoutena oli korkea fragmentaatio, joten tutkimuksen pääpainona oli tämän alentaminen. Ongelman ja sen taustojen ymmärtämiseksi, sekä parempien allokaattorien löytämiseksi, tehtiin työn alussa kirjallisuusselvitys. Selvityksen avulla määriteltiin dynaamisen muistinhallinan perusteet ja kuinka niiden avulla voidaan rakentaa halutunlaisia allokaattoreita. Selvityksen osana tarkasteltiin useita erilaisia allokaattoreita ja päädyttiin lopulta valitsemaan 2 allokaattoria tarkempaa tutkimusta varten. Nämä olivat reaaliaika käyttöön suunnitellut ja laajalti tunnetut TLSF ja Half Fit variantti O1Heap. Alustavien kokeiden perusteella, toteutettiin kaksi uutta allokaattoria vastaamaan kokeissa havaittuihin TLSF:n ja O1Heapin heikkouksiin. Ensimmäisenä Half Fit CSTM, joka tekee pieniä muutoksia Half Fittiin vaihtaen vakioaikaisen suorituksen matalampaan fragmentaatioon. Half Tree puolestaan on uusi allokaattori suunniteltu tätä tutkimusta varten. Sen tavoitteena oli vastata muiden allokaattereiden heikkouksiin ja suoriutua hyvin kaikilla osa-alueilla. Allokaattoreiden soveltuvuutta Buddyn korvaajaksi arvioitiin kokeellisesti. Kokeiden avulla mitattiin allokaatoreidenn keskimääräistä suorituaikaa, huonointa suoritusaikaa sekä fragmentaatiota ja muistintarvetta. Koejärjestelyt suunniteltiin ja toteutettiin kohdelaitteella tulosten todenmukaisuutta ajatellen. Kokeet keskittyivät laitteelta kerättyihin oikeisiin muistijälkiin, mutta myös synteettisiä muistijälkiä hyödynnettiin. Kaikille 4 allokaattorille suoritettiin samat kokeet ja niiden tuloksia verratiin Buddy -allokaattoriin ja toisiinsa. Valituista allokaattoreista TLSF ja Half Tree osoittautuivat parhaiten soveltuviksi. TLSF on kuitenkin erittäin hidas verrattuna Buddy -allokaattoriin. Half Tree puolestaan on selvästi parempi, tarjoten edelleen matalan fragmentation, mutta ilman merkittävää kompromissia suorituskyvyssä. Half Treen fragmentaatio on noin 15% Buddy-allokaattorin fragmentaatiosta ja suorituskyky heikkenee vain 0–15% muistijäljestä riippuen. Vaaditun muistin määrässä alempi fragmentaatio tarkoittaa noin 25% parannusta. Työ täytti sille asetetut tavoitteet. Half Tree allokaattori tarjoaa merkittävän parannuksen muistitehokkuudessa Buddy-allokaattoriin verrattuna, tekemättä suuria uhrauksia suorituskyvyssä.

Tallennettuna: