Klauen: wien klaut Prozessor Zäit vu virtuelle Maschinnen

Klauen: wien klaut Prozessor Zäit vu virtuelle Maschinnen

Hallo! Ech wëll Iech an einfache Begrëffer soen iwwer d'Mechanik vu Klauen a virtuelle Maschinnen an iwwer e puer net offensichtlech Artefakte, déi mir et fäerdeg bruecht hunn während senger Fuerschung erauszefannen, an déi ech als techneschen Direkter vun enger Cloud Plattform missen tauchen Mail.ru Cloud Léisunge. D'Plattform leeft op KVM.

CPU Steal Zäit ass d'Zäit während där déi virtuell Maschinn keng Prozessorressourcen fir hir Ausféierung kritt. Dës Zäit gëtt nëmmen a Gaaschtbetribssystemer a Virtualiséierungsëmfeld gezielt. D'Grënn fir wou dës meescht zougedeelt Ressourcen hikommen, wéi am Liewen, si ganz vague. Awer mir hu beschloss et erauszefannen, a souguer eng Rei Experimenter duerchgefouert. Et ass net datt mir elo alles iwwer klauen wëssen, awer mir soen Iech elo eppes interessant.

1. Wat ass klauen

Also, klauen ass eng Metrik déi e Manktem u Prozessorzäit fir Prozesser an enger virtueller Maschinn weist. Wéi beschriwwen am KVM Kernel PatchStealth ass d'Zäit wärend den Hypervisor aner Prozesser am Host OS ausféiert, och wann et de virtuelle Maschinnprozess fir d'Ausféierung gesat huet. Dat ass, klauen gëtt berechent als den Ënnerscheed tëscht der Zäit wou de Prozess prett ass fir auszeféieren an der Zäit wou de Prozess Prozessor Zäit zougewisen ass.

De virtuelle Maschinnkernel kritt d'Steal Metrik vum Hypervisor. Zur selwechter Zäit spezifizéiert den Hypervisor net genau wéi eng aner Prozesser et leeft, et seet einfach "während ech beschäftegt sinn, kann ech Iech keng Zäit ginn." Op KVM, Ënnerstëtzung fir klauen Berechnung gouf dobäi Flecken. Et ginn zwee Schlësselpunkten hei:

  • Déi virtuell Maschinn léiert iwwer klauen vum Hypervisor. Dat ass, aus der Siicht vu Verloschter, fir Prozesser op der virtueller Maschinn selwer ass dëst eng indirekten Messung déi verschidde Verzerrungen ënnerleien kann.
  • Den Hypervisor deelt keng Informatioun mat der virtueller Maschinn iwwer wat se soss mécht - d'Haaptsach ass datt et keng Zäit dofir widmet. Dofir kann d'virtuell Maschinn selwer keng Verzerrungen am Steal-Indikator entdecken, wat duerch d'Natur vu konkurréiere Prozesser bewäert ka ginn.

2. Wat beaflosst klauen

2.1. Klauen Berechnung

Wesentlech gëtt de Klauen ongeféier d'selwecht berechent wéi déi normal CPU Notzungszäit. Et gëtt net vill Informatioun iwwer wéi Recycling ugesi gëtt. Wahrscheinlech well déi meescht Leit dës Fro als offensichtlech betruechten. Mä et ginn och Falen hei. Fir Iech mat dësem Prozess vertraut ze maachen, kënnt Dir liesen Artikel vum Brendan Gregg: Dir léiert iwwer vill Nuancen beim Berechnung vun der Notzung an iwwer Situatiounen wou dës Berechnung aus de folgende Grënn falsch wäert sinn:

  • De Prozessor iwwerhëtzt, verursaacht Zyklen iwwersprangen.
  • Aktivéiert / auszeschalten Turbo Boost, wat d'Prozessor Auerfrequenz ännert.
  • Eng Ännerung vun der Längt vun der Zäitschnëtt, déi geschitt wann Dir Prozessor Energiespuertechnologien wéi SpeedStep benotzt.
  • De Problem mat der Berechnung vun der Moyenne: eng Minutt Notzung op 80% ze schätzen kann e kuerzfristeg Burst vun 100% verstoppen.
  • A spin Spär bewierkt datt de Prozessor zréckgesat ginn, mä de Benotzer Prozess gesäit kee Fortschrëtt a senger Ausféierung. Als Resultat wäert déi berechent Prozessorbenotzung vum Prozess honnert Prozent sinn, obwuel de Prozess net kierperlech Prozessor Zäit verbraucht.

Ech hunn keen Artikel fonnt deen eng ähnlech Berechnung fir ze klauen beschreift (wann Dir wësst, deelt et an de Kommentaren). Awer, nom Quellcode beurteelen, ass de Berechnungsmechanismus d'selwecht wéi fir Recycling. Einfach en anere Konter gëtt am Kärel bäigefüügt, direkt fir den KVM-Prozess (virtuellen Maschinnprozess), deen d'Dauer vum KVM-Prozess zielt fir op CPU-Zäit ze waarden. De Konter hëlt Informatioun iwwer de Prozessor aus senger Spezifizéierung a kontrolléiert ob all seng Ticke vum virtuelle Maschinnprozess benotzt ginn. Wann dat alles ass, huelen mir un datt de Prozessor nëmme mam virtuelle Maschinnprozess besat war. Soss informéiere mir datt de Prozessor eppes anescht mécht, klauen erschéngt.

De Steal Counting Prozess ass ënnerleien un déi selwecht Problemer wéi regelméisseg Recycling zielen. Net ze soen datt esou Probleemer dacks optrieden, awer se kucken decouragéierend.

2.2. Aarte vu Virtualiséierung op KVM

Breet geschwat ginn et dräi Aarte vu Virtualiséierung, déi all vun KVM ënnerstëtzt ginn. De Mechanismus vu klauen Optriede kann vun der Aart vun der Virtualiséierung ofhänken.

Sendung. An dësem Fall geschitt d'Operatioun vum virtuelle Maschinn Betriebssystem mat kierperlechen Hypervisor-Geräter esou eppes:

  1. De Gaaschtbetribssystem schéckt e Kommando op säi Gaaschtapparat.
  2. De Gaascht Apparat Chauffer kritt de Kommando, generéiert eng Demande fir den Apparat BIOS a schéckt et un den Hypervisor.
  3. Den Hypervisorprozess iwwersetzt Kommando fir Kommando fir de kierperlechen Apparat, wat et ënner anerem méi sécher mécht.
  4. De physeschen Apparat Chauffer akzeptéiert de modifizéierten Kommando a schéckt se un de kierperlechen Apparat selwer.
  5. D'Resultater vun der Ausféierung vun Kommandoen ginn op dee selwechte Wee zréck.

De Virdeel vun der Iwwersetzung ass datt et Iech erlaabt all Apparat ze emuléieren an erfuerdert keng speziell Virbereedung vum Kernel vum Betribssystem. Mä Dir musst fir dëst bezuelen, éischt vun all, an Vitesse.

Hardwarevirtualiséierung. An dësem Fall versteet den Apparat um Hardwareniveau Kommandoe vum Betribssystem. Dëst ass dee schnellsten a beschte Wee. Awer leider gëtt et net vun all kierperlechen Apparater, Hypervisoren a Gaaschtbetribssystemer ënnerstëtzt. De Moment sinn d'Haaptapparater déi Hardwarevirtualiséierung ënnerstëtzen Prozessoren.

Paravirtualiséierung. Déi meescht üblech Optioun fir Gerätvirtualiséierung op KVM an allgemeng den allgemengste Virtualiséierungsmodus fir Gaaschtbetribssystemer. Seng Besonneschheet ass datt d'Aarbecht mat e puer Hypervisor-Subsystemer (zum Beispill mam Netzwierk oder Disk Stack) oder d'Allokatioun vun Erënnerungssäiten geschitt mat der Hypervisor API, ouni Iwwersetzung vu Low-Level Kommandoen. Den Nodeel vun dëser Virtualiséierungsmethod ass datt de Gaaschtbetribssystemkär muss geännert ginn fir datt et mat dem Hypervisor mat dëser API kommunizéieren kann. Awer dëst gëtt normalerweis geléist andeems Dir speziell Treiber op de Gaaschtbetribssystem installéiert. An KVM gëtt dës API genannt virtio API.

Mat Paravirtualiséierung, am Verglach zum Broadcasting, gëtt de Wee zum physeschen Apparat wesentlech reduzéiert andeems Dir Kommandoen direkt vun der virtueller Maschinn an den Hypervisorprozess um Host schéckt. Dëst erlaabt Iech d'Ausféierung vun all Instruktioune bannent der virtueller Maschinn ze beschleunegen. An KVM gëtt dëst vun der virtio API gemaach, déi nëmme fir verschidden Apparater funktionnéiert, wéi en Netzwierk oder Diskadapter. Dofir gi Virtio Treiber a virtuelle Maschinnen installéiert.

Den Nodeel vun dëser Beschleunegung ass datt net all Prozesser, déi an der virtueller Maschinn lafen, dobannen bleiwen. Dëst erstellt e puer speziell Effekter, déi zu Spawning beim Klauen resultéiere kënnen. Ech recommandéieren eng detailléiert Etude vun dësem Thema ufänken mat Eng API fir virtuell I/O: virtio.

2.3. "Fair" Zäitplang

Eng virtuell Maschinn op engem Hypervisor ass tatsächlech en normale Prozess deen d'Gesetzer vum Fuerplang (Ressourceverdeelung tëscht Prozesser) am Linux Kernel befollegt, also loosst eis et méi no kucken.

Linux benotzt de sougenannte CFS, Completely Fair Scheduler, deen zënter dem Kernel 2.6.23 den Default Scheduler ginn ass. Fir dësen Algorithmus ze verstoen, kënnt Dir d'Linux Kernel Architecture oder de Quellcode liesen. D'Essenz vun CFS ass Prozessor Zäit tëscht Prozesser ze verdeelen ofhängeg vun der Dauer vun hirer Ausféierung. Wat méi CPU Zäit e Prozess erfuerdert, wat manner CPU Zäit et kritt. Dëst garantéiert datt all Prozesser "gerecht" ausgefouert ginn - sou datt ee Prozess net stänneg all Prozessoren besetzt, an aner Prozesser kënnen och ausféieren.

Heiansdo féiert dëst Paradigma zu interessanten Artefakte. Laangzäit Linux Benotzer erënnere sech wahrscheinlech un d'Gefriess vun engem reguläre Texteditor op engem Desktop wärend der Ressourceintensiv Uwendungen wéi e Compiler lafen. Dëst ass geschitt well net-ressourceintensiv Aufgaben an Desktop-Applikatioune mat ressourceintensiven Aufgaben konkurréiere wéi de Compiler. CFS denkt datt dëst ongerecht ass, sou datt et periodesch den Texteditor stoppt a léisst de Prozessor d'Aufgaben vum Compiler behandelen. Dëst gouf mat engem Mechanismus korrigéiert sched_autogroup, awer vill aner Fonctiounen vun der Verdeelung vun Prozessor Zäit tëscht Aufgaben bliwwen. Eigentlech ass dëst net eng Geschicht iwwer wéi schlecht alles am CFS ass, awer e Versuch op d'Tatsaach ze zéien datt d'"fair" Verdeelung vun der Prozessorzäit net déi trivialst Aufgab ass.

En anere wichtege Punkt am Scheduler ass Preemption. Dëst ass néideg fir de Snickerprozess vum Prozessor erauszekréien an anerer ze schaffen. Den Ausstoussprozess gëtt Kontextschalten genannt. An dësem Fall ass de ganze Kontext vun der Aufgab bewahrt: den Zoustand vum Stack, Registere, asw., duerno gëtt de Prozess geschéckt fir ze waarden, an en aneren hëlt seng Plaz. Dëst ass eng deier Operatioun fir den OS a gëtt selten benotzt, awer et ass naischt falsch mat et. Heefeg Kontextwiessel kann e Problem am OS uginn, awer normalerweis ass et kontinuéierlech a weist näischt besonnesch un.

Sou eng laang Geschicht ass néideg fir eng Tatsaach z'erklären: wat méi Prozessorressourcen e Prozess probéiert an engem éierleche Linux Scheduler ze konsuméieren, dest méi séier gëtt et gestoppt sou datt aner Prozesser och funktionnéiere kënnen. Ob dat richteg ass oder net ass eng komplex Fro déi ënner verschiddene Laascht anescht geléist ka ginn. A Windows, bis viru kuerzem, war de Scheduler op d'Prioritéitveraarbechtung vun Desktop-Applikatiounen fokusséiert, wat d'Hannergrondprozesser kéint afréieren. Sonn Solaris hat fënnef verschidde Klassen vun Scheduler. Wéi mir Virtualiséierung lancéiert hunn, hu mir eng sechst bäigefüügt, Fair Share Scheduler, well déi fënnef virdrun net adequat mat Solaris Zones Virtualiséierung geschafft hunn. Ech recommandéieren eng detailléiert Etude vun dësem Thema mat Bicher wéi Solaris Internals: Solaris 10 an OpenSolaris Kernel Architektur oder De Linux Kernel verstoen.

2.4. Wéi iwwerwaache klauen?

D'Iwwerwaachung vu Klauen an enger virtueller Maschinn, wéi all aner Prozessor Metrik, ass einfach: Dir kënnt all Prozessor Metrik Tool benotzen. Den Haapt Saach ass datt déi virtuell Maschinn op Linux ass. Aus e puer Grënn gëtt Windows dës Informatioun net un seng Benotzer. 🙁

Klauen: wien klaut Prozessor Zäit vu virtuelle Maschinnen
Ausgang vum Top Kommando: Detailer vun der Prozessorbelaaschtung, an der rietser Kolonn - klauen

D'Schwieregkeet entsteet wann Dir probéiert dës Informatioun vum Hypervisor ze kréien. Dir kënnt probéieren de Klauen op der Gaaschtmaschinn virauszesoen, zum Beispill, andeems Dir de Load Average (LA) Parameter benotzt - den Duerchschnëttswäert vun der Unzuel vun de Prozesser déi an der Ausféierungsschlaang waarden. D'Method fir dëse Parameter ze berechnen ass net einfach, awer am Allgemengen, wann LA normaliséiert duerch d'Zuel vun de Prozessor thread méi wéi 1 ass, weist dat un datt de Linux Server mat eppes iwwerlaascht ass.

Op wat waarden all dës Prozesser? Déi offensichtlech Äntwert ass de Prozessor. Awer d'Äntwert ass net ganz korrekt, well heiansdo ass de Prozessor gratis, awer LA geet aus Skala. Erënneren wéi NFS fällt a wéi LA wiisst. Datselwecht ka mat enger Disk an aner Input / Output Geräter geschéien. Awer tatsächlech kënnen d'Prozesser op d'Enn vun all Spär waarden, entweder physesch, mat engem I / O Apparat assoziéiert oder logesch, wéi zum Beispill e Mutex. Dëst beinhalt och Sperrung um Niveau vun der Hardware (déi selwecht Äntwert vun der Scheif), oder Logik (déi sougenannte Sperrprimitiven, déi eng Rëtsch Entitéiten enthält, mutex adaptiv a Spin, Semaphoren, Conditiounsvariablen, rw Spären, IPC Spären ...).

Eng aner Feature vu LA ass datt et als Betribssystem duerchschnëttlech ugesi gëtt. Zum Beispill, 100 Prozesser konkurréiere fir eng Datei, an dann LA = 50. Esou e grousse Wäert schéngt ze weisen datt de Betribssystem schlecht ass. Mä fir aner crookedly geschriwen Code, kann dat eng normal Staat ginn, trotz der Tatsaach, datt nëmmen et schlecht ass, an aner Prozesser am Betribssystem leiden net.

Wéinst dësem Duerchschnëtt (an net manner wéi enger Minutt) ass alles mam LA Indikator ze bestëmmen net déi belounendst Aufgab, mat ganz onséchere Resultater a spezifesche Fäll. Wann Dir probéiert et erauszefannen, fannt Dir datt Artikelen op Wikipedia an aner verfügbare Ressourcen nëmmen déi einfachste Fäll beschreiwen, ouni eng déif Erklärung vum Prozess. Ech schécken jidderengem deen interesséiert ass, erëm, hei zu Brendan Gregg  - befollegt d'Links hei ënnen. Wien ass ze faul fir Englesch ze schwätzen - Iwwersetzung vu sengem populären Artikel iwwer LA.

3. Spezialeffekter

Loosst eis elo d'Haaptfäll vu Klauen kucken, déi mir begéint hunn. Ech wäert Iech soen wéi se vun all den uewe verfollegen a wéi se sech mat den Indikatoren um Hypervisor bezéien.

Recycling. Am einfachsten an am meeschte verbreet: den Hypervisor gouf nei benotzt. Tatsächlech gi vill virtuelle Maschinnen lafen, héije Prozessorverbrauch dobannen, vill Konkurrenz, LA Notzung ass méi wéi 1 (normaliséiert duerch Prozessor thread). Alles an all virtuelle Maschinnen verlangsamt. Steal iwwerdroen vum Hypervisor wiisst och, et ass néideg fir d'Laascht ze verdeelen oder een auszeschalten. Am Allgemengen ass alles logesch a verständlech.

Paravirtualiséierung vs Single Instanzen. Et gëtt nëmmen eng virtuell Maschinn um Hypervisor; et verbraucht e klengen Deel dovun, awer produzéiert eng grouss I/O Last, zum Beispill op Disk. A vun iergendwou erschéngt e klenge Steal dran, bis zu 10% (wéi e puer Experimenter gewisen).

De Fall ass interessant. Steal erschéngt hei genee wéinst der Blockéierung um Niveau vu paravirtualiséierte Chauffeuren. En Ënnerbriechung gëtt bannent der virtueller Maschinn erstallt, vum Chauffer veraarbecht an un den Hypervisor geschéckt. Wéinst der Ënnerbriechungshandhabung um Hypervisor, fir déi virtuell Maschinn gesäit et aus wéi eng geschéckt Ufro, et ass prett fir d'Ausféierung a waart op de Prozessor, awer et gëtt keng Prozessor Zäit. Dat virtuellt Meedchen mengt datt dës Kéier geklaut gouf.

Dëst geschitt am Moment wou de Puffer geschéckt gëtt, et geet an de Kernelraum vum Hypervisor, a mir fänken un drop ze waarden. Obwuel, aus der Siicht vun der virtueller Maschinn, soll hien direkt zréck. Dofir, laut dem Klauen Berechnung Algorithmus, gëtt dës Kéier als geklaut ugesinn. Wahrscheinlech, an dëser Situatioun kann et aner Mechanismen ginn (zum Beispill, Veraarbechtung e puer aner Sys Appellen), mä si sollen net vill anescht ginn.

Scheduler versus héich gelueden virtuelle Maschinnen. Wann eng virtuell Maschinn méi klauen leid wéi anerer, ass dëst wéinst dem Scheduler. Wat méi e Prozess de Prozessor lued, desto méi séier wäert de Scheduler et erausfueren, sou datt déi aner och kënne schaffen. Wann déi virtuell Maschinn verbraucht wéineg, et wäert kaum gesinn klauen: säi Prozess éierlech souz a gewaart, mir mussen et méi Zäit ginn. Wann eng virtuell Maschinn déi maximal Belaaschtung op all seng Kären produzéiert, gëtt se dacks aus dem Prozessor erausgezunn a si probéieren et net vill Zäit ze ginn.

Et ass nach méi schlëmm wann Prozesser bannent der virtueller Maschinn probéieren méi Prozessor ze kréien well se net mat der Dateveraarbechtung këmmeren. Da gëtt de Betribssystem op der Hypervisor, duerch éierlech Optimisatioun, manner a manner Prozessor Zäit. Dëse Prozess geschitt wéi eng Lawin, a klauen spréngt an den Himmel, obwuel aner virtuell Maschinnen et kaum bemierken. A wat méi Kären, wat méi schlëmm ass déi betraffe Maschinn. Kuerz gesot, héich gelueden virtuell Maschinnen mat ville Kären leiden am meeschte.

Niddereg LA, awer et gëtt geklaut. Wann LA ongeféier 0,7 ass (dat ass, den Hypervisor schéngt ënnerlaascht ze sinn), awer klauen gëtt an eenzel virtuelle Maschinnen observéiert:

  • D'Optioun mat Paravirtualiséierung schonn uewen beschriwwen. Déi virtuell Maschinn kann Metriken kréien, déi klauen uginn, obwuel den Hypervisor gutt ass. Laut de Resultater vun eisen Experimenter ass dës Klauenoptioun net méi wéi 10% a sollt net e wesentlechen Impakt op d'Performance vun Uwendungen an der virtueller Maschinn hunn.
  • De LA-Parameter ass falsch berechent. Méi präzis, zu all spezifesche Moment gëtt et richteg berechent, awer wann et iwwer eng Minutt duerchschnëttlech ass, gëtt et ënnerschat. Zum Beispill, wann eng virtuell Maschinn pro Drëttel vum Hypervisor all seng Prozessoren fir genee eng hallef Minutt verbraucht, da wäert LA pro Minutt op der Hypervisor 0,15 sinn; véier esou virtuell Maschinnen déi gläichzäiteg schaffen ginn 0,6. An d'Tatsaach, datt fir eng hallef Minutt op jiddereng vun hinnen e wëll klauen op 25% no der LA Indicateur net méi erausgezunn ass.
  • Nach eng Kéier, wéinst dem Scheduler deen decidéiert huet datt een zevill giess huet an deen een wait léisst. An der Tëschenzäit wäert ech de Kontext wiesselen, Ënnerbriechungen behandelen an op aner wichteg Systemsaachen këmmeren. Als Resultat gesinn e puer virtuell Maschinnen keng Probleemer, anerer erliewen e seriöse Leeschtungsverschlechterung.

4. Aner Verzerrungen

Et ginn eng Millioun méi Grënn fir de fairen Retour vun der Prozessorzäit op enger virtueller Maschinn ze verzerren. Zum Beispill, Hyperthreading an NUMA féieren Schwieregkeeten a Berechnungen. Si verwiessele komplett d'Wiel vum Kärel fir de Prozess auszeféieren, well de Scheduler Koeffizienten benotzt - Gewiichter, déi d'Berechnung nach méi schwéier maachen wann de Kontext wiesselt.

Et gi Verzerrunge wéinst Technologien wéi Turbo Boost oder, am Géigendeel, Energiespuermodus, déi, wann Dir d'Notzung berechnen, d'Frequenz oder souguer d'Zäitschnëtt um Server kënschtlech erhéijen oder erofsetzen. Aktivéiert Turbo Boost reduzéiert d'Performance vun engem Prozessor thread wéinst enger Erhéijung vun der Leeschtung vun engem aneren. Am Moment gëtt d'Informatioun iwwer déi aktuell Prozessorfrequenz net op déi virtuell Maschinn iwwerdroen, an et gleeft datt een seng Zäit klaut (zum Beispill, et huet 2 GHz gefrot, awer d'Halschent krut).

Am Allgemengen kann et vill Grënn fir Verzerrung ginn. Dir kënnt eppes anescht op engem bestëmmte System fannen. Et ass besser mat de Bicher unzefänken, op déi ech Linken uewe ginn, a Statistike vum Hypervisor zréckzéien mat Utilities wéi perf, sysdig, systemtap, vun deenen Dosende.

5. Conclusiounen

  1. E puer Betrag vu Klauen ka geschéien wéinst Paravirtualiséierung, an et kann als normal ugesi ginn. Si schreiwen um Internet datt dëse Wäert 5-10% ka sinn. Hänkt vun den Uwendungen an der virtueller Maschinn of an der Belaaschtung déi se op seng kierperlech Apparater setzt. Hei ass et wichteg opmierksam ze maachen wéi Uwendungen a virtuelle Maschinnen fillen.
  2. D'Verhältnis vun der Belaaschtung op den Hypervisor a klauen an der virtueller Maschinn sinn net ëmmer kloer matenee verbonnen; béid Schätzunge vu Klauen kënnen a spezifesche Situatiounen ënner verschiddene Lasten falsch sinn.
  3. De Scheduler huet eng schlecht Astellung zu Prozesser déi vill froen. Hie probéiert manner deenen ze ginn, déi méi froen. Grouss virtuell Maschinnen si béis.
  4. E bësse Klauen kann d'Norm sinn och ouni Paravirtualiséierung (d'Belaaschtung an der virtueller Maschinn berücksichtegt, d'Charakteristiken vun der Belaaschtung vun den Noperen, d'Verdeelung vun der Belaaschtung iwwer thread an aner Faktoren).
  5. Wann Dir an engem spezifesche System klauen wëllt erausfannen, musst Dir verschidde Méiglechkeeten entdecken, Metriken sammelen, se virsiichteg analyséieren an nodenken wéi Dir d'Laascht gläichméisseg verdeelt. Ofwäichunge vun all Fäll sinn méiglech, déi experimentell bestätegt musse ginn oder am Kernel Debugger gekuckt ginn.

Source: will.com

Setzt e Commentaire