From 4b80904476e5983f657b46ac56c62559e0eba42f Mon Sep 17 00:00:00 2001 From: Etienne Perot Date: Fri, 10 May 2024 16:57:03 -0700 Subject: [PATCH] Update platform diagram to replace ptrace with systrap. Also include reference to Systrap in the Platform Portability blog post. Fixes #10386 PiperOrigin-RevId: 632639005 --- g3doc/architecture_guide/platforms.png | Bin 21384 -> 16624 bytes g3doc/architecture_guide/platforms.svg | 109 +++++++++--------- .../blog/2020-10-22-platform-portability.md | 7 +- 3 files changed, 62 insertions(+), 54 deletions(-) diff --git a/g3doc/architecture_guide/platforms.png b/g3doc/architecture_guide/platforms.png index 005d56feb05632728a9f55db98f82cd1ced2f33a..3b26c6399fdad9c1fc220c59f18a594a3172933b 100644 GIT binary patch literal 16624 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 bSUfz%W~yl&UBLM3$fs$j>Zp_`L16y}UczPk literal 21384 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 + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + sodipodi:docname="platforms.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + inkscape:window-maximized="1" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" /> @@ -51,7 +54,7 @@ image/svg+xml - + @@ -83,7 +86,7 @@ style="fill:#ff8080;stroke-width:0.19060372" /> gVisor + style="stroke-width:0.0850731">gVisor workload + style="stroke-width:0.0832785">workload host + style="stroke-width:0.160981">host gVisor + style="stroke-width:0.0850731">gVisor workload + style="stroke-width:0.0832785">workload KVM + style="stroke-width:0.108769">KVM gVisor + style="stroke-width:0.0850731">gVisor workload + style="stroke-width:0.0832785">workload ptrace + x="89.655647" + y="148.03169" + style="stroke-width:0.0848642">systrap ptrace + style="stroke-width:0.0848642">systrap VM + style="stroke-width:0.136265">VM guest + style="stroke-width:0.154464">guest gVisor + style="stroke-width:0.0850731">gVisor workload + style="stroke-width:0.0832785">workload ptrace + style="stroke-width:0.0848642">systrap diff --git a/website/blog/2020-10-22-platform-portability.md b/website/blog/2020-10-22-platform-portability.md index 4d82940f91..15a804b526 100644 --- a/website/blog/2020-10-22-platform-portability.md +++ b/website/blog/2020-10-22-platform-portability.md @@ -6,13 +6,18 @@ requires expensive bare-metal machines or cloud instances to run safely with good performance, increasing cost and complexity for Cloud users. gVisor, however, takes a more flexible approach. +**NOTE 2024-05**: This post describes the ptrace and KVM platforms, which were +the only two gVisor platforms at the time it was written. The +[Systrap platform](/blog/2023/04/28/systrap-release/) was added since and +provides better performance than ptrace. + One of the pillars of gVisor's architecture is portability, allowing it to run anywhere that runs Linux. Modern Cloud-Native applications run in containers in many different places, from bare metal to virtual machines, and can't always rely on nested virtualization. It is important for gVisor to be able to support the environments where you run containers. -gVisor achieves portability through an abstraction called a _Platform_. +gVisor achieves portability through an abstraction called a *Platform*. Platforms can have many implementations, and each implementation can cover different environments, making use of available software or hardware features.