diff options
| author | Open-IOV <dev@open-iov.org> | 2026-09-23 05:44:08 -0400 |
|---|---|---|
| committer | Open-IOV <dev@open-iov.org> | 2026-09-23 05:46:43 -0400 |
| commit | 2302fc09080bad51c73f293294e19fd4db464eb0 (patch) | |
| tree | c722d186347fdef5a34131e9e143b1549b1daf8e /wiki/open-iov.org/index.php/Virtualization_Fundamentals.html | |
| download | open-iov-2302fc09080bad51c73f293294e19fd4db464eb0.tar.gz open-iov-2302fc09080bad51c73f293294e19fd4db464eb0.zip | |
Open-IOV: initial public release
Open-IOV virtualizes NVIDIA GPUs so that unmodified guest drivers run with
real GPU functionality - CUDA first, 3D and video to follow - on unmodified
hosts, without a proprietary vGPU license and without patching any driver,
firmware or hypervisor.
Core principle: emulate the interface, pass through the work.
kernel/ open-iov-vfio.ko - host VFIO mdev driver: virtual GPU device
(PCI config space, BAR shadows, MSI-X), GSP boot emulation,
GSP-RM message-queue/RPC emulation, memory model (GPU-VA to
guest-PA discovery) and the semaphore-completion service that
advances guest UVM progress.
userspace/ libiov.so management API and examples.
tools/ guest diagnostics, firmware analysis wrappers, RM probes.
scripts/ stack manager, VM harness, build/load/test automation.
config/ hardware/version profiles (the portability surface).
docs/ documentation tree - start at docs/README.md.
wiki/ long-form firmware and protocol deep dives.
Status: initialization works end to end for a stock 570.144 Linux guest on
Turing (TU104): driver probe, nvidia-smi, the full GSP-RM control battery,
object creation and the early CUDA/UVM start-up path. GPU work forwarding -
the step that makes CUDA kernels execute on real hardware - is the active
work item; see docs/04-implementation/01-known-knowns-and-unknowns.md.
License: BSD-3-Clause for the project; GPL-2.0 for kernel modules that link
GPL-only kernel interfaces. See LICENSE and docs/09-reference/legal-and-licensing.md.
Diffstat (limited to 'wiki/open-iov.org/index.php/Virtualization_Fundamentals.html')
| -rw-r--r-- | wiki/open-iov.org/index.php/Virtualization_Fundamentals.html | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/wiki/open-iov.org/index.php/Virtualization_Fundamentals.html b/wiki/open-iov.org/index.php/Virtualization_Fundamentals.html new file mode 100644 index 0000000..eed916d --- /dev/null +++ b/wiki/open-iov.org/index.php/Virtualization_Fundamentals.html @@ -0,0 +1,247 @@ +<!DOCTYPE html> +<html class="client-nojs" lang="en" dir="ltr"> +<head> +<meta charset="UTF-8"/> +<title>Virtualization Fundamentals - Open-IOV</title> +<script>document.documentElement.className="client-js";RLCONF={"wgBreakFrames":!1,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"c527def91f69f4e36f298cde","wgCSPNonce":!1,"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":!1,"wgNamespaceNumber":0,"wgPageName":"Virtualization_Fundamentals","wgTitle":"Virtualization Fundamentals","wgCurRevisionId":23743,"wgRevisionId":23743,"wgArticleId":39,"wgIsArticle":!0,"wgIsRedirect":!1,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Virtualization_Fundamentals","wgRelevantArticleId":39,"wgIsProbablyEditable":!1,"wgRelevantPageIsProbablyEditable":!1,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgVisualEditor":{"pageLanguageCode":"en" +,"pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgEditSubmitButtonLabelPublish":!1};RLSTATE={"site.styles":"ready","noscript":"ready","user.styles":"ready","user":"ready","user.options":"loading","skins.vector.styles.legacy":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready"};RLPAGEMODULES=["site","mediawiki.page.ready","mediawiki.toc","skins.vector.legacy.js","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader"];</script> +<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.options@1hzgi",function($,jQuery,require,module){/*@nomin*/mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); +});});</script> +<link rel="stylesheet" href="../load.php%3Flang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|skins.vector.styles.legacy&only=styles&skin=vector.css"/> +<script async="" src="../load.php%3Flang=en&modules=startup&only=scripts&raw=1&skin=vector"></script> +<meta name="generator" content="MediaWiki 1.37.1"/> +<meta name="format-detection" content="telephone=no"/> +<link rel="shortcut icon" href="../favicon.ico.html"/> +<link rel="search" type="application/opensearchdescription+xml" href="../opensearch_desc.php" title="Open-IOV (en)"/> +<link rel="EditURI" type="application/rsd+xml" href="../api.php%3Faction=rsd"/> +<link rel="alternate" type="application/atom+xml" title="Open-IOV Atom feed" href="../index.php%3Ftitle=Special:RecentChanges&feed=atom"/> +</head> +<body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Virtualization_Fundamentals rootpage-Virtualization_Fundamentals skin-vector action-view skin-vector-legacy"><div id="mw-page-base" class="noprint"></div> +<div id="mw-head-base" class="noprint"></div> +<div id="content" class="mw-body" role="main"> + <a id="top"></a> + <div id="siteNotice"></div> + <div class="mw-indicators"> + </div> + <h1 id="firstHeading" class="firstHeading" >Virtualization Fundamentals</h1> + <div id="bodyContent" class="vector-body"> + <div id="siteSub" class="noprint">From Open-IOV</div> + <div id="contentSub"></div> + <div id="contentSub2"></div> + + <div id="jump-to-nav"></div> + <a class="mw-jump-link" href="Virtualization_Fundamentals.html#mw-head">Jump to navigation</a> + <a class="mw-jump-link" href="Virtualization_Fundamentals.html#searchInput">Jump to search</a> + <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-parser-output"><p>This following page is intended to index and summarize information related to the fundamentals of virtualization of computer systems.</p><blockquote><p>An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +</p><p>This <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by/4.0/">CC-BY-4.0</a> licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +</p><p> +Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.</p></blockquote> +<div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /><div class="toctitle" lang="en" dir="ltr"><h2 id="mw-toc-heading">Contents</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div> +<ul> +<li class="toclevel-1 tocsection-1"><a href="Virtualization_Fundamentals.html#Popek_and_Goldberg_Virtualization_Requirements"><span class="tocnumber">1</span> <span class="toctext">Popek and Goldberg Virtualization Requirements</span></a></li> +<li class="toclevel-1 tocsection-2"><a href="Virtualization_Fundamentals.html#Goldberg_Survey_of_Virtual_Machine_Research"><span class="tocnumber">2</span> <span class="toctext">Goldberg Survey of Virtual Machine Research</span></a></li> +<li class="toclevel-1 tocsection-3"><a href="Virtualization_Fundamentals.html#Microkernels_Meet_Recursive_Virtual_Machines"><span class="tocnumber">3</span> <span class="toctext">Microkernels Meet Recursive Virtual Machines</span></a></li> +<li class="toclevel-1 tocsection-4"><a href="Virtualization_Fundamentals.html#A_Comparison_of_Software_and_Hardware_Techniques_for_x86_Virtualization"><span class="tocnumber">4</span> <span class="toctext">A Comparison of Software and Hardware Techniques for x86 Virtualization</span></a></li> +<li class="toclevel-1 tocsection-5"><a href="Virtualization_Fundamentals.html#Virtualizing_I/O_Devices_on_VMware_Workstation’s_Hosted_Virtual_Machine_Monitor"><span class="tocnumber">5</span> <span class="toctext">Virtualizing I/O Devices on VMware Workstation’s Hosted Virtual Machine Monitor</span></a></li> +<li class="toclevel-1 tocsection-6"><a href="Virtualization_Fundamentals.html#Dynamic_binary_translation_and_optimization"><span class="tocnumber">6</span> <span class="toctext">Dynamic binary translation and optimization</span></a></li> +<li class="toclevel-1 tocsection-7"><a href="Virtualization_Fundamentals.html#Xen_and_the_Art_of_Virtualization"><span class="tocnumber">7</span> <span class="toctext">Xen and the Art of Virtualization</span></a></li> +</ul> +</div> + +<h2><span class="mw-headline" id="Popek_and_Goldberg_Virtualization_Requirements"><a rel="nofollow" class="external text" href="https://en.m.wikipedia.org/wiki/Popek_and_Goldberg_virtualization_requirements">Popek and Goldberg Virtualization Requirements</a></span></h2> +<p>The <b>Popek and Goldberg virtualization requirements</b> are a set of conditions sufficient for a computer architecture to support system virtualization efficiently. They were introduced by Gerald J. Popek and Robert P. Goldberg in their 1974 article "Formal Requirements for Virtualizable Third Generation Architectures". Even though the requirements are derived under simplifying assumptions, they still represent a convenient way of determining whether a computer architecture supports efficient virtualization and provide guidelines for the design of virtualized computer architectures. +</p> +<h2><span class="mw-headline" id="Goldberg_Survey_of_Virtual_Machine_Research"><a rel="nofollow" class="external text" href="https://inst.eecs.berkeley.edu//~cs252/sp17/papers/goldberg-vm-survey.pdf">Goldberg Survey of Virtual Machine Research</a></span></h2> +<p>The complete instruction-by-instruction simulation of one computer system on a different system is a well-known computing technique. It is often used for software development when a hardware base is being altered. For example, if a programmer is developing software for some new special purpose (e.g., aerospace) computer X which is under construction and as yet unavailable, he will likely begin by writing a simulator for that computer on some available general-purpose machine G. The simulator will provide a detailed simulation of the special-purpose environment X, including its processor, memory, and I/O devices. Except for possible timing dependencies, programs which run on the “simulated machine X” can later run on the “real machine X” (when it is finally built and checked out) with identical effect. The programs running on X can be arbitrary — including code to exercise simulated I/O devices, move data and instructions anywhere in simulated memory, or execute any instruction of the simulated machine. The simulator provides a layer of software filtering which protects the resources of the machine G from being misused by programs on X. +</p> +<h2><span class="mw-headline" id="Microkernels_Meet_Recursive_Virtual_Machines"><a rel="nofollow" class="external text" href="https://www.flux.utah.edu/download?uid=106">Microkernels Meet Recursive Virtual Machines</a></span></h2> +<p>This paper describes a novel approach to providing mod- ular and extensible operating system functionality and en- capsulated environments based on a synthesis of micro- kernel and virtual machine concepts. We have developed a software-based virtualizable architecture called Fluke that allows recursive virtual machines (virtual machines running on other virtual machines) to be implemented ef- ficiently by a microkernel running on generic hardware. A complete virtual machine interface is provided at each level; efficiency derives from needing to implement only new functionality at each level. This infrastructure allows common OS functionality, such as process management, demand paging, fault tolerance, and debugging support, to be provided by cleanly modularized, independent, stack- able virtual machine monitors, implemented as user pro- cesses. It can also provide uncommon or unique OS fea- tures, including the above features specialized for particu- lar applications’ needs, virtual machines transparently dis- tributed cross-node, or security monitors that allow arbi- trary untrusted binaries to be executed safely. Our proto- type implementation of this model indicates that it is prac- tical to modularize operating systems this way. Some types of virtual machine layers impose almost no overhead at all, while others impose some overhead (typically 0–35%), but only on certain classes of applications. +</p> +<h2><span class="mw-headline" id="A_Comparison_of_Software_and_Hardware_Techniques_for_x86_Virtualization"><a rel="nofollow" class="external text" href="https://www.vmware.com/pdf/asplos235_adams.pdf">A Comparison of Software and Hardware Techniques for x86 Virtualization</a></span></h2> +<p>Until recently, the x86 architecture has not permitted classical trap-and-emulate virtualization. Virtual Machine Monitors for x86, such as VMwareR Workstation and Virtual PC, have instead used binary translation of the guest kernel code. However, both Intel and AMD have now introduced architectural extensions to support classical virtualization. We compare an existing software VMM with a new VMM designed for the emerging hardware support. Surprisingly, the hardware VMM often suffers lower performance than the pure software VMM. To determine why, we study architecture-level events such as page table updates, context switches and I/O, and find their costs vastly different among native, software VMM and hardware VMM execution. We find that the hardware support fails to provide an unambiguous performance advantage for two primary reasons: first, it offers no support for MMU virtualization; second, it fails to co-exist with existing software techniques for MMU virtualization. We look ahead to emerging techniques for addressing this MMU virtualization problem in the context of hardware-assisted virtualization. +</p> +<h2><span id="Virtualizing_I.2FO_Devices_on_VMware_Workstation.E2.80.99s_Hosted_Virtual_Machine_Monitor"></span><span class="mw-headline" id="Virtualizing_I/O_Devices_on_VMware_Workstation’s_Hosted_Virtual_Machine_Monitor"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20050204163917/http://www.cis.upenn.edu/~cis700-6/04f/papers/sugerman-vmware-devices.pdf">Virtualizing I/O Devices on VMware Workstation’s Hosted Virtual Machine Monitor</a></span></h2> +<p>Virtual machines were developed by IBM in the 1960’s to provide concurrent, interactive access to a mainframe computer. Each virtual machine is a replica of the underlying physical machine and users are given the illusion of running directly on the physical machine. Virtual machines also provide benefits like isolation and resource sharing, and the ability to run multiple flavors and configurations of operating systems. VMware tmWorkstation brings such mainframe-class virtual machine technology to PC-based desktop and workstation computers. This paper focuses on VMware Workstation’s approach to virtualizing I/O devices. PCs have a staggering variety of hardware, and are usually pre-installed with an operating system. Instead of replacing the pre-installed OS, VMware Workstation uses it to host a user-level application (VMApp) component, as well as to schedule a privileged virtual machine monitor (VMM) component. The VMM directly provides high-performance CPU virtualization while the VMApp uses the host OS to virtualize I/O devices and shield the VMM from the variety of devices. A crucial question is whether virtualizing devices via such a hosted architecture can meet the performance required of high throughput, low latency devices. To this end, this paper studies the virtualization and performance of an Ethernet adapter on VMware Workstation. Results indicate that with optimizations, VMware Workstation’s hosted virtualization architecture can match native I/O throughput on standard PCs. Although a straightforward hosted implementation is CPU-limited due to virtualization overhead on a 733 MHz PentiumR III system on a 100 Mb/s Ethernet, a series of optimizations targeted at reducing CPU utilization allows the system to match native network throughput. Further optimizations are discussed both within and outside a hosted architecture. +</p> +<h2><span class="mw-headline" id="Dynamic_binary_translation_and_optimization"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20050204152215/https://www.cis.upenn.edu/~cis700-6/04f/papers/ebcioglu-bin-trans.pdf">Dynamic binary translation and optimization</a></span></h2> +<p>We describe a VLIW architecture designed specifically as a target for dynamic compilation of an existing instruction set architecture. This design approach o�ers the simplicity and high performance of statically scheduled architectures, achieves compatibility with an established architecture, and makes use of dynamic adaptation. Thus, the original architecture is implemented using dynamic compilation, a process we refer to as DAISY (Dynamically Architected Instruction Set from Yorktown). The dynamic compiler exploits runtime pro�le information to optimize translations so as to extract instruction level parallelism. This work reports different design trade-offs in the DAISY system, and their impact on �nal system performance. The results show high degrees of instruction parallelism with reasonable translation overhead and memory usage. Keywords| dynamic compilation, binary translation, dynamic optimization, just-in-time compilation, adaptive code generation, pro�le-directed feedback, instruction-level parallelism, very long instruction word architectures, virtual machines, instruction set architectures, instruction set layering. +</p> +<h2><span class="mw-headline" id="Xen_and_the_Art_of_Virtualization"><a rel="nofollow" class="external text" href="https://www.cl.cam.ac.uk/research/srg/netos/papers/2003-xensosp.pdf">Xen and the Art of Virtualization</a></span></h2> +<p>Numerous systems have been designed which use virtualization to subdivide the ample resources of a modern computer. Some require specialized hardware, or cannot support commodity operating systems. Some target 100% binary compatibility at the expense of performance. Others sacrifice security or functionality for speed. Few offer resource isolation or performance guarantees; most provide only best-effort provisioning, risking denial of service. This paper presents Xen, an x86 virtual machine monitor which allows multiple commodity operating systemsto share conventional hardware in a safe and resource managed fashion, but without sacrificing either performance or functionality. This is achieved by providing an idealized virtual machine abstraction to which operating systems such as Linux, BSD and Windows XP, can be ported with minimal effort. Our design is targeted at hosting up to 100 virtual machine instances simultaneously on a modern server. The virtualization approach taken by Xen is extremely efficient: we allow operating systems such as Linux and Windows XP to be hosted simultaneously for a negligible performance overhead — at most a few percent compared with the unvirtualized case. We considerably outperform competing commercial and freely available solutions in a range of microbenchmarks and system-wide tests. +</p> +<!-- +NewPP limit report +Cached time: 20260911161559 +Cache expiry: 86400 +Reduced expiry: false +Complications: [] +CPU time usage: 0.008 seconds +Real time usage: 0.010 seconds +Preprocessor visited node count: 21/1000000 +Post‐expand include size: 0/2097152 bytes +Template argument size: 0/2097152 bytes +Highest expansion depth: 2/40 +Expensive parser function count: 0/100 +Unstrip recursion depth: 0/20 +Unstrip post‐expand size: 0/5000000 bytes +--> +<!-- +Transclusion expansion time report (%,ms,calls,template) +100.00% 0.000 1 -total +--> + +<!-- Saved in parser cache with key my_wiki:pcache:idhash:39-0!canonical and timestamp 20260911161559 and revision id 23743. Serialized with JSON. + --> +</div> +<div class="printfooter">Retrieved from "<a dir="ltr" href="../index.php%3Ftitle=Virtualization_Fundamentals&oldid=23743.html">https://open-iov.org/index.php?title=Virtualization_Fundamentals&oldid=23743</a>"</div></div> + <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> + </div> +</div> + +<div id="mw-navigation"> + <h2>Navigation menu</h2> + <div id="mw-head"> + <nav id="p-personal" class="mw-portlet mw-portlet-personal vector-user-menu-legacy vector-menu" aria-labelledby="p-personal-label" role="navigation" + > + <h3 id="p-personal-label" class="vector-menu-heading"> <span>Personal tools</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"><li id="pt-login" class="mw-list-item"><a href="../index.php%3Ftitle=Special:UserLogin&returnto=Virtualization+Fundamentals.html" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o">Log in</a></li></ul> + + </div> +</nav> + + <div id="left-navigation"> + <nav id="p-namespaces" class="mw-portlet mw-portlet-namespaces vector-menu vector-menu-tabs" aria-labelledby="p-namespaces-label" role="navigation" + > + <h3 id="p-namespaces-label" class="vector-menu-heading"> <span>Namespaces</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"><li id="ca-nstab-main" class="selected mw-list-item"><a href="Virtualization_Fundamentals.html" title="View the content page [c]" accesskey="c">Page</a></li><li id="ca-talk" class="new mw-list-item"><a href="https://open-iov.org/index.php?title=Talk:Virtualization_Fundamentals&action=edit&redlink=1" rel="discussion" title="Discussion about the content page (page does not exist) [t]" accesskey="t">Discussion</a></li></ul> + + </div> +</nav> + + <nav id="p-variants" class="mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown-noicon vector-menu vector-menu-dropdown" aria-labelledby="p-variants-label" role="navigation" + > + <input type="checkbox" + id="p-variants-checkbox" + role="button" + aria-haspopup="true" + data-event-name="ui.dropdown-p-variants" + class=" vector-menu-checkbox" aria-labelledby="p-variants-label" /> + <h3 id="p-variants-label" class="vector-menu-heading"> <span>Variants</span> + <span class="vector-menu-checkbox-expanded">expanded</span> + <span class="vector-menu-checkbox-collapsed">collapsed</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"></ul> + + </div> +</nav> + + </div> + <div id="right-navigation"> + <nav id="p-views" class="mw-portlet mw-portlet-views vector-menu vector-menu-tabs" aria-labelledby="p-views-label" role="navigation" + > + <h3 id="p-views-label" class="vector-menu-heading"> <span>Views</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"><li id="ca-view" class="selected mw-list-item"><a href="Virtualization_Fundamentals.html">Read</a></li><li id="ca-viewsource" class="mw-list-item"><a href="../index.php%3Ftitle=Virtualization_Fundamentals&action=edit.html" title="This page is protected. You can view its source [e]" accesskey="e">View source</a></li><li id="ca-history" class="mw-list-item"><a href="../index.php%3Ftitle=Virtualization_Fundamentals&action=history.html" title="Past revisions of this page [h]" accesskey="h">View history</a></li></ul> + + </div> +</nav> + + <nav id="p-cactions" class="mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown-noicon vector-menu vector-menu-dropdown" aria-labelledby="p-cactions-label" role="navigation" title="More options" + > + <input type="checkbox" + id="p-cactions-checkbox" + role="button" + aria-haspopup="true" + data-event-name="ui.dropdown-p-cactions" + class=" vector-menu-checkbox" aria-labelledby="p-cactions-label" /> + <h3 id="p-cactions-label" class="vector-menu-heading"> <span>More</span> + <span class="vector-menu-checkbox-expanded">expanded</span> + <span class="vector-menu-checkbox-collapsed">collapsed</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"></ul> + + </div> +</nav> + + <div id="p-search" role="search" class="vector-search-box"> + <div> + <h3 > + <label for="searchInput">Search</label> + </h3> + <form action="https://open-iov.org/index.php" id="searchform"> + <div id="simpleSearch" data-search-loc="header-navigation"> + <input type="search" name="search" placeholder="Search Open-IOV" autocapitalize="sentences" title="Search Open-IOV [f]" accesskey="f" id="searchInput"/> + <input type="hidden" name="title" value="Special:Search"/> + <input type="submit" name="fulltext" value="Search" title="Search the pages for this text" id="mw-searchButton" class="searchButton mw-fallbackSearchButton"/> + <input type="submit" name="go" value="Go" title="Go to a page with this exact name if it exists" id="searchButton" class="searchButton"/> + </div> + </form> + </div> +</div> + + </div> + </div> + +<div id="mw-panel"> + <div id="p-logo" role="banner"> + <a class="mw-wiki-logo" href="../images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html" + title="Visit the main page"></a> + </div> + <nav id="p-navigation" class="mw-portlet mw-portlet-navigation vector-menu vector-menu-portal portal" aria-labelledby="p-navigation-label" role="navigation" + > + <h3 id="p-navigation-label" class="vector-menu-heading"> <span>Navigation</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"><li id="n-mainpage-description" class="mw-list-item"><a href="../images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html" title="Visit the main page [z]" accesskey="z">Main page</a></li><li id="n-recentchanges" class="mw-list-item"><a href="https://open-iov.org/index.php/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li><li id="n-randompage" class="mw-list-item"><a href="./Special:Random.html" title="Load a random page [x]" accesskey="x">Random page</a></li><li id="n-help-mediawiki" class="mw-list-item"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">Help about MediaWiki</a></li></ul> + + </div> +</nav> + + <nav id="p-tb" class="mw-portlet mw-portlet-tb vector-menu vector-menu-portal portal" aria-labelledby="p-tb-label" role="navigation" + > + <h3 id="p-tb-label" class="vector-menu-heading"> <span>Tools</span> + </h3> + <div class="vector-menu-content"> + + <ul class="vector-menu-content-list"><li id="t-whatlinkshere" class="mw-list-item"><a href="./Special:WhatLinksHere/Virtualization_Fundamentals.html" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="https://open-iov.org/index.php/Special:RecentChangesLinked/Virtualization_Fundamentals" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li><li id="t-specialpages" class="mw-list-item"><a href="./Special:SpecialPages.html" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li><li id="t-permalink" class="mw-list-item"><a href="../index.php%3Ftitle=Virtualization_Fundamentals&oldid=23743.html" title="Permanent link to this revision of the page">Permanent link</a></li><li id="t-info" class="mw-list-item"><a href="../index.php%3Ftitle=Virtualization_Fundamentals&action=info.html" title="More information about this page">Page information</a></li></ul> + + </div> +</nav> + + +</div> + +</div> +<footer id="footer" class="mw-footer" role="contentinfo" > + <ul id="footer-info" > + <li id="footer-info-lastmod"> This page was last edited on 2 March 2023, at 00:31.</li> +</ul> + + <ul id="footer-places" > + <li id="footer-places-privacy"><a href="https://open-iov.org/index.php/Open-IOV:Privacy_policy" title="Open-IOV:Privacy policy">Privacy policy</a></li> + <li id="footer-places-about"><a href="./Open-IOV:About.html" title="Open-IOV:About">About Open-IOV</a></li> + <li id="footer-places-disclaimer"><a href="https://open-iov.org/index.php/Open-IOV:General_disclaimer" title="Open-IOV:General disclaimer">Disclaimers</a></li> +</ul> + + <ul id="footer-icons" class="noprint"> + <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/"><img src="../resources/assets/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="../resources/assets/poweredby_mediawiki_132x47.png 1.5x, ../resources/assets/poweredby_mediawiki_176x62.png 2x" width="88" height="31" loading="lazy"/></a></li> +</ul> + +</footer> + + +<script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgPageParseReport":{"limitreport":{"cputime":"0.008","walltime":"0.010","ppvisitednodes":{"value":21,"limit":1000000},"postexpandincludesize":{"value":0,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":2,"limit":40},"expensivefunctioncount":{"value":0,"limit":100},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"timingprofile":["100.00% 0.000 1 -total"]},"cachereport":{"timestamp":"20260911161559","ttl":86400,"transientcontent":false}}});mw.config.set({"wgBackendResponseTime":58});});</script> +<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a39968ea9b7f39c9',t:'MTc4OTE1ODQxMQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>
\ No newline at end of file |
