a) "Dateien" sind auch nur Blöcke auf einem Device mit ein paar Metadaten außenrum.. Meistens sogar zusammenhängende Bereiche.. Datenbanken schauen nicht jedes mal nach der file u.s.w. sondern "mappen" die Datei einmal beim starten per memmory mapped i/o typischerweise. Memory Mapped I/O mapped eine Datei z.B. in den virtuellen Adressraum des Prozesses der die Datei mapped. Der Zugriff ist dann ein Speicherzugriff, erst das Betriebsystem kann dann relativ effizient (je nachdem was der Treiber / Blocklayer unterstützt) auf das physikalische Gerät schreiben. b) Ja die "Umwege" sind da, am Ende sind das aber alles nur lookups die auf Metadaten im RAM passieren und es wird nur der Block auf dem tatsächlichen Speichergerät angefasst der auch betroffen ist. Das kann gut sein, dass bei den ersten paar Dateizugriffen diese Metadaten erst ins RAM geladen werden müssen, aber wenn Sie mal da sind geht das unglaublich schnell, da ein Schreibzugriff auf ein I/O Geräte (jedenfalls mit klassischen Adaptern wie SATA) Magnituden langsamer ist wie die CPU.. Bei NVMe über PCIe liegen immernoch welten zwischen Memoryzugriff und NVMe über PCIe. Async I/O Moderne Speichergeräte sind zudem Multi-Queue fähig, sprich das Betriebsystem kann teilweise bis zu 128 lese und Schreibzugriffe gleichzeitig "in der Schwebe" haben.. Das ist besonders interessant, da man hierüber bessere parallelisierung über CPU Kerne hinweg erreicht.. Moderne Hypervisor verwenden zudem recht effiziente APIs um diese Zugriffe asynchron abzusetzen.. Proxmox mit KVM verwendet in den neueren Versionen io_uring, was komplett asynchron ist. Physikalisches Gerät direkt in die VM "mappen" Würde ich nicht machen, da man damit die Vorteile der Virtualisierung verliert, da Resourcen hart einzelnen VMs zugeordnet werden und weder einfach zu skalieren sind noch backups durchzuführen. Man möchte ja so etwas haben wie Snapshots der Laufwerke um z.B. online-backup durchzuführen. Das selbe mit dem RAM der VM. Ein moderner Hypervisor hält die VM nur wenige uS an um einen Snapshot der Blockdevices zu erzeugen und auf alle memory pages ein "trap" zu setzen, wenn die VM darauf schreibt. Danach wird erst eine Kopie dieser konsistenten Snapshots erzeugt und als Backup weggespeichert. Das würde so nicht funktionieren, wenn da nicht nochmal eine Ebene dazwischen ist. Zudem wird da auch sowas wie eine "dirty bitmap" gepflegt in der sich gemerkt wird welche Blöcke von der VM überhaupt seit dem letzten Backup geschrieben wurden, dadurch sind inkrementelle Backups um welten schneller, da nur Blöcke kopiert werden müssen die auch zugegriffen wurden. Thin-Provisioning ist ja auch ein Thema, wenn man es "hart" mapped, wäre immer direkt alles belegt was der VM zugewiesen ist an Speicherplatz. Das die Festplatten in der Hardware stecken auf der der Hypervisor läuft ist zwar verbreitet aber auch nicht zwingend erforderlich / nicht optimal. Storage Virtualisierung ist ja auch ein Thema, warum nicht einen großen redundanten Blockstorage der zwei "Controller" hat und somit ausfallsicher ist? Dieser wird dann per 10/100GBit Ethernet redudant über Kreuz an die Hypervisor angebunden (im "Enterprise" Umfeld benutzt man da auch gerne FibreChannel). Vorteil: Ausfallsicherheit.. Alle Hypervisor Server können jede VM starten, Live Migration erfordert kein migrieren des Storage, da ja beide Server Zugriff auf den gemeinsamen Storage haben. Die einzelnen Storage Arrays kann man per "NVMe over Fabrics" an die Storage Controller anbinden (falls man NVME verwendet). Möchte man keine komplette eigene Storage Infrastruktur kann man auch mit bestehenden Hypervisorn mit eingebauten Platten Hochverfügbarkeit erreichen und zwar über DRBD, da werden praktisch die Schreibzugriffe auf Blockdevice Ebene über Netzwerk zwischen den beiden Kisten hin und her synchronisiert. Fällt einer der Knoten aus, kann der andere Knoten die VMs einfach automatisiert bei sich starten und nach ein paar Sekunden ist man wieder "online". Würde ich eine größere Virtualisierungsinfrastruktur aufbauen, würde ich vermutlich aber zu einem CEPH Cluster greifen. -> Das ist auch was die Hyperscaler tun, mit ihrer eigenen Implementierung so eines Clusters. Bei unserer Installation verwende ich ZFS im raidz2, für VM Blockdevices werden hier zvols verwenden, sprich keine Dateien. ZFS ist sehr flexibel und hat eine relativ ausgefeilte Caching infrastruktur lesend wie schreibend. Man kann z.B. eine SSD oder ein Optane Drive als Lesecache verwenden (L2ARC) und ein ein pärchen von zwei schnellen Optane Laufwerken als Schreibcache (ZIL).. Lesezugriffe der VMs gehen dann erst an den RAMcache, dann den SSD-Cache und erst wenn es in beiden nicht gefunden wird auf die evtl. langsamen Platten. Schreibzugriffe sind wie auf SSD schreiben, da sobald Sie im ZIL stehen (SSD Schreibcache) kriegt die VM das "ok" zurück. Ich habe mal einen Hypervisor mit 5400 rpm SMR Festplatten und Optane Caches gebaut.. Es fühlt sich so an, als würde man auf einer SSD schaffen, da einfach 99% der Blöcke die die VM zugreift im Cache liegen. Das "workingset" an Daten ist meist relativ klein.. 80-90% der Sachen die da rumliegen werden nahezu nie gelesen bei typischen Windows VMs. ZFS schützt zudem gegen "Bitrot" durch Checksumen.. Bei normalen Festplatten und SSDs können Bits "kippen" bei den heutigen Größen der Laufwerke liegt das durchaus im Bereich des möglichen, bei einem klassischen RAID1 weiß man im Zweifel nicht welche der beiden Kopien die richtige ist, wenn ein Bit kippt. Heute macht man eh nur noch "Flash-only".. So eine 1,92TB PCIE4 Enterprise SSD kostet gerade mal noch 350€, (Samsung PM9A3), die kann irgendwie 7Gbyte/sec lesen und 5 schreiben oder sowas synchron und schafft knapp eine Million IOPS. Festplatten sind doch eh nur noch für Backup und Archivierungssysteme interessant.. Kurzum: Möchte man nicht die Virtualisierung verlieren vom Storage, sollte man sowas wie ZFS verwenden oder einen dedizierten Storage cluster wie Ceph. Für Hochverfügbarkeit entweder Ceph oder DRBD ansonsten natürlich ein RAID (zfs hat das integriert). Proxmox Benutze ich selber kann ich sehr empfehlen, denn man kriegt direkt so Sachen wie: - Snapshoting - Live Migration - Inkrementelle Backups - Storage Virtualisierung - Hochverfügbarer Cluster einfach damit zu realisieren und kostenlos dabei - (Debian) Linux basiert - Gute Performance, da breiter Hardware Support und KVM ziemlich schlank / optimiert ist. Die großen Cloudprovider verwenden auch alle KVM (Amazon, Microsoft / Azure, Google, Tencent, Alibaba u.s.w.) Amazon hat er kürzlich dazu gewechselt. Netzwerk Virtualisierung Das ist heutzutage nicht mehr das Problem, da über IOMMU und Hardwarefähigkeiten in der Netzwerkkarte. Die Netzwerkkarte wird vom Hypervisor so konfiguriert, dass Sie Pakete an bestimmte MAC-Adressen direkt per DMA in einen Speicherbereich ohne Beteiligung des Hauptprozessor schreibt. Die VM kriegt diesen Speicherbereich einfach in ihren reingemapped und kann direkt daraus lesen. Sprich der "Hypervisor" hat die Daten nie in der Hand.. Der liest nur irgendwelche Counter aus der Netzwerkkarte aus um zu sehen wie viele Pakete wer transportiert hat für die Statistik. Es gibt sogar Anwendungen bei denen RAM-Zugriffe auf entferne Maschinen ohne Betriebsystembeteiligung stattfinden können.. RoCE (RDMA over Converged Ethernet). Der Overhead für die Netzwerkvirtualisierung ist minimal, vor allem im Vergleich zu den Laufzeiten die man auf dem physikalischen Medium hat. Gerade "bessere" Netzwerkkarten können viel davon auch in Hardware abbilden, deswegen kostet halt so ne Karte auch 200-300€ stattt halt nur 5 wie die Realtek bei Aliexpress, deren Chip nichtmal TCP Offloading kann (berechnen der TCP Checksummen in Hardware). Open Source Dank OpenSource Software und der Beteiligung der großen Hyperscaler, kann man heutzutage für um die 10-15k€ Hardware kaufen und kostenlose Software verwenden um einen Hoch verfügbaren Virtualisierungscluster zu bauen. Ich finde man kann sich nicht beklagen. Würde man das mit Enterprise Hardware / Software machen, also z.B. mit VMWare und den ganzen modulen die man für die Hochverfügbarkeit braucht + einem Storage Array, ist man eher bei 100k€+ denke ich..
... Mehr anzeigen