Hyppää sisältöön
    • Suomeksi
    • In English
Trepo
  • Suomeksi
  • In English
  • Kirjaudu
Näytä viite 
  •   Etusivu
  • Trepo
  • Opinnäytteet - ylempi korkeakoulututkinto
  • Näytä viite
  •   Etusivu
  • Trepo
  • Opinnäytteet - ylempi korkeakoulututkinto
  • Näytä viite
JavaScript is disabled for your browser. Some features of this site may not work without it.

On-Chip Communication in Asymmetric Multi-Processing Environment

Hämäläinen, Lassi (2025)

 
Avaa tiedosto
HamalainenLassi.pdf (1.320Mt)
Lataukset: 



Hämäläinen, Lassi
2025

Tietotekniikan DI-ohjelma - Master's Programme in Information Technology
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2025-04-22
Näytä kaikki kuvailutiedot
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202504173836
Tiivistelmä
Epäsymmetrinen moniprosessointi mahdollistaa useamman erilaisen suoritusympäristön etujen yhdistämisen. Suorittamalla käyttöjärjestelmää osalla ympäristön suoritusytimistä ja laitteistoläheistä koodia toisilla, on mahdollista saavuttaa sekä tiukat reaaliaikavaatimukset, että käyttöjärjestelmän laajennettavuus ja monikäyttöisyys. Järjestelmä kuitenkin vaatii ympäristöjen välille tehokkaan viestintäratkaisun, joka ottaa huomioon molempien puolien rajoitteet ja vaatimukset.

Ainut julkinen ja soveltuva olemassa oleva toteutus kommunikaatioon epäsymmetrisessä ympäristössä on OpenAMP-kirjasto. OpenAMP hyödyntää Linux -järjestelmäytimen rpmsg-rajapintaa ja toteuttaa viestintäkanavat ytimien välille jaetun muistin ja ydinten välisten keskeytysten avulla. OpenAMP-kirjasto on avointa lähdekoodia ja tuettu useilla alustoilla. Rpmsg-rajapinta on osa Linux-järjestelmäydintä ja tiukasti sidottu remoteproc-rajapintaan, joka tarjoaa rajapinnan toisten epäsymmetristen suoritusympäristöjen hallintaan, esimerkiksi toisten prosessorien käynnistämisen osalta.

Tämän työn tavoitteena on toteuttaa tehokas viestintäratkaisu Linux-ympäristössä pyörivän sovelluksen ja toisella AMD Zynq®-7000 -järjestelmäpiirin ytimellä ajettavan laitteistoläheisen koodin välillä. Laitteistoläheisellä puolella on myöskin tiukat reaaliaikavaatimukset. Työ toteuttaa pakettipohjaisen viestinnän jaetun muistin rengaspuskurien ja ydinten välisten keskeytysten avulla. Linux-sovellukselle viestintäkanava avataan järjestelmäydin moduulilla toteutettujen merkkilaitteiden avulla. Tilannetietoa halutaan jakaa laitteistoläheiseltä puolelta Linux-sovellukselle mahdollisimman reaaliaikaisesti, mutta vain tuoreimmalla tiedolla on merkitystä. Tähän käyttötapaukseen rengaspuskurit eivät sovellu niin hyvin, koska niissä voi olla vanhoja arvoja tai ne voivat täyttyä, jos laitteistoläheinen puoli tuottaa enemmän paketteja kuin Linux-sovellus pystyy käsittelemään. Näistä syistä tähän käyttötapaukseen kehiteltiin vielä erillinen ratkaisu, jossa jaettu muisti annetaan suoraan luettavaksi Linux-sovellukselle ja välitetty tieto synkronoidaan atomisten laskurien avulla.

Toteutusta testattiin erilaisilla muistin ja välimuistin yhdistelmillä, ja näitä vertailtiin vastaavaan OpenAMP-toteutukseen. Työn viestintäratkaisu saavutti 3,3 µs latenssin Linux-puolen sovellukselta laitteistoläheiselle koodille ja 2,7 µs latenssin vastakkaiseen suuntaan käytettäessä 32-tavun paketteja ja DDR3-muistia ilman välimuistia. Tämä on selkeä parannus vertailtuun OpenAMP-pohjaiseen ratkaisuun, joka saavutti 9,2 µs ja 4,8 µs latenssit samoissa tilanteissa. Vastaavasti suurin siirtonopeus 496 B paketeilla Linux-puolen sovellukselta kasvoi 30 MB/s nopeudesta 100 MB/s nopeuteen siirryttäessä OpenAMP-pohaisesta ratkaisusta työssä toteutettuun ratkaisuun. Käytettäessä välimuistia ja 1 kB pakettikokoa saavutettiin 310 MB/s siirtonopeus. Tilannetiedon välitykseen kehitetty erillinen ratkisu mahdollisti laiteistoläheisen koodin päivittää 264 B kokoinen jaettu tieto 336 ns aikana ja Linux-puolen sovellus pystyi päivittämään oman kopionsa tiedosta uusimpaan saatavilla olevaan keskimäärin 457 ns aikana. Erillinen ratkaisu mahdollisti nopean tiedon jakamisen ydinten välillä, kun vain tuoreimmilla arvoilla oli merkitystä. Tämä erillinen ratkaisu olisi myös mahdollista yhdistää OpenAMP rpmsg -pohjaiseen toteutukseen, jolloin voitaisiin saavuttaa laajasti käytetyn toteutuksen etuja, mutta kuitenkin mahdollistettaisiin optimi suorituskyky eniten sitä vaativalle viestinnälle.
 
An asymmetric multi-processing system with a general-purpose operating system and a bare metal processor core can gain advantages and possibilities for both parts of the system. Hard real-time requirements or precise timing control are hard to achieve on a general-purpose operating system, but instead, it offers much easier extensibility and communication to external systems. Combined systems must interact and transfer data between the domains, but the asymmetric nature limits available solutions. Hard real-time requirements of the bare metal side add additional constraints for the implementation especially when there are multiple different priorities for the transferred data.

The primary existing implementation is the OpenAMP library and Linux kernel rpmsg framework that implements inter-processor communication by a combination of shared memory buffers and inter-processor interrupts. The framework is supported by multiple platforms and is also closely tied to Linux kernel remoteproc framework that implements lifetime management of asymmetric processors. The implementation is generic and abstracted to support different platforms and system configurations.

The main goal of this work is to allow high-performance on-chip data transfer between bare-metal and Linux user-space applications without compromising the hard real-time constraints of the bare-metal application. The work implements a shared-memory-based communication solution consisting of a Linux kernel module and a bare metal library code for AMD Zynq®-7000 system-on-chip. The implementation allows multiple concurrent packet transfers for prioritization and separate synchronized buffers for low-latency state sharing. Packet-based transfer pipes are implemented as lock-free shared-memory ring buffers exposed as character devices. Inter-processor queues provide reliable communication, but sharing the state data of the bare metal side can be implemented better as that only requires the most recent data. Queues may hold outdated values or become full if the Linux side cannot read values fast enough. To resolve these issues, a more specialized solution was implemented that directly shares the shared memory buffer as read-only for the Linux side and uses atomic counters to synchronize reads.

The implemented solution was compared to OpenAMP with different combinations of memory and caching to evaluate the choice between on-chip-memory and DDR3 for the shared-memory buffer. The solution achieved 3.3 µs communication latency from Linux user-space application to the bare metal side and 2.7 µs to the other direction. This is a significant improvement compared to OpenAMP based solution that had latencies 9.2 µs and 4.8 µs with small 32 B packets using non-cached DDR3-memory. Data throughput from the Linux application to the bare metal was similarly improved from 30 MB/s to 100 MB/s with 496 B packets and the same memory configuration. Using 1 kB packets and enabling data cache with cache coherency allowed reaching 310 MB/s throughput with this works solution. The specialized solution implemented for the state sharing allowed the bare metal side to update the shared data in 336 ns, and the Linux application to read most of the recent data in 457 ns. This specialized solution made sharing even large amounts of frequently changing data efficient and low latency. The specialized solution could also be combined with the OpenAMP rpmsg framework to get the benefits of the standardized solution, but still reach optimal high performance for the most critical state information sharing.
 
Kokoelmat
  • Opinnäytteet - ylempi korkeakoulututkinto [42676]
Kalevantie 5
PL 617
33014 Tampereen yliopisto
oa[@]tuni.fi | Tietosuoja | Saavutettavuusseloste
 

 

Selaa kokoelmaa

TekijätNimekkeetTiedekunta (2019 -)Tiedekunta (- 2018)Tutkinto-ohjelmat ja opintosuunnatAvainsanatJulkaisuajatKokoelmat

Omat tiedot

Kirjaudu sisäänRekisteröidy
Kalevantie 5
PL 617
33014 Tampereen yliopisto
oa[@]tuni.fi | Tietosuoja | Saavutettavuusseloste