Linux kernel release 7.0

Na het twee maanden durende ontwikkelingsproces heeft Linus Torvalds de release van de Linux-kernel 7.0 gepresenteerd. Onder de meest opvallende veranderingen bevinden zich: regels voor het gebruik van AI-assistenten, de vertaling van Rust naar de kernfunctionaliteiten, een verbeterde swapprestaties, de standaardactivatie van de PREEMPT_LAZY-modus, ondersteuning voor filters voor io_uring-operaties, een nieuw bestandssysteem Nullfs, de fserror-infrastructuur, monitoringtools voor XFS, ondersteuning voor remapping in Btrfs, de standaardactivatie van NFS 4.1, integratie van de post-kwantum cryptografie-algoritme ML-DSA, activering van AccECN in het netwerksysteem en initiële ondersteuning voor WiFi 8.

Nummer 7.0 is toegewezen omdat er in de 6.x-tak voldoende releases zijn verzameld om het eerste cijfer van het versienummer te veranderen (ten tijde van de release 6.0 werd deze direct na 5.19 gevormd). De wijziging van de nummering gebeurt om esthetische redenen en is een formele stap, die de ongemakken door het samenvoegen van een groot aantal releases in de serie wegnneemt.

In de nieuwe versie zijn 15624 correcties door 2477 ontwikkelaars opgenomen; de patch-grootte bedraagt 56 MB (de wijzigingen hebben betrekking op 18053 bestanden, met 704060 toegevoegde code regels en 278132 verwijderde regels). In de vorige release waren er 15657 correcties door 2237 ontwikkelaars, en de patch-grootte was 52 MB. Ongeveer 51% van alle wijzigingen in 7.0 heeft betrekking op stuurprogramma's voor apparaten, ongeveer 11% heeft betrekking op het bijwerken van architectuur-specifieke code, 14% heeft betrekking op de netwerkstack, 5% op bestandssystemen en 3% op interne subsystemen van de kernel.

Belangrijkste vernieuwingen in de kernel 7.0 (1, 2, 3):

  • Opslagsubsystemen, invoer/uitvoer en bestandssystemen
    • De fserror-infrastructuur is geïmplementeerd en er is een API toegevoegd voor het verkrijgen van informatie over invoer/uitvoer-fouten en metadata-corruptie bij bestandsverwerkingen. De voorgestelde infrastructuur uniformiseert in bestandssystemen de overdracht van foutinformatie naar de gebruikersruimte via het fsnotify-mechanisme.
    • In XFS zijn nieuwe mogelijkheden toegevoegd voor het monitoren van de status van het bestandssysteem vanuit de gebruikersruimte. Een ioctl-operatie genaamd XFS_IOC_HEALTH_MONITOR is voorgesteld, waarmee een bestandsdescriptor wordt teruggegeven die informatie biedt over storingen die verband houden met metadata-corruptie of invoer/uitvoer-fouten, en het mogelijk maakt om de veranderingen in de status van het bestandssysteem, zoals ontkoppeling en afsluiting, te volgen. Daarnaast is er een achtergrondproces xfs_healer voorgesteld, dat via systemd wordt beheerd en gebeurtenissen over de status van het bestandssysteem uit de gebruikersruimte verwerkt en indien nodig automatisch herstelprocedures opstart.
    • In het Btrfs-bestandssysteem is experimentele ondersteuning voor de structuur 'remap tree' toegevoegd, die in de toekomst kan worden gebruikt als een tussenlaag bij invoer- en uitvoerbewerkingen. De essentie van deze nieuwe mogelijkheid is dat na het verplaatsen van gegevens op de opslag in plaats van alle gerelateerde structuren bij te werken, oude en nieuwe adressen van gegevens in de aanvullende structuur 'remap tree' worden opgeslagen, waarna de adressen bij toegang tot de gegevens worden vervangen. Deze nieuwe benadering wordt gepresenteerd als betrouwbaarder en flexibeler, en vereenvoudigt bovendien de verdere uitbreiding van de functionaliteit van Btrfs.
    • In Btrfs is ondersteuning voor directe invoer/uitvoer geïmplementeerd in situaties waar de blokgrootte de paginagrootte in het systeem overschrijdt.
    • De nieuwe bestandssysteem 'Nullfs' is opgenomen, dat kan worden gebruikt als een placeholder voor het rootbestandssysteem. Het Nullfs-bestandssysteem is altijd leeg, bevat geen gegevens en ondersteunt geen wijzigingen. Het doel van Nullfs is om als initiële bestandssysteem te worden gebruikt om het opstartproces van het systeem te vereenvoudigen — bovenop Nullfs worden andere bestandssystemen gemonteerd en wordt de systeemaanroep pivot_root() gebruikt om het rootbestandssysteem te schakelen in plaats van de inhoud van initramfs te wissen en het bijbehorende rootbestandssysteem te gebruiken.
    • De update van de informatie over de wijzigingstijd van bestanden is geïmplementeerd in een niet-blokkerende modus. Eerder gaf de aanroep file_update_time_flags() met de vlag IOCB_NOWAIT de fout '−EAGAIN' terug, wat het gebruik van directe schrijfoperaties in niet-blokkerende modus verhinderde.
    • In bestandssystemen is de ondersteuning voor lease-locks als afzonderlijk in te schakelen optie omgezet. Standaard wordt een dergelijk mechanisme nu niet geactiveerd vanwege problemen met bestandssystemen die oorspronkelijk niet waren ontworpen voor gebruik hiervan. Bijvoorbeeld, de bestandssystemen 9p en cephfs ondersteunen het niet.
    • In het EROFS-bestandssysteem (Extendable Read-Only File System), dat bestemd is voor gebruik op partities die alleen-lezen toegankelijk zijn, wordt standaard het LZMA-algoritme voor compressie gebruikt. Optioneel zijn de algoritmen DEFLATE en Zstandard beschikbaar, die niet langer als experimenteel zijn gemarkeerd. Er is gezamenlijke toegang tot pagina-cache-entries voor identieke bestanden in verschillende EROFS-bestandssystemen geïmplementeerd.
    • De laptopmodus, die het energieverbruik bespaarde door schrijfoperaties op de harde schijf uit te stellen en te combineren om de tijd dat de schijf in de slaapstand was te verlengen en het aantal ontwakingen te verminderen, is verwijderd. Deze modus is niet meer relevant omdat in moderne mobiele apparaten harde schijven zijn vervangen door solid-state schijven.
    • Het F2FS-bestandssysteem is overgeschakeld op het gebruik van grote geheugenpagina's (large folios).
    • De ontwikkeling van de ntfs3-driver, ontwikkeld door Paragon Software, is hersteld. Ondersteuning voor bestandsoperaties op basis van iomap is toegevoegd, de llseek-opties SEEK_DATA/SEEK_HOLE zijn geïmplementeerd, en de delalloc-modus voor uitgestelde bloktoewijzing is toegevoegd. Ondertussen is op de mailinglijst van kernelontwikkelaars in februari goedgekeurd om een nieuwe implementatie van NTFS — ntfsplus, ontwikkeld ter vervanging van ntfs3, op te nemen in een van de toekomstige kernelversies.
    • De versie 4.1 van het NFS-protocol (CONFIG_NFS_V4_1) is standaard ingeschakeld bij de bouw. Er is een exportblokkering via NFS voor gespecialiseerde pseudo-bestandssystemen, zoals pidfs en nsfs, voorzien. In NFSD is een experimentele mogelijkheid van POSIX ACL-ondersteuning geïmplementeerd en is ondersteuning voor dynamische aanpassing van de thread-pool toegevoegd afhankelijk van de belasting.
  • Geheugen en systeemdiensten
    • Officiële regels voor het gebruik van AI-assistenten en de opname van automatisch gegenereerde inhoud in de kernel zijn goedgekeurd. Bij de overdracht van gegenereerde code moet deze worden gemarkeerd door de gebruikte AI-assistent met de tag „Assisted-by” aan te geven. AI-assistenten mogen de tag „Signed-off-by” niet toevoegen — de persoon die de patch indient, wordt als auteur beschouwd en is verantwoordelijk voor de ingediende wijziging en de kwaliteit ervan. Ontwikkelaars wordt opgedragen om handmatige beoordeling van de via AI verkregen code uit te voeren en de naleving van de licentievereisten te controleren.
    • Ondersteuning voor Rust is van experimentele functies naar de kernmogelijkheden overgebracht. Ondersteuning voor Rust is standaard niet ingeschakeld en leidt niet tot het opnemen van Rust in de verplichte bouwafhankelijkheden van de kernel.
    • De integratie in de kern van het 'Swap Table'-mechanisme is voltooid, waardoor de prestaties van het swapbeheer verbeterd zijn. De versnelling wordt bereikt door de concurrentie om toegang tot de swap-cache te verminderen, een efficiëntere zoekopdracht in de cache en het verlagen van fragmentatie. De backend op basis van Swap Table wordt gebruikt voor caching in plaats van de XArray backend en stelde, tijdens de redis-benchmark test met BGSAVE, in staat om het aantal verwerkte verzoeken met 22% te verhogen.
    • Ondersteuning voor de nieuwe Thread Safety Analysis-extensie, geïntroduceerd in Clang 22, is toegevoegd. Deze stelt in staat om potentiële racecondities en fouten door onjuiste lockinstellingen tijdens de compilatie te identificeren. De extensie biedt een reeks attributen, zoals GUARDED_BY(…), REQUIRES(…), RELEASE(…) en ACQUIRE(…), waarmee functies die door locks worden omringd kunnen worden gemarkeerd en de toepassingscontext van locks kan worden gedefinieerd. Tijdens de compilatie wordt de correctheid van de toepassing van synchronisatieprimitieven, zoals mutexen, gecontroleerd op basis van de activiteit of inactiviteit van de bijbehorende context.
    • De systeemoproep open_tree heeft de OPEN_TREE_NAMESPACE-vlag toegevoegd om het instellen van geïsoleerde containers te vereenvoudigen en de opstarttijd van containers op systemen met veel mount points te versnellen. In lijn met OPEN_TREE_CLONE kopieert de nieuwe vlag alleen de gespecificeerde boom van mount points, maar retourneert een bestandshandle in een nieuwe namespace van mount points waarin de gekopieerde boom bovenop de kopie van het echte rootbestandssysteem wordt gemonteerd. De OPEN_TREE_NAMESPACE-vlag is vereist om te voorkomen dat de operaties unshare(CLONE_NEWNS) en pivot_root() voor het maken van containers apart moeten worden uitgevoerd.
    • In de systeemoproep rseq is een mechanisme voor tijdsquantumuitbreiding (time slice) toegevoegd, waarmee extra processoruren kunnen worden verkregen voor ononderbroken uitvoering van kritieke secties. Het idee is om te voorkomen dat de taakplanner kritieke secties met een ingestelde lock onderbreekt, wat leidt tot overdracht van controle naar andere threads die de resources gebruiken, waarbij de lock nog steeds is ingesteld. De uitbreiding van het tijdsquantum gebeurt zonder extra overhead, maar ook zonder de strikte garanties die bij volledige prioriteitsregulatie worden geboden.
    • Voor de architecturen arm64, loongarch, powerpc, riscv, s390 en x86 is de pre-emptiemodus in de standaard scheduler gewijzigd van PREEMPT_NONE naar PREEMPT_LAZY. Het aantal mogelijke modi is verminderd van vier naar twee — PREEMPT_FULL en PREEMPT_LAZY (de modi PREEMPT_NONE en PREEMPT_VOLUNTARY blijven alleen behouden voor architecturen die PREEMPT_FULL en PREEMPT_LAZY niet ondersteunen). De PREEMPT_LAZY-modus past het volledige pre-emptiemodel (PREEMPT_FULL) toe voor realtime-taken (RR/FIFO/DEADLINE), maar stelt de pre-emptie van reguliere taken (SCHED_NORMAL) uit tot de tickgrens. Deze vertraging vermindert het aantal gevallen van pre-emptie van lockhouders, wat de prestaties dichter bij die van configuraties met een vrijwillig pre-emptiemodel (voluntary preemption) brengt. Dit betekent dat PREEMPT_LAZY de mogelijkheden van volledige pre-emptie voor realtime-taken behoudt, terwijl het de prestatieafname voor reguliere taken minimaliseert.

      De invoering van PREEMPT_LAZY heeft geleid tot een ernstige regressie, die de prestaties van PostgreSQL op ARM64-systemen met de helft heeft verminderd. Om de prestatieafname te verhelpen, wordt PostgreSQL-ontwikkelaars aangeraden om de PR_RSEQ_SLICE_EXTENSION-optie in te schakelen om de kans op pre-emptie van de lockhouder te verminderen.

    • De overdracht van wijzigingen uit de Rust-for-Linux-tak, die verband houden met het gebruik van de Rust-taal als tweede taal voor de ontwikkeling van stuurprogramma's en kernelmodules, is voortgezet. Dankzij de eerder geïntegreerde bibliotheek "syn", die het schrijven van complexe macro's vereenvoudigt, is het gelukt om de grootte van de Rust-code in de kernel te verkleinen door de definities van bestaande procedurele macro's te vereenvoudigen. De mogelijkheden van de bibliotheken kernel, macros en pin-init zijn uitgebreid.
    • Er is een optie toegevoegd aan het io_uring-systeem voor asynchrone invoer/uitvoer om niet-circulaire wachtrijen (non-circular submission queue) te gebruiken, die efficiënter in het cachegeheugen worden bewaard wanneer een verzoek sneller wordt uitgevoerd dan de terugkeer uit de systeemaanroep.
    • In het eBPF-subsysteem is voor het mechanisme BTF (BPF Type Format), dat informatie biedt voor typevalidatie in BPF-pseudocode, een binaire zoekmethode geïmplementeerd voor het vinden van foutopsporingsinformatie, wat de efficiëntie van het laden van BPF-programma's heeft verhoogd. In eBPF is ondersteuning toegevoegd voor impliciete argumenten bij het aanroepen van kfunc (kernfuncties die beschikbaar zijn voor gebruik in BPF-programma's), gedefinieerd met de vlag KF_IMPLICIT_ARGS.
    • De ondersteuning voor de initiële RAM-schijf (initrd) gebaseerd op linuxrc is verwijderd, welke lange tijd als verouderd is beschouwd. De resterende implementaties van initrd zullen in 2027 worden verwijderd. In plaats van initrd dient initramfs te worden gebruikt (het verschil is dat initrd de initiële opstartomgeving in een schijfafbeelding plaatst, terwijl initramfs deze in het bestandssysteem plaatst).
    • In het blokapparaat zram, dat wordt gebruikt voor de gecomprimeerde opslag van de wisselruimte in het geheugen, is de logica voor het werken met gecomprimeerde gehepagestructuren gewijzigd wanneer optioneel gegevens naar permanente opslag worden verplaatst als het beschikbare RAM vol is. Voorheen werden de gehepagestructuren uitgepakt voordat ze op het fysieke medium werden geschreven, maar nu worden ze gecomprimeerd opgeslagen zoals ze zijn, wat de belasting van de CPU vermindert en energie bespaart bij autonoom gebruik.
    • In de utility timerlat, die is ontworpen voor het meten van vertragingen bij het werken van de taakplanner, is de optie "--bpf-action" toegevoegd om BPF-programma's uit te voeren wanneer een bepaalde drempel wordt overschreden.
    • In het traceersysteem ftrace is de instelling "bitmask-list" toegevoegd voor het weergeven van bitmaskers in een leesbare vorm (in de vorm van een bitlijst, en niet als hexadecimaal getal). In tracefs zijn auditmogelijkheden voor filters en triggers toegevoegd. De opdracht "perf sched stats" is toegevoegd voor het verzamelen en weergeven van statistieken over de werking van de taakplanner.
    • Er zijn bouwopties LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE en LOGO_LINUX_CLUT224_FILE toegevoegd om het afbeeldingsbestand van het logo te definiëren dat tijdens het opstarten van de kernel in plaats van het standaardlogo met de pinguïn Tux wordt weergegeven.
  • Virtualisatie en beveiliging
    • In het systeem voor asynchrone I/O io_uring is de mogelijkheid geïmplementeerd om BPF-programma's met filters te koppelen die controleren wat specifieke SQE (Submission Queue Entry) operaties kunnen doen (vergelijkbaar met systeemoproepen in io_uring). De toegevoegde mogelijkheid is vergelijkbaar met filters voor systeemoproepen. Filters kunnen aan specifieke taken worden gekoppeld en worden geërfd bij het creëren van andere processen na het aanroepen van fork(). Bij actieve filters kunnen toegevoegde filters alleen aanvullende beperkingen opleggen, maar bestaande niet uitschakelen. De geïmplementeerde mogelijkheid zal het blokkeren van methoden voor het omzeilen van filters voor systeemoproepen in sandbox-omgevingen mogelijk maken, die gebaseerd zijn op het uitvoeren van vergelijkbare operaties in plaats van systeemoproepen, die worden aangeboden in io_uring.
    • In SELinux is de mogelijkheid toegevoegd om de toegang tot BPF-tokens te beheren, waardoor niet-privilegeerde processen enkele geprivilegieerde bewerkingen met BPF kunnen uitvoeren, zoals het laden van BPF-programma's in de kernel en het aanmaken van mapstructuren.
    • Ondersteuning voor het digitale handtekeningalgoritme ML-DSA (CRYSTALS-Dilithium) is toegevoegd, gebaseerd op rooster-theorie en bestand tegen brute-force aanval door een quantumcomputer. De mogelijkheid is geboden om ML-DSA te gebruiken voor de authenticatie van kernelmodules.
    • De mogelijkheid om digitale handtekening-schema's met het SHA-1-algoritme te gebruiken voor het ondertekenen van kernelmodules is verwijderd (de ondersteuning voor het laden van ondertekende modules blijft behouden).
    • In de auditregistratie NETFILTER_PKT zijn de velden ‘sport’ en ‘dport’ toegevoegd voor het inspecteren van netwerpoortnummers, en niet alleen. IP-adressen.
    • Voor systemen met een RISC-V-architectuur is ondersteuning geïmplementeerd voor de extensies Zicfiss en Zicfilp, die hardware-mogelijkheden bieden voor het toepassen van CFI (Control Flow Integrity) bescherming, welke de normale volgorde van instructie-uitvoering voorkomt door het gebruik van exploits die de in het geheugen opgeslagen functiepointers wijzigen.
    • In de hypervisor KVM is de mogelijkheid geïmplementeerd om informatie over de ondersteuning van de processor voor de extensie ERAPS (Enhanced Return Address Predictor Security) door te geven aan gastsystemen, waardoor sommige CPU-status resetbewerkingen bij het teruggeven van de controle aan de host door het gast systeem kunnen worden vermeden. Daarnaast is ondersteuning toegevoegd voor het toewijzen van hardware aan gastsystemen voor prestatiemonitoring (PMU, Performance Monitoring Unit), wat de nauwkeurigheid van profilering verhoogt in vergelijking met het gebruik van geëmuleerde PMU's.
    • In de driver voor de Hyper-V hypervisor is ondersteuning toegevoegd voor de debugfs-interface om statistieken over de werking van de hypervisor te bekijken.
  • Netwerk subsysteem
    • Standaard is de AccECN (Accurate Explicit Congestion Notification) extensie ingeschakeld, die een verbeterde versie van de ECN-extensie implementeert, waarmee hosts bij overbelasting IP-pakketten kunnen markeren in plaats van ze te verliezen. Dit maakt het mogelijk om de beginfase van congestie in communicatielijnen vast te stellen zonder pakketverlies. De oorspronkelijke ECN-extensie heeft een beperking die slechts één overbelastingssignaal per cyclus van het ontvangen en verzenden van TCP (RTT, Round-Trip Time) toestaat. AccECN verwijdert deze beperking en stelt de ontvanger in staat om de verzender meer dan één overbelastingslabel in de TCP-pakketheader te sturen. Congestiebeheeralgoritmes kunnen de ontvangen informatie gebruiken om nauwkeuriger te reageren op congestie zonder drastisch de verzendintensiteit te verlagen bij het optreden van lichte overbelasting.
    • De implementatie van het Cake-netwerkwachtrijbeheer algoritme is uitgebreid met de mogelijkheid om meerdere wachtrijen te verwerken, waardoor de belasting over meerdere CPU-kernen kan worden verdeeld. Het CAKE-algoritme wordt gebruikt om de negatieve impact van tussentijdse pakketbuffering op grensnetwerkapparatuur te verminderen, en is gericht op het bereiken van de maximaal mogelijke doorvoersnelheid en het minimum aan vertraging, zelfs op langzame communicatielijnen.
    • In de VSOCK-sockets, die worden gebruikt voor interactie met virtuele machines, is ondersteuning voor netwerknamenruimtes (network namespace) toegevoegd.
    • Een eerste implementatie van de toekomstige WiFi 8-standaard (802.11bn, Ultra High Reliability WiFi) is toegevoegd.
    • Er zijn optimalisaties toegevoegd die de verwerkingsprestaties van binnenkomende UDP-pakketten met 12% hebben verbeterd tijdens stress-testing in een 100-gigabit netwerk.
  • Apparatuur
    • In de AMDGPU-driver is ondersteuning gerealiseerd voor IP-blokken die worden gebruikt in nieuwe AMD GPU's zoals SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 en JPEG 5.3.
    • In de Nouveau-driver is het frequentiebeheer in Tegra 186+ systemen verbeterd.
    • In de i915-driver is een eerste ondersteuning voor de display IP-blok Xe3p_LPD toegevoegd, dat wordt toegepast in Intel Nova Lake-P-processors.
    • De werkzaamheden aan de drm-driver (Direct Rendering Manager) Xe voor GPU's op basis van de Intel Xe-architectuur, die worden gebruikt in Intel's Arc-videokaarten en geïntegreerde graphics, zijn voortgezet, beginnend met de Tiger Lake-processors. De Multi Queue-modus is toegevoegd. Componenten die nodig zijn voor het diagnosticeren van GPU-vastlopers in Mesa zijn toegevoegd. Ondersteuning voor het MERT-mechanisme voor het beheer van GPU-geheugen is toegevoegd.
    • De integratie van de Nova-drivercomponenten voor NVIDIA GPU's met GSP-firmware, die worden gebruikt in de NVIDIA GeForce RTX 2000-serie op basis van de Turing-microarchitectuur, is voortgezet. De driver is geschreven in Rust. In de nieuwe versie zijn voorbereidingen getroffen voor de ondersteuning van GPU's op basis van de Turing-microarchitectuur en zijn verschillende interne wijzigingen aangebracht.
    • Ondersteuning voor controllers en randapparatuur met een multi-channel SPI (Serial Peripheral Interface) is toegevoegd, waardoor gegevens in verschillende parallelle stromen kunnen worden verzonden.
    • Een driver voor gecombineerde Type-C-connectoren is toegevoegd, die worden gebruikt op apparaten met Apple Silicon-chips en interfaces zoals USB3, DP-AltMode en Thunderbolt/USB4 combineren.
    • Ondersteuning voor de geluidssystemen van de Tegra238-chips, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S en Focusrite Forte is toegevoegd.
    • Ondersteuning voor ARM-platforms, SoC's en apparaten is toegevoegd: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur.
    • Ondersteuning toegevoegd voor smartphones en tablets: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 XL, Microsoft Surface Pro 11.

Tegelijkertijd heeft de Latijns-Amerikaanse Free Software Foundation een volledig vrij kernelvariant 7.0 - Linux-libre 7.0-gnu ontwikkeld, vrijgemaakt van elementen van firmware en drivers die niet-vrije componenten of codefragmenten bevatten, waarvan het gebruik is beperkt door de fabrikant. In de release 7.0 is de schoonmaak van de iwlwifi-driverblobs uitgevoerd. De schoonmaakcode in de amdgpu-, adreno-, TI PRUeth-, air_en8811h-, ath12k-, TI VPE-, rtw8852b-, rt1320-, rt5575 SPI-, tas2783-, en Intel catpt-drivers is bijgewerkt. Namen van blobs in dts-bestanden (devicetree) voor ARM-chips zijn schoongemaakt.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster