Linuxi 5.18 kerneli väljalase

Pärast kahekuulist arendustööd esitles Linus Torvalds Linuxi kerneli 5.18 väljalaset. Märkimisväärsemate muudatuste hulgas: viidi läbi vananenud funktsionaalsuse suurpuhastus, Reiserfs FS kuulutati aegunuks, juurutati kasutajaprotsesside jälgimise sündmused, lisati Inteli IBT exploitide blokeerimise mehhanismi tugi, puhvri ületäitumise tuvastamise režiim lubati, kui funktsiooni memcpy() abil lisati funktsiooni fprobe kõnede jälgimise mehhanism, AMD Zen CPU-de tegumiplaneerija jõudlust on täiustatud, lisatud on draiver Inteli protsessori funktsionaalsuse (SDS) haldamiseks, mõned paigad on integreeritud päisefailide ümberkorraldamiseks ja C11 standardi kasutamine on heaks kiidetud.

Uus versioon sisaldab 16206 2127 parandust 14203 arendajalt (viimases versioonis oli 1995 108 parandust 14235 arendajalt), paiga suurus on 1340982 MB (muudatused puudutasid 593836 44 faili, 5.18 16 11 koodirida lisati, 3 rida kustutati, 3 rida). Umbes XNUMX% kõigist versioonis XNUMX sisse viidud muudatustest on seotud seadme draiveritega, ligikaudu XNUMX% muudatustest on seotud riistvaraarhitektuurile omase koodi värskendamisega, XNUMX% on seotud võrgupinuga, XNUMX% on seotud failisüsteemidega ja XNUMX% on seotud sisemiste tuuma alamsüsteemidega.

Peamised uuendused kernelis 5.18:

  • Ketta alamsüsteem, I/O ja failisüsteemid
    • Failisüsteemis Btrfs on saatmis- ja vastuvõtmistoimingute tegemisel lisatud tihendatud andmete edastamise tugi. Varem saatis/vastuvõtt kasutades saatja pool tihendatud kujul salvestatud andmed lahti ja vastuvõttev pool enne kirjutamist uuesti kokku. 5.18 tuumas said kasutajaruumi rakendused, mis kasutavad kõnede saatmise / vastuvõtmise, võimaluse edastada tihendatud andmeid ilma ümber pakkimata. Funktsionaalsust rakendatakse tänu uutele ioctl operatsioonidele BTRFS_IOC_ENCODED_READ ja BTRFS_IOC_ENCODED_WRITE, mis võimaldavad teil teavet otse lugeda ja teatud ulatuses kirjutada.

      Lisaks parandab Btrfs fsynci jõudlust. Lisati võimalus dubleerida ja teostada tagasilink (faili metaandmete kloonimine, luues lingi olemasolevatele andmetele ilma neid tegelikult kopeerimata) kogu salvestusruumi jaoks, mitte ainult ühenduspunktidega.

    • Otsese I/O režiimis on võimalik krüptitud failidele juurde pääseda, kui fscrypt kasutab sisemist krüptimist, mille puhul krüptimise ja dekrüpteerimise toimingud teostab draivikontroller, mitte kernel. Tavalise kerneli krüptimise korral on juurdepääs krüptitud failidele Direct I/O abil endiselt võimatu, kuna failidele pääsetakse juurde kerneli puhverdusmehhanismist mööda minnes.
    • NFS-server sisaldab vaikimisi NFSv3-protokolli tuge, mis ei vaja nüüd eraldi lubamist ja on saadaval, kui NFS on üldiselt lubatud. NFSv3 peetakse NFS-i peamiseks ja alati toetatud versiooniks ning NFSv2 tugi võidakse tulevikus katkestada. Kataloogi sisu lugemise efektiivsus on oluliselt paranenud.
    • ReiserFS-failisüsteem on aegunud ja eeldatavasti eemaldatakse 2025. aastal. ReiserFS-i kasutusest loobumine vähendab kogu failisüsteemi hõlmavate muudatuste säilitamiseks vajalikke jõupingutusi, mis on seotud uue monteerimisliidese, iomapi ja tomesi toega.
    • F2FS-failisüsteemi jaoks on rakendatud ühendatud failisüsteemide kasutajatunnuste kaardistamise võimalus, mida kasutatakse ühendatud välispartitsioonil oleva konkreetse kasutaja failide võrdlemiseks praeguse süsteemi teise kasutajaga.
    • Device-mapper töötlejate statistika arvutamise kood on ümber töötatud, mis on oluliselt parandanud arvestuse täpsust töötlejates nagu dm-crypt.
    • NVMe seadmed toetavad nüüd terviklikkuse kontrollimiseks 64-bitiseid kontrollsummasid.
    • Exfat-failisüsteemi jaoks on välja pakutud uus ühendamisvalik "keep_last_dots", mis keelab failinime lõpust punktide kustutamise (Windowsis eemaldatakse failinime lõpus olevad punktid vaikimisi).
    • EXT4 parandab režiimi fast_commit jõudlust ja suurendab skaleeritavust. Ühendusvalik “mb_optimize_scan”, mis võimaldab suurendada jõudlust suure failisüsteemi killustatuse tingimustes, on kohandatud ulatusega failidega töötamiseks.
    • Plokkseadmeid toetavas alamsüsteemis kirjutamisvoogude tugi on lõpetatud. Seda funktsiooni pakuti välja SSD-de jaoks, kuid see ei olnud laialt levinud ja praegu ei ole kasutusel ühtegi seda režiimi toetavat seadet ning on ebatõenäoline, et need tulevikus ilmuvad.
  • Mälu- ja süsteemiteenused
    • Alanud on paikade komplekti integreerimine, mis võimaldab päisefailide hierarhia ümberkorraldamise ja ristsõltuvuste arvu vähendamise kaudu oluliselt lühendada kerneli ümberehitamise aega. Kernel 5.18 sisaldab plaastreid, mis optimeerivad ülesannete planeerija päisefailide (kernel/sched) struktuuri. Võrreldes eelmise versiooniga vähenes CPU ajakulu kerneli/sched/ koodi kokkupanemisel 61% ja tegelik aeg 3.9% (2.95-lt 2.84 sekundile).
    • Kerneli koodil on lubatud kasutada 11. aastal avaldatud C2011 standardit. Varem pidi kernelile lisatud kood vastama ANSI C (C89) spetsifikatsioonile, mis moodustati 1989. aastal. 5.18 kerneli ehitusskriptides asendatakse suvand '—std=gnu89' valikuga '—std=gnu11 -Wno-shift-negative-value'. Kaaluti C17 standardi kasutamise võimalust, kuid sel juhul oleks vaja tõsta minimaalselt toetatud GCC versiooni, samas kui C11 toe kaasamine mahub GCC versioonile (5.1) kehtivate nõuetega.
    • Täiustatud ülesannete ajastamise jõudlus Zen mikroarhitektuuriga AMD protsessoritel, mis pakuvad iga kohaliku mälukanaliga sõlme jaoks mitut viimase taseme vahemälu (LLC). Uus versioon kõrvaldab LLC tasakaalustamatuse NUMA sõlmede vahel, mis tõi teatud tüüpi töökoormuse puhul kaasa jõudluse olulise suurenemise.
    • Laiendatud on tööriistu rakenduste jälgimiseks kasutajaruumis. Uus kerneli versioon lisab kasutajaprotsessidele võimaluse luua kasutajasündmusi ja kirjutada andmeid jälgimispuhvrisse, mida saab vaadata standardsete kerneli jälgimisutiliitide (nt ftrace ja perf) kaudu. Kasutaja ruumi jälgimise sündmused on isoleeritud kerneli jälgimissündmustest. Sündmuse olekut saab vaadata faili /sys/kernel/debug/tracing/user_events_status ning sündmuste registreerimist ja andmete salvestamist faili /sys/kernel/debug/tracing/user_events_data kaudu.
    • Lisatud mehhanism (sond) funktsioonikutsete jälgimiseks - fprobe. fprobe API põhineb ftrace'il, kuid seda piirab ainult võimalus funktsioonide sisenemis- ja väljumispunktidesse tagasihelistamise töötlejaid ühendada. Erinevalt kprobes'ist ja kretprobe'ist võimaldab uus mehhanism kasutada ühte käitlejat mitme funktsiooni jaoks korraga.
    • Vanemate ARM-protsessorite (ARMv4 ja ARMv5) tugi, mis ei ole varustatud mäluhaldusüksusega (MMU), on lõpetatud. Ilma MMUta ARMv7-M süsteemide tugi säilib.
    • Andes Technologies protsessorites kasutatava RISC-laadse NDS32 arhitektuuri tugi on lõpetatud. Kood eemaldati hoolduse puudumise ja peamise Linuxi tuuma NDS32 toe puudumise tõttu (ülejäänud kasutajad kasutavad riistvaratootjate spetsiaalseid kerneli versioone).
    • Vaikimisi on a.out käivitatava failivormingu toega kerneli ehitamine keelatud alfa- ja m68k-arhitektuuride jaoks, mis jätkavad selle vormingu kasutamist. Tõenäoliselt eemaldatakse peagi tuumast pärandvormingu a.out tugi täielikult. A.out-vormingu eemaldamise plaane on arutatud alates 2019. aastast.
    • PA-RISC arhitektuur pakub minimaalset tuge vDSO (virtuaalsed dünaamilised jagatud objektid) mehhanismile, mis pakub piiratud hulga süsteemikõnesid, mis on kasutajaruumis saadaval ilma konteksti vahetamiseta. vDSO tugi võimaldas rakendada mittekäivitava virnaga töötamise võimalust.
    • Lisatud on Inteli HFI (Hardware Feedback Interface) mehhanismi tugi, mis võimaldab riistvaral edastada kernelile teavet iga protsessori praeguse jõudluse ja energiatõhususe kohta.
    • Lisatud draiver Intel SDSi (Software-Defined Silicon) mehhanismile, mis võimaldab teil kontrollida lisafunktsioonide lisamist protsessorisse (näiteks spetsiaalsed juhised ja täiendav vahemälu). Idee seisneb selles, et kiipe saab tarnida madalama hinnaga lukustatud täiustatud funktsioonidega, mida saab seejärel “osteta” ja aktiveerida lisavõimalusi ilma kiipi riistvara vahetamata.
    • AMD HSMP (Host System Management Port) liidese toetamiseks on lisatud draiver amd_hsmp, mis võimaldab juurdepääsu protsessori haldusfunktsioonidele spetsiaalsete registrite komplekti kaudu, mis on ilmunud AMD EPYC serveriprotsessorites alates Fam19h põlvkonnast. Näiteks saate HSMP kaudu hankida andmeid energiatarbimise ja temperatuuri kohta, määrata sageduspiiranguid, aktiveerida erinevaid jõudluse suurendamise režiime ja hallata mäluparameetreid.
    • Asünkroonne I/O liides io_uring rakendab suvandit IORING_SETUP_SUBMIT_ALL, et registreerida helinapuhvris failideskriptorite komplekt, ja toimingut IORING_OP_MSG_RING, et saata signaal ühest helinapuhvrist teise helinapuhvrisse.
    • DAMOS (Data Access Monitoring-based Operation Schemes) mehhanism, mis võimaldab mälu vabastamist, võttes arvesse mälu juurdepääsu sagedust, on laiendanud võimalusi mälu toimingute jälgimiseks kasutaja ruumist.
    • Kolmas seeria plaastreid on integreeritud lehefooliode kontseptsiooni juurutamisega, mis meenutavad liitlehti, kuid millel on täiustatud semantika ja selgem töökorraldus. Tomesi kasutamine võimaldab kiirendada mälu haldamist mõnes kerneli alamsüsteemis. Pakutud paikades tõlgiti sisemälu haldamise funktsioonid fooliodeks, sealhulgas funktsiooni get_user_pages() variatsioonid. Pakub tuge suurte mahtude loomiseks etteloetud koodis.
    • Koostamissüsteem toetab nüüd keskkonnamuutujaid USERCFLAGS ja USERLDFLAGS, millega saab kompilaatorile ja linkerile edastada täiendavaid lippe.
    • eBPF-i alamsüsteemis pakub BTF-i (BPF-tüüpi vorming) mehhanism, mis pakub BPF-i pseudokoodis tüübikontrolli teavet, võimaluse lisada muutujatele märkusi, mis viitavad kasutajaruumis olevatele mälupiirkondadele. Märkused aitavad BPF-koodi kinnitussüsteemil paremini tuvastada ja kontrollida juurdepääsu mälule.
    • Laetud BPF-programmide salvestamiseks on välja pakutud uus mälujaotuse töötleja, mis võimaldab tõhusamalt kasutada mälu olukordades, kus laaditakse palju BPF-programme.
    • Süsteemikutsele madvise() on lisatud lipp MADV_DONTNEED_LOCKED, mis pakub tööriistu protsessimälu haldamise optimeerimiseks, mis täiendab olemasolevat MADV_DONTNEED lippu, mille kaudu saab kernelit eelnevalt teavitada eelseisvast mäluploki vabastamisest, st. et seda plokki pole enam vaja ja kernel saab seda kasutada. Erinevalt MADV_DONTNEED-st on lipu MADV_DONTNEED_LOCKED kasutamine lubatud RAM-i kinnitatud mälulehtede jaoks, mis madvise kutsumisel tõstetakse välja ilma nende kinnitatud olekut muutmata ja kui sellele järgneb juurdepääs blokeeringule ja lehe genereerimine viga,” tagastatakse köide säilinud. Lisaks on lisatud muudatus, mis võimaldab kasutada lippu MADV_DONTNEED HugeTLB suurte mälulehtedega.
  • Virtualiseerimine ja turvalisus
    • x86 arhitektuuri jaoks on lisatud Inteli IBT (indirect Branch Tracking) käsuvoo kaitsemehhanismi tugi, mis takistab ärakasutamise konstrueerimise tehnikate kasutamist, kasutades tagastusorienteeritud programmeerimistehnikaid (ROP, Return-Oriented Programming), milles exploit moodustatakse masinakäskude tükkide mälus juba eksisteeriva väljakutsete ahelana, mis lõppevad juhtnööri tagastuskäsuga (reeglina on need funktsioonide lõpud). Rakendatud kaitsemeetodi olemus on blokeerida kaudsed üleminekud funktsiooni kehasse, lisades funktsiooni algusesse spetsiaalse ENDBR-käsu ja lubades kaudse ülemineku teostamist ainult sellele käsule ülemineku korral (kaudne). kõne läbi JMP ja CALL peavad alati langema ENDBR käsule, mis on paigutatud funktsioonide algusesse).
    • Lubatud on funktsioonide memcpy(), memmove() ja memset() puhvripiiride rangem kontroll, mis tehakse kompileerimise ajal, kui režiim CONFIG_FORTIFY_SOURCE on lubatud. Lisatud muudatus taandub kontrollimisele, kas teadaoleva suurusega struktuuride elemendid väljuvad piiridest. Tuleb märkida, et rakendatud funktsioon võimaldab blokeerida kõik memcpy()-ga seotud kerneli puhvri ületäitmised, mis on tuvastatud vähemalt viimase kolme aasta jooksul.
    • Lisatud koodi teine ​​osa Pseudojuhuslike numbrite generaatori RDRAND uuendatud juurutamiseks, mis vastutab /dev/random ja /dev/urandom seadmete töö eest. Uus teostus on märkimisväärne selle poolest, et ühendab /dev/random ja /dev/urandom toimimise, lisab kaitse virtuaalmasinate käivitamisel juhuslike numbrite voos duplikaatide ilmumise eest ja lülitub üle SHA2 asemel BLAKE1s räsifunktsioonile. entroopia segamise operatsioonid. Muudatus parandas pseudojuhuslike arvude generaatori turvalisust, kõrvaldades probleemse SHA1 algoritmi ja kõrvaldades RNG initsialiseerimisvektori ülekirjutamise. Kuna BLAKE2s algoritm on jõudluses SHA1-st parem, mõjutas selle kasutamine jõudlust positiivselt.
    • ARM64 arhitektuuri jaoks on lisatud tugi uuele osuti autentimisalgoritmile - "QARMA3", mis on kiirem kui QARMA algoritm, säilitades samal ajal õige turbetaseme. Tehnoloogia võimaldab teil kasutada spetsiaalseid ARM64 juhiseid tagastusaadresside kontrollimiseks, kasutades digitaalallkirju, mis on salvestatud kursori enda kasutamata ülemistesse bittidesse.
    • ARM64 arhitektuuri jaoks on rakendatud koostamise tugi koos GCC 12-ga kaitserežiimi lisamisega funktsiooni tagastusaadressi ülekirjutamise vastu puhvri ületäitumise korral. Kaitsmise olemus seisneb tagastusaadressi salvestamises eraldi "vari" virna pärast juhtimise üleandmist funktsioonile ja selle aadressi hankimist enne funktsioonist väljumist.
    • Lisatud on uus võtmehoidja - "masin", mis sisaldab süsteemi omaniku võtmeid (MOK, masina omaniku võtmed), mida toetab shim alglaadur. Neid võtmeid saab kasutada alglaadimisjärgsel etapil laaditud kerneli komponentide (nt kerneli moodulite) digitaalseks allkirjastamiseks.
    • Eemaldatud TPM-ide asümmeetriliste privaatvõtmete tugi, mida pakuti TPM-i pärandversioonis, olid teadaolevad turvaprobleemid ja mida praktikas laialdaselt kasutusele ei võetud.
    • Lisatud andmete kaitse tüübiga size_t täisarvude ületäitumise eest. Kood sisaldab töötlejaid size_mul(), size_add() ja size_sub(), mis võimaldavad suurusi turvaliselt korrutada, liita ja lahutada tüübiga size_t.
    • Kerneli ehitamisel on lubatud lipud "-Warray-bounds" ja "-Wzero-length-bounds", mis kuvavad hoiatusi, kui indeks ületab massiivi piiri ja kui kasutatakse nullpikkusega massiive.
    • Virto-krüptoseade on lisanud RSA-algoritmi abil krüptimise toe.
  • Võrgu alamsüsteem
    • Võrgusildade juurutamisel on lisatud pordi sidumise režiimi (locked mode) tugi, milles kasutaja saab pordi kaudu liiklust saata ainult volitatud MAC-aadressilt. Lisatud on ka võimalus kasutada STP (Spanning Tree Protocol) protokolli oleku hindamiseks mitmeid struktuure. Varem sai VLAN-e kaardistada ainult otse STP-ga (1:1), kusjuures iga VLAN-i hallati iseseisvalt. Uus versioon lisab parameetri mst_enable, kui see on lubatud, juhib VLAN-ide olekut MST (Multiple Spanning Trees) moodul ja VLAN-ide sidumine võib vastata M:N mudelile.
    • Jätkati tööd tööriistade integreerimisel võrgupinu, et jälgida pakettide väljalangemise põhjuseid (põhjuskoodid). Põhjuskood saadetakse, kui paketiga seotud mälu vabastatakse ja see võimaldab selliseid olukordi nagu päisevigade tõttu pakettidest loobumine, rp_filter võltsimise tuvastamine, kehtetu kontrollsumma, mälu on otsas, IPSec XFRM reeglid käivituvad, vale järjekorranumber TCP jne.
    • Kasutajaruumist käivitatud BPF-programmidest on võimalik üle kanda võrgupakette režiimis BPF_PROG_RUN, milles BPF-programmid käivitatakse tuumas, kuid tagastavad tulemuse kasutajaruumi. Paketid edastatakse XDP (eXpress Data Path) alamsüsteemi abil. Toetatud on reaalajas pakettide töötlemise režiim, milles XDP protsessor saab võrgupaketid lennult võrgupinu või muudesse seadmetesse ümber suunata. Samuti on võimalik võrgupinu luua välise liikluse tarkvarageneraatoreid või asendada võrguraame.
    • Võrgu cgruppidega ühendatud BPF-programmide jaoks on välja pakutud abifunktsioonid, mis võimaldavad selgesõnaliselt määrata süsteemikõnede tagastusväärtuse, mis võimaldab edastada täielikumat teavet süsteemikõne blokeerimise põhjuste kohta.
    • XDP (eXpress Data Path) alamsüsteem on lisanud tuge mitmesse puhvrisse paigutatud killustatud pakettide jaoks, mis võimaldab töödelda Jumbo kaadreid XDP-s ja kasutada XDP_REDIRECTi jaoks TSO/GRO-d (TCP Segmentation Offload/Generic Receive Offload).
    • Võrgunimeruumide kustutamise protsess on oluliselt kiirendatud, mis oli nõutud mõnes suures ja suure liiklusmahuga süsteemis.
  • Оборудование
    • Amdgpu draiver sisaldab vaikimisi FreeSynci adaptiivset sünkroonimistehnoloogiat, mis võimaldab reguleerida ekraanil kuvatava teabe värskendussagedust, tagades mängude ja videote vaatamise ajal sujuva ja rebenematu pildi. Aldebarani GPU tugi on kuulutatud stabiilseks.
    • I915 draiver lisab toe Intel Alderlake N kiipidele ja Intel DG2-G12 diskreetsetele graafikakaartidele (Arc Alchemist).
    • Uus draiver toetab DP/eDP liideste suuremat bitikiirust ja lttprsi (Link-Training Tunable PHY Repeaters) kaablipikenduste tuge.
    • Alamsüsteemis drm (Direct Rendering Manager) draiverites armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen ja vc4 parameetrite tugi on lisatud nomodeset, mis võimaldab keelata videorežiimide vahetamise kerneli tasemel ja riistvaralise renderdamise kiirendustööriistade kasutamise, jättes alles vaid süsteemi kaadripuhvriga seotud funktsionaalsused.
    • Lisatud on tugi ARM SoС Qualcomm Snapdragon 625/632 (kasutatakse LG Nexus 5X ja Fairphone FP3 nutitelefonides), Samsung Exynos 850, Samsung Exynos 7885 (kasutatakse Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek (Presti6582) jaoks. tahvelarvuti 5008G), Microchip Lan3, Renesas RZ/G966LC, RZ/V2L, Tesla FSD, TI K2/AM3 ja i.MXRTxxxx.
    • Lisatud on tugi ARM-seadmetele ja -plaatidele firmadelt Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , Prestigio PMT5008 3G tahvelarvuti), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 ja OSMC Vero 4K+), Aspeed SPEed SPEED (A6-Marsboard) / Armada (Ctera C8 V3 ja V200 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT1MM, emCON-MX2M Mini, Toradex Verdin, Gateworks GW8).
    • Lisatud tugi helisüsteemidele ja koodekitele AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280/V2, TEXAS SC585/V234SL, Texas Instruments RXNUMX RXNUMX. Lisatud Intel AVS DSP kiibi helidraiveri esialgne juurutamine. Värskendati Intel ADL-i ja TegraXNUMX draiverite tuge ning tehti muudatusi, et parandada helituge Delli, HP, Lenovo, ASUSe, Samsungi ja Clevo seadmetes.

    Samal ajal moodustas Ladina-Ameerika Vaba Tarkvara Fond versiooni täiesti tasuta kernelist 5.18 - Linux-libre 5.18-gnu, mis on puhastatud püsivara elementidest ja draiveritest, mis sisaldavad mittevabu komponente või koodilõike, mille ulatus on piiratud. tootja poolt. Uus väljalase puhastab draiverid MIPI DBI paneelide, VPU Amphioni, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) ja Realtek 8852a/8852c, Intel AVS ja Texas Instruments TAS5805M helikiipide jaoks. DTS-faile puhastati ka erinevate AArch64 arhitektuuril põhinevate protsessoritega Qualcommi SoC-de jaoks. Värskendatud blob-puhastuskood AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Etherneti, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART draiverites ja alamsüsteemides.

Allikas: opennet.ru

Lisa kommentaar