Linux 5.15 branduolio leidimas

Po dviejų mėnesių kūrimo Linusas Torvaldsas pristatė Linux branduolio 5.15 versiją. Reikšmingi pakeitimai: nauja NTFS tvarkyklė su rašymo palaikymu, ksmbd modulis su SMB serverio įdiegimu, DAMON prieigos prie atminties stebėjimo posistemis, realiojo laiko užrakinimo primityvai, fs-verity palaikymas Btrfs, proceso_mrelease sistemos iškvietimas atsako į badą sistemų atminčiai, nuotolinio sertifikavimo modulis. dm-ima.

Naujoje versijoje yra 13499 1888 pataisymai iš 42 10895 kūrėjų, pataisos dydis yra 632522 MB (pakeitimai paveikė 299966 45 failus, buvo pridėta 5.15 14 kodo eilutės, ištrinta 14 6 eilutės). Apie 3% visų pakeitimų, pateiktų XNUMX versijoje, yra susiję su įrenginių tvarkyklėmis, maždaug XNUMX% pakeitimų yra susiję su aparatinės įrangos architektūroms būdingo kodo atnaujinimu, XNUMX% yra susiję su tinklo dėku, XNUMX% yra susiję su failų sistemomis ir XNUMX% yra susiję su vidiniais branduolio posistemiais.

Pagrindinės naujovės:

  • Disko posistemis, I/O ir failų sistemos
    • Branduolys priėmė naują NTFS failų sistemos diegimą, kurį atidarė Paragon Software. Naujoji tvarkyklė gali veikti rašymo režimu ir palaiko visas dabartinės NTFS 3.1 versijos funkcijas, įskaitant išplėstinius failų atributus, prieigos sąrašus (ACL), duomenų glaudinimo režimą, efektyvų darbą su tuščiomis failų erdvėmis (retai) ir pakeitimų atkūrimą iš žurnalas, skirtas atkurti vientisumą po gedimų.
    • Btrfs failų sistema palaiko fs-verity mechanizmą, kuris naudojamas skaidriai kontroliuoti atskirų failų vientisumą ir autentiškumą naudojant kriptografines maišas arba raktus, susietus su failais, saugomais metaduomenų srityje. Anksčiau fs-verity buvo prieinama tik Ext4 ir F2fs failų sistemoms.

      „Btrfs“ taip pat prideda prijungtų failų sistemų vartotojo ID susiejimo palaikymą (anksčiau buvo palaikoma FAT, ext4 ir XFS failų sistemoms). Ši funkcija leidžia palyginti konkretaus vartotojo failus prijungtame svetimame skaidinyje su kitu esamos sistemos vartotoju.

      Kiti Btrfs pakeitimai: greitesnis raktų įtraukimas į katalogo indeksą, siekiant pagerinti failų kūrimo našumą; galimybė dirbti raid0 su vienu įrenginiu ir raid10 su dviem (pavyzdžiui, perkonfigūruojant masyvą); parinktis „rescue=ibadroots“, kad būtų nepaisoma neteisingo masto medžio; „Siųsti“ operacijos pagreitis; blokavimo konfliktų mažinimas pervadinimo operacijų metu; galimybė naudoti 4K sektorius sistemose su 64K atminties puslapio dydžiu.

    • XFS sistemoje stabilizavosi galimybė failų sistemoje naudoti datas po 2038 m. Įdiegtas uždelsto inode išjungimo mechanizmas ir palaikymas uždelsto diegimo ir failo atributų pašalinimo atveju. Siekiant pašalinti problemas, buvo pašalinta galimybė išjungti disko kvotas jau prijungtiems skaidiniams (galite priverstinai išjungti kvotas, tačiau su jomis susiję skaičiavimai bus tęsiami, todėl norint visiškai jas išjungti, reikia iš naujo įdiegti).
    • EXT4 buvo atliktas darbas siekiant padidinti delalloc buferių rašymo ir našlaičių failų apdorojimo našumą, kurie ir toliau egzistuoja dėl to, kad jie lieka atidaryti, bet nėra susieti su katalogu. Atmetimo operacijų apdorojimas buvo perkeltas iš jbd2 kthread gijos, kad būtų išvengta operacijų su metaduomenimis blokavimo.
    • F2FS pridėjo parinktį "discard_unit=block|segment|section", kad susietų atmetimo operacijas (pažymėtų atlaisvintus blokus, kurie nebegali būti fiziškai saugomi) lygiuojant bloko, sektoriaus, segmento ar sekcijos atžvilgiu. Pridėtas įvesties / išvesties delsos pokyčių stebėjimo palaikymas.
    • EROFS (Extendable Read-Only File System) failų sistema prideda tiesioginį įvesties/išvesties palaikymą failams, išsaugotiems be suspaudimo, taip pat „fiemap“ palaikymą.
    • „OverlayFS“ įgyvendina teisingą „nekeičiamo“, „tik pridėti“, „sinchronizavimo“ ir „noatime“ prijungimo vėliavėlių tvarkymą.
    • NFS pagerino situacijų, kai NFS serveris nustoja reaguoti į užklausas, valdymą. Pridėta galimybė prijungti iš serverio, kuris jau naudojamas, bet pasiekiamas per kitą tinklo adresą.
    • Pradėtas ruošimasis perrašyti FSCACHE posistemį.
    • Pridėtas EFI skaidinių palaikymas su nestandartiniu GPT lentelių išdėstymu.
    • Fanotify mechanizmas įdiegia naują vėliavėlę FAN_REPORT_PIDFD, dėl kurios pidfd įtraukiamas į grąžinamus metaduomenis. Pidfd padeda tvarkyti pakartotinio PID naudojimo situacijas, kad būtų galima tiksliau identifikuoti procesus, pasiekiančius stebimus failus (pidfd yra susietas su konkrečiu procesu ir nesikeičia, o PID gali būti susietas su kitu procesu, kai baigiasi dabartinis su tuo PID susietas procesas).
    • Pridėta galimybė pridėti prijungimo taškus prie esamų bendrinamų grupių prie move_mount() sistemos iškvietimo, kuri išsprendžia proceso būsenos išsaugojimo ir atkūrimo CRIU problemas, kai izoliuotuose konteineriuose yra bendrinamos kelios prijungimo vietos.
    • Pridėta apsauga nuo paslėptų lenktynių sąlygų, kurios gali sukelti failų sugadinimą atliekant talpyklos nuskaitymą apdorojant failo tuštumas.
    • Privalomas (privalomas) failų užrakinimas, įgyvendinamas blokuojant sistemos iškvietimus, dėl kurių keičiamas failas, buvo nutrauktas. Dėl galimų lenktynių sąlygų šios spynos buvo laikomos nepatikimomis ir prieš daugelį metų buvo nebenaudojamos.
    • Buvo pašalintas „LightNVM“ posistemis, kuris leido tiesiogiai pasiekti SSD diską, apeinant emuliacijos sluoksnį. „LightNVM“ prarado prasmę po to, kai atsirado NVMe standartai, numatantys zonavimą (ZNS, Zoned Namespace).
  • Atminties ir sistemos paslaugos
    • Įdiegtas DAMON (Data Access MONitor) posistemis, leidžiantis stebėti veiklą, susijusią su duomenų prieiga RAM atmintyje, atsižvelgiant į pasirinktą vartotojo erdvėje vykdomą procesą. Posistemis leidžia analizuoti, kurias atminties sritis procesas pasiekė viso savo veikimo metu, o kurios atminties sritys liko nepanaudotos. DAMON pasižymi maža procesoriaus apkrova, mažu atminties suvartojimu, dideliu tikslumu ir nuspėjamomis pastoviomis papildomomis sąnaudomis, nepriklausomai nuo dydžio. Posistemį gali naudoti tiek branduolys, kad optimizuotų atminties valdymą, tiek naudotojų erdvės paslaugos, kad suprastų, ką tiksliai veikia procesas, ir optimizuotų atminties naudojimą, pavyzdžiui, atlaisvintų perteklinę atmintį sistemai.
    • Proceso_mrelease sistemos iškvietimas buvo įdiegtas siekiant pagreitinti proceso, kuris užbaigia jo vykdymą, atminties išlaisvinimo procesą. Įprastomis aplinkybėmis išteklių atleidimas ir proceso nutraukimas nėra akimirksniu ir gali būti atidėtas dėl įvairių priežasčių, trukdančių vartotojo erdvės atminties ankstyvojo reagavimo sistemoms, tokioms kaip oomd (pateikiama systemd) ir lmkd (naudojama Android). Iškviečiant process_mrelease, tokios sistemos gali labiau nuspėti, kad atgautų atmintį iš priverstinių procesų.
    • Iš PREEMPT_RT branduolio šakos, kuri kuria realiojo laiko operacijų palaikymą, buvo perkelti primityvų variantai užraktų organizavimui mutex, ww_mutex, rw_semaphore, spinlock ir rwlock, pagrįsti RT-Mutex posistemiu. Į SLUB plokščių skirstytuvą buvo įtraukti pakeitimai, siekiant pagerinti veikimą PREEMPT_RT režimu ir sumažinti pertraukimų poveikį.
    • SCHED_IDLE užduočių planuotojo atributo palaikymas buvo pridėtas prie cgroup, todėl galite pateikti šį atributą visiems grupės, įtrauktos į konkrečią cgroup, procesams. Tie. šie procesai bus vykdomi tik tada, kai sistemoje nebus jokių kitų užduočių, kurios bus vykdomos. Skirtingai nuo atributo SCHED_IDLE nustatymo kiekvienam procesui atskirai, kai SCHED_IDLE susiejama su cgrupe, pasirenkant vykdytiną užduotį atsižvelgiama į santykinį užduočių svorį grupėje.
    • Atminties suvartojimo apskaitos sistemoje cgroup mechanizmas buvo išplėstas suteikiant galimybę sekti papildomas branduolio duomenų struktūras, įskaitant sukurtas apklausai, signalų apdorojimui ir vardų erdvėms.
    • Pridėtas asimetrinio užduočių susiejimo su procesoriaus branduoliais planavimo palaikymas architektūrose, kuriose kai kurie CPU leidžia vykdyti 32 bitų užduotis, o kai kurie veikia tik 64 bitų režimu (pavyzdžiui, ARM). Naujasis režimas leidžia planuojant 32 bitų užduotis atsižvelgti tik į CPU, kurie palaiko 32 bitų užduotis.
    • io_uring asinchroninė įvesties / išvesties sąsaja dabar palaiko failų atidarymą tiesiogiai fiksuoto failo indekso lentelėje, nenaudojant failo deskriptoriaus, o tai leidžia žymiai pagreitinti kai kurių tipų operacijas, tačiau prieštarauja tradiciniam Unix procesui, kai naudojami failų deskriptoriai. norėdami atidaryti failus.

      io_uring BIO (Block I/O Layer) posistemiui įdiegia naują perdirbimo mechanizmą ("BIO perdirbimą"), kuris sumažina vidinės atminties valdymo proceso išlaidas ir padidina apdorojamų I/O operacijų skaičių per sekundę maždaug 10 %. . io_uring taip pat prideda palaikymą sistemos iškvietimams mkdirat(), symlinkat() ir linkat().

    • BPF programoms įdiegta galimybė prašyti ir apdoroti laikmačio įvykius. Pridėtas UNIX lizdų iteratorius ir įdiegta galimybė gauti ir nustatyti setsockopt lizdų parinktis. BTF savivartis dabar palaiko įvestus duomenis.
    • NUMA sistemose su skirtingų tipų atmintimi, kurios našumas skiriasi, kai išeikvojama laisvos vietos, iškeldinti atminties puslapiai iš dinaminės atminties (DRAM) perkeliami į lėtesnę nuolatinę atmintį (Pastovi atmintis), o ne ištrinti šiuos puslapius. Testai parodė, kad tokia taktika paprastai pagerina tokių sistemų našumą. NUMA taip pat suteikia galimybę paskirstyti atminties puslapius procesui iš pasirinkto NUMA mazgų rinkinio.
    • ARC architektūrai įdiegtas trijų ir keturių lygių atminties puslapių lentelių palaikymas, o tai dar labiau leis palaikyti 64 bitų ARC procesorius.
    • S390 architektūrai įdiegta galimybė naudoti KFENCE mechanizmą, kad aptiktų klaidas dirbant su atmintimi, taip pat pridėtas KCSAN lenktynių būklės detektoriaus palaikymas.
    • Pridėtas palaikymas indeksuojant pranešimų sąrašą, išvestą naudojant printk(), leidžiantį gauti visus tokius pranešimus vienu metu ir stebėti vartotojo erdvės pokyčius.
    • mmap() pašalino VM_DENYWRITE parinkties palaikymą, o branduolio kodas buvo pašalintas iš MAP_DENYWRITE režimo naudojimo, todėl sumažėjo situacijų, dėl kurių blokuojamas įrašymas į failą su ETXTBSY klaida, skaičius.
    • Į sekimo posistemį buvo įtrauktos naujos patikros, „Įvykių zondų“, kurias galima prijungti prie esamų sekimo įvykių, apibrėžiant savo išvesties formatą.
    • Kuriant branduolį naudojant Clang kompiliatorių, dabar naudojamas numatytasis surinkėjas iš LLVM projekto.
    • Vykdant projektą, skirtą pašalinti kodo branduolį, dėl kurio kompiliatorius pateikia įspėjimus, buvo atliktas eksperimentas, kai pagal numatytuosius nustatymus įjungtas „-Klaidos“ režimas, kuriame kompiliatoriaus įspėjimai apdorojami kaip klaidos. Ruošdamasis 5.15 versijai, Linus pradėjo priimti tik pakeitimus, dėl kurių nebuvo įspėjimų kuriant branduolį ir įjungė kūrimą naudojant „-Werror“, bet tada sutiko, kad toks sprendimas buvo per ankstyvas ir atidėtas „-Werror“ įjungimas pagal numatytuosius nustatymus. . „-Werror“ vėliavėlės įtraukimas surinkimo metu valdomas naudojant WERROR parametrą, kuris pagal nutylėjimą nustatytas į COMPILE_TEST, t.y. Kol kas jis įgalintas tik bandomiesiems versijoms.
  • Virtualizacija ir saugumas
    • Prie Device Mapper (DM) buvo pridėtas naujas dm-ima tvarkytuvas, kuriame įdiegtas nuotolinio sertifikavimo mechanizmas, pagrįstas IMA (Integrity Measurement Architecture) posistemiu, kuris leidžia išorinei tarnybai patikrinti branduolio posistemių būseną, kad būtų užtikrintas jų autentiškumas. . Praktiškai dm-ima leidžia kurti saugyklas naudojant Device Mapper, susietas su išorinėmis debesų sistemomis, kuriose paleistos DM tikslinės konfigūracijos galiojimas tikrinamas naudojant IMA.
    • prctl() įdiegia naują parinktį PR_SPEC_L1D_FLUSH, kurią įjungus, branduolys išplauna pirmojo lygio (L1D) talpyklos turinį kiekvieną kartą, kai įvyksta konteksto perjungimas. Šis režimas leidžia pasirinktinai svarbiausiems procesams įdiegti papildomą apsaugą nuo šoninių kanalų atakų, atliekamų siekiant nustatyti duomenis, kurie nusėdo talpykloje dėl spėliotino instrukcijų vykdymo procesoriaus pažeidžiamumų. PR_SPEC_L1D_FLUSH įjungimo kaina (neįjungta pagal numatytuosius nustatymus) yra didelė našumo nuobauda.
    • Galima sukurti branduolį prie GCC pridedant vėliavėlę „-fzero-call-used-regs=used-gpr“, kuri užtikrina, kad visi registrai būtų iš naujo nustatyti į nulį prieš grąžinant valdymą iš funkcijos. Ši parinktis leidžia apsisaugoti nuo informacijos nutekėjimo iš funkcijų ir 20 % sumažinti blokų, tinkamų kurti ROP (grįžtamojo programavimo) programėles, skaičių.
    • Įdiegta galimybė kurti ARM64 architektūros branduolius Hyper-V hipervizoriaus klientų pavidalu.
    • Siūlomas naujas tvarkyklių kūrimo karkasas „VDUSE“, leidžiantis diegti virtualių blokų įrenginius vartotojo erdvėje ir naudoti Virtio kaip priėjimo iš svečių sistemų transportą.
    • Pridėta Virtio tvarkyklė I2C magistralei, leidžianti emuliuoti I2C valdiklius paravirtualizacijos režimu naudojant atskiras užpakalines programas.
    • Pridėta Virtio tvarkyklė gpio-virtio, kad svečiai galėtų pasiekti pagrindinio kompiuterio teikiamas GPIO linijas.
    • Pridėta galimybė apriboti įrenginių tvarkyklių su DMA palaikymu prieigą prie atminties puslapių sistemose be I/O MMU (atminties valdymo bloko).
    • KVM hipervizorius turi galimybę rodyti statistiką tiesinių ir logaritminių histogramų pavidalu.
  • Tinklo posistemis
    • Ksmbd modulis buvo pridėtas prie branduolio, įdiegus failų serverį naudojant SMB3 protokolą. Modulis papildo SMB kliento diegimą, kuris anksčiau buvo prieinamas branduolyje, ir, skirtingai nei SMB serveris, veikiantis vartotojo erdvėje, yra efektyvesnis našumo, atminties suvartojimo ir integracijos su pažangiomis branduolio galimybėmis požiūriu. Ksmbd reklamuojamas kaip didelio našumo, įterptajam paruoštas Samba plėtinys, kuris prireikus integruojamas su Samba įrankiais ir bibliotekomis. ksmbd galimybės apima patobulintą paskirstytos failų talpyklos technologijos (SMB nuomos) palaikymą vietinėse sistemose, o tai gali žymiai sumažinti srautą. Ateityje jie planuoja pridėti RDMA („smbdirect“) ir protokolų plėtinių palaikymą, susijusį su šifravimo ir tikrinimo naudojant skaitmeninius parašus patikimumo didinimu.
    • CIFS klientas nebepalaiko NTLM ir silpnesnių DES pagrįstų autentifikavimo algoritmų, naudojamų SMB1 protokole.
    • Daugialypės siuntimo palaikymas įgyvendinamas diegiant tinklo tiltus, skirtus vlan.
    • Susiejimo tvarkyklė, naudojama tinklo sąsajoms sujungti, papildė XDP (eXpress Data Path) posistemio palaikymą, kuris leidžia manipuliuoti tinklo paketais prieš juos apdorojant „Linux“ branduolio tinklo krūvoje.
    • „Mac80211“ belaidis dėklas palaiko 6 GHZ STA (Special Temporary Authorization) LPI, SP ir VLP režimuose, taip pat galimybę nustatyti atskirą TWT (Target Wake Time) prieigos taško režimu.
    • Pridėtas MCTP (valdymo komponentų transportavimo protokolo) palaikymas, naudojamas sąveikai tarp valdymo valdiklių ir susijusių įrenginių (pagrindinių procesorių, išorinių įrenginių ir kt.).
    • Integracija į MPTCP (MultiPath TCP) šerdį, TCP protokolo plėtinį, skirtą organizuoti TCP ryšio veikimą ir tuo pačiu metu pristatyti paketus keliais maršrutais per skirtingas tinklo sąsajas, susijusias su skirtingais IP adresais. Naujasis leidimas prideda adresų palaikymą „fullmesh“ režimu.
    • Prie tinklo filtro buvo pridėtos SRv6 (Segment Routing IPv6) protokole įterptų tinklo srautų tvarkyklės.
    • Pridėtas „Unix“ srautinio perdavimo lizdų „sockmap“ palaikymas.
  • įranga
    • Amdgpu tvarkyklė palaiko Cyan Skillfish APU (su Navi 1x GPU). „Yellow Carp“ APU dabar palaiko vaizdo kodekus. Patobulintas Aldebaran GPU palaikymas. Pridėta naujų žemėlapio identifikatorių, pagrįstų GPU Navi 24 "Beige Goby" ir RDNA2. Siūlomas patobulintas virtualių ekranų (VKMS) diegimas. Įdiegtas AMD Zen 3 lustų temperatūros stebėjimo palaikymas.
    • amdkfd tvarkyklė (skirta atskiriems GPU, pvz., „Polaris“) įgyvendina bendrinamą virtualiosios atminties tvarkyklę (SVM, bendrinamą virtualią atmintį), pagrįstą HMM (heterogeninio atminties valdymo) posistemiu, kuris leidžia naudoti įrenginius su savo atminties valdymo blokais (MMU). , atminties valdymo blokas), kuris gali pasiekti pagrindinę atmintį. Visų pirma, naudodami HMM, galite organizuoti bendrą adresų erdvę tarp GPU ir procesoriaus, kuriame GPU gali pasiekti pagrindinę proceso atmintį.
    • „Intel“ vaizdo plokščių i915 tvarkyklė išplečia TTM vaizdo atminties tvarkyklės naudojimą ir apima galimybę valdyti energijos suvartojimą pagal GuC (Graphics micro Controller). Pradėtas ruoštis Intel ARC Alchemist vaizdo plokštės ir Intel Xe-HP GPU palaikymui.
    • Naujoji tvarkyklė įgyvendina eDP plokščių apšvietimo valdymą naudojant DPCD (DisplayPort Configuration Data).
    • Pridėtas Adreno 7c Gen 3 ir Adreno 680 GPU palaikymas prie msm tvarkyklės.
    • IOMMU tvarkyklė įdiegta Apple M1 lustui.
    • Pridėta garso tvarkyklė sistemoms, pagrįstoms AMD Van Gogh APU.
    • Realtek R8188EU tvarkyklė buvo įtraukta į sustojimo šaką, kuri pakeitė seną tvarkyklės versiją (rtl8188eu), skirtą Realtek RTL8188EU 802.11 b/g/n belaidžiams lustams.
    • Meta (Facebook) sukurtai PCIe plokštei su įdiegtu miniatiūriniu atominiu laikrodžiu ir GNSS imtuvu yra įtraukta ocp_pt tvarkyklė, kuria galima organizuoti atskirų tikslaus laiko sinchronizavimo serverių darbą.
    • Pridėtas Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle išmaniųjų telefonų palaikymas.
    • Pridėtas ARM SoС ir NVIDIA Jetson TX2 NX kūrėjų rinkinio, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm RDM636 Snapdra8150/SSM3, HDM2 Snapdra3/SSM2. plokštės -913G/M2600e-4G, Marvell CN418x, ASpeed ​​​​AST2264 (Facebook Cloudripper, Elbert ir Fuji serverio plokštės), XNUMXKOpen STiHXNUMX-bXNUMX.
    • Pridėtas Gopher 2b LCD plokščių palaikymas, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0B9341B3300, EJ33NA 20ili7430ATk2401. NAXNUMXXCXNUMX, Samsung DBXNUMX, WideChips WSXNUMX.
    • Pridėta LiteETH tvarkyklė, palaikanti eterneto valdiklius, naudojamus LiteX programinės įrangos SoC (skirta FPGA).
    • Prie USB garso tvarkyklės buvo pridėta mažos delsos parinktis, skirta valdyti minimalios delsos režimo veikimą. Taip pat pridėta quirk_flags parinktis, skirta konkrečiam įrenginiui perduoti.

Tuo pačiu metu Lotynų Amerikos laisvosios programinės įrangos fondas sukūrė visiškai nemokamo branduolio 5.15 versiją - Linux-libre 5.15-gnu, išvalyta nuo programinės aparatinės įrangos elementų ir tvarkyklių, kuriuose yra nelaisvų komponentų ar kodo skyrių, kurių apimtis yra ribota. gamintojo. Naujasis leidimas įgyvendina pranešimo išvestį į žurnalą apie valymo užbaigimą. Paketų generavimo naudojant mkspec problemos buvo ištaisytos, patobulintas snap paketų palaikymas. Pašalinti kai kurie įspėjimai, rodomi apdorojant firmware.h antraštės failą. Leidžiama išvesti kai kurių tipų įspėjimus („papildomų argumentų formatas“, komentarai, nenaudojamos funkcijos ir kintamieji), kai kuriama „-Klaidos“ režimu. Pridėtas gehc-achc tvarkyklės valymas. Atnaujintas blob valymo kodas tvarkyklėse ir posistemėse adreno, btusb, btintel, brcmfmac, aarch64 qcom. Nutrauktas tvarkyklių prizm54 (pašalintas) ir rtl8188eu (pakeistas r8188eu) valymas.

Šaltinis: opennet.ru

Добавить комментарий