diff --git a/.github/workflows/config/config.json b/.github/workflows/config/config.json index 1e6c682d..8b2a1ec2 100644 --- a/.github/workflows/config/config.json +++ b/.github/workflows/config/config.json @@ -5,7 +5,6 @@ "MD029": { "style": "one" }, "MD014": false, "MD033": false, - "MD034": false, "MD041": false, "line-length": false } diff --git a/content/blog/2017-12-05-unleashing-unikernels.mdx b/content/blog/2017-12-05-unleashing-unikernels.mdx index e6e18f0d..0fb325bc 100644 --- a/content/blog/2017-12-05-unleashing-unikernels.mdx +++ b/content/blog/2017-12-05-unleashing-unikernels.mdx @@ -102,9 +102,9 @@ from the community. To get you started, here are a number of available resources: * **Developer's guide**: available in the docs directory of the Unikraft sources or [here](http://docs.unikraft.org/) -* **Website**: The main Unikraft website: http://unikraft.org +* **Website**: The main Unikraft website: * **Mailing list**: we share the mailing list with MiniOS, please subscribe [here](https://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel) Please don't be shy about getting in touch with us, we would be more than happy to answer any questions you may have. You can reach the -core Unikraft development team at sysml@listserv.neclab.eu . +core Unikraft development team at . diff --git a/content/blog/2021-04-26-unikraft-at-eurosys.mdx b/content/blog/2021-04-26-unikraft-at-eurosys.mdx index 8b25c701..e19d88ac 100644 --- a/content/blog/2021-04-26-unikraft-at-eurosys.mdx +++ b/content/blog/2021-04-26-unikraft-at-eurosys.mdx @@ -20,7 +20,7 @@ In addition, the paper has received the conference's 3 reproducibility badges, meaning that the results in the paper have been reproduced by independent reviewers; you can even try the experiments out yourself here: - > https://github.com/unikraft/eurosys21-artifacts. + > . Unikraft's main goal is to bring unikernels, specialized virtual machines able to provide excellent performance, into the mainstream. Unikraft is a novel @@ -34,7 +34,7 @@ Unikraft images for these apps are around 1MB, require less than 10MB of RAM to run, and boot in around 1ms on top of the VMM time (total boot time 3ms-40ms). The full paper can be found here: - > https://dl.acm.org/doi/proceedings/10.1145/3447786 + > Beyond the paper, we have put a lot of work into developing [kraft](https://github.com/unikraft/kraft), a tool that makes it easy to build @@ -43,6 +43,6 @@ process of integrating Unikraft with major monitoring and orchestration tools such as Kubernetes and Prometheus, so stay tuned for much more! Unikraft is part of the Xen Project, a hosted project at the Linux Foundation -and can be found at www.unikraft.org. We'd be more than grateful if you took +and can be found at . We'd be more than grateful if you took Unikraft out for a spin and gave us feedback on what you think. Contributions are, of course, more than welcome! diff --git a/content/blog/2022-02-05-new-site-and-unikraft-at-fosdem22.mdx b/content/blog/2022-02-05-new-site-and-unikraft-at-fosdem22.mdx index af805133..2fb8b2fb 100644 --- a/content/blog/2022-02-05-new-site-and-unikraft-at-fosdem22.mdx +++ b/content/blog/2022-02-05-new-site-and-unikraft-at-fosdem22.mdx @@ -2,7 +2,7 @@ title: "Kicking off 2022 with a new site and release at FOSDEM!" description: | As the new year begins, we're excited to show off many of the things the - community has been working over the last two months. + community has been working over the last two months. publishedDate: 2022-02-04 authors: - Alexander Jung @@ -56,7 +56,7 @@ applications and libraries (both external and internal). A big thank you to project. To get started using it, please visit the related repository at -https://github.com/unikraft/ide-vscode + ### Unikraft at FOSDEM'22 diff --git a/content/blog/2022-02-17-unikraft-at-asplos22.mdx b/content/blog/2022-02-17-unikraft-at-asplos22.mdx index 00309809..71728a3a 100644 --- a/content/blog/2022-02-17-unikraft-at-asplos22.mdx +++ b/content/blog/2022-02-17-unikraft-at-asplos22.mdx @@ -25,7 +25,7 @@ We also show that, under equivalent configurations, FlexOS performs similarly or **Update**: Following the presentation at the conference, **FlexOS was awarded "Distinguised Artifacts" at [ASPLOS'22](https://asplos-conference.org/2022/).** 🏆 -More details about FlexOS can be found at https://project-flexos.github.io +More details about FlexOS can be found at ### Unikraft Tutorial @@ -33,7 +33,7 @@ With the advance of virtualization technology and the constant demand for specia In this tutorial we present Unikraft, a unikernel SDK aiming for extreme specialization. The event will be held in hybrid format, both in person and virtually. -For more information about the event and how to register, please visit https://asplos-conference.org. +For more information about the event and how to register, please visit . All virtual attendees will be able to watch all talks, participate in all Q&As, as well as have online help via dedicated members from the open-source community. -For full details of the event and to follow along, please visit the dedicated tutorial website at: https://asplos22.unikraft.org +For full details of the event and to follow along, please visit the dedicated tutorial website at: diff --git a/content/blog/2022-08-20-unikraft-releases-phoebe.mdx b/content/blog/2022-08-20-unikraft-releases-phoebe.mdx index 633fb0ae..edd80b55 100644 --- a/content/blog/2022-08-20-unikraft-releases-phoebe.mdx +++ b/content/blog/2022-08-20-unikraft-releases-phoebe.mdx @@ -50,7 +50,7 @@ Providing `posix-socket` opens up new possibilities for "mixing and matching" AF Now the developer has the power to easily choose which implementation underlies a particular AF. -#### Usage +#### Usage This library allows for the registration of socket interfaces, listed within [`struct posix_socket_ops`](#), and exposes unikernel-wide POSIX prototypes for `socket()`, `accept()`, `bind()`, `listen()`, `connect()`, `send()`, `recv()` and friends in order to access them via a corresponding AF number. @@ -163,10 +163,10 @@ _This feature was championed by [Simon Kuenzer](https://github.com/skuenzer) and In v0.10.0 we mark the start of a transition for better support of [musl](https://www.musl-libc.org/) via [`lib-musl`](https://github.com/unikraft/lib-musl) to Unikraft. Musl is a feature-rich and performant standard C library (_libc_) alternative to [newlib](https://github.com/unikraft/lib-newlib). -With this initial introduction of musl into Unikraft s a major milestone for the project as many important OS primitives, including scheduling were refactored to become more generic and general-purpose for the +With this initial introduction of musl into Unikraft s a major milestone for the project as many important OS primitives, including scheduling were refactored to become more generic and general-purpose for the The introduction of musl will facilitate the running of applications under binary-compatibility mode (i.e. running unmodified Linux ELFs with Unikraft) where future versions of Unikraft will need only to be statically linked against existing applications. -With Musl, external application and library porting will be easier too. +With Musl, external application and library porting will be easier too. **The road to full musl** @@ -181,7 +181,7 @@ Changes to the Unikraft core include a rewrite of the internal threading impleme ### SMP implementation for x86_64 _This feature was championed by [Marc Rittinghaus](https://github.com/marcrittinghaus) and [Cristian Vijelie](https://github.com/cristian-vijelie) with extensive input from [Sairaj Kodilkar](https://github.com/Sairajkodilkar), [Răzvan Deaconescu](https://github.com/razvand) and [Răzvan Vîrtan](https://github.com/razvanvirtan)._ - + In v0.10.0, we also add the x86_64 implementation on top of [Unikraft's abstract the SMP API introduced in v0.9.0](https://unikraft.org/blog/2022-06-13-unikraft-releases-hyperion/#a-new-common-smp-api), which provides the means to initialize and execute code on secondary CPU cores. #### Implementation @@ -369,7 +369,7 @@ This is due to the fact that these two functions are more complex to implement a #### Future Work There are the `capget` and `capset` system calls which are currently implemented in `posix-user` although they are probably better moved to [`posix-process`](https://github.com/unikraft/unikraft/tree/staging/lib/posix-process) as they are related to the capabilities of threads. -For now, we keep them here so that we do not collide with changes to `posix-process` that are about to be published by [Simon Kuenzer](https://github.com/skuenzer] for musl compatibility. +For now, we keep them here so that we do not collide with changes to `posix-process` that are about to be published by [Simon Kuenzer](https://github.com/skuenzer) for musl compatibility. ### Community Activities @@ -380,7 +380,7 @@ Our 3 students are currently working on their GSoC projects: - [Maria Sfîrăială](https://github.com/mariasfiraiala): Shadow Stack Support in Unikraft - [Xiangyi Meng](https://github.com/xymeng16): Isolating Unikraft with Intel SGX -See their latest blog posts with updates: https://unikraft.org/blog/ +See their latest blog posts with updates: Also, we continued our hackathons series with the [Unikraft Aachen Hackathon](https://unikraft.org/community/hackathons/2022-06-aachen/) during June 25-26, 2022, and presented to participants the exciting world of unikernels and Unikraft. Participants were able to solve technical challenges and make their first PRs to the Unikraft GitHub repositories. diff --git a/content/blog/2022-10-14-unikraft-reaches-1k-github-stars.mdx b/content/blog/2022-10-14-unikraft-reaches-1k-github-stars.mdx index fe6d6538..c6cde24e 100644 --- a/content/blog/2022-10-14-unikraft-reaches-1k-github-stars.mdx +++ b/content/blog/2022-10-14-unikraft-reaches-1k-github-stars.mdx @@ -1,7 +1,7 @@ --- title: "Unikraft Reaches 1K+ GitHub Stars! (and 500 Discord Users)" description: | - We're ecstatic to announce that a week ago Unikraft reached 1K stars + We're ecstatic to announce that a week ago Unikraft reached 1K stars on Github on its main repository! publishedDate: 2022-10-14 authors: @@ -37,7 +37,7 @@ It was becoming clear to us that a different approach was needed. Back then, the From the beginning we wanted to make sure that Unikraft would allow for full specialization, that is, that the entire software stack running underneath an application, from the low level operating system code all the way up to the code that provides application compatibility, could be fully (and easily) tailored to that application's needs. To achieve this, one of the main architectural principles of Unikraft is that it be fully modular: everything in Unikraft is a library that can be included or removed from each build. -While several other unikernel projects had a small kernel (e.g., [OSv](https://osv.io/), [MirageOS](https://mirage.io/)), none of them were modular, so not very easy to customize and fully specialize. Beyond the architectural principle of being modular, there were three targets we wanted to achieve: +While several other unikernel projects had a small kernel (e.g., [OSv](https://osv.io/), [MirageOS](https://mirage.io/)), none of them were modular, so not very easy to customize and fully specialize. Beyond the architectural principle of being modular, there were three targets we wanted to achieve: * **Performance**: those familiar with unikernels know about their high performance potential; in practice, many projects failed to deliver high performance (e.g., Rump). * **Application compatibility**: for Unikraft to be successful, we made it an explicit target to (1) be able to run unmodified applications and languages and (2) to run as wide a range of them as possible (more on this below). Many past unikernel projects (including some of ours) required application modifications, or could only run a single language, or sometimes only a single application. @@ -56,4 +56,4 @@ Kubernetes integration, so you can seamlessly deploy Unikraft images. This is of course not all: we are busy working on security features, additional VMM and hypervisor support, and many other exciting areas; check out our [roadmap](https://github.com/orgs/unikraft/projects/24/views/31) for more details. -Thank you for reading this far and please make sure to join our friendly community on Discord , or any of our upcoming [events](https://unikraft.org/community/events/) or [hackathons](https://unikraft.org/community/hackathons/). Comments, questions and any sort of feedback is greatly appreciated and can be sent directly to me at felipe@unikraft.io . +Thank you for reading this far and please make sure to join our friendly community on Discord , or any of our upcoming [events](https://unikraft.org/community/events/) or [hackathons](https://unikraft.org/community/hackathons/). Comments, questions and any sort of feedback is greatly appreciated and can be sent directly to me at . diff --git a/content/blog/2022-10-19-ukl-vs-unikraft.mdx b/content/blog/2022-10-19-ukl-vs-unikraft.mdx index 4ac5da53..67a567bf 100644 --- a/content/blog/2022-10-19-ukl-vs-unikraft.mdx +++ b/content/blog/2022-10-19-ukl-vs-unikraft.mdx @@ -1,9 +1,9 @@ --- title: "Unikraft vs. UKL: What's the Difference?" description: | - You may have seen recent news about a set of patches] hitting the - Linux kernel mailing list for Unikernel Linux (UKL), "... a research - project aimed at integrating application-specific optimizations to the + You may have seen recent news about a set of patches] hitting the + Linux kernel mailing list for Unikernel Linux (UKL), "... a research + project aimed at integrating application-specific optimizations to the Linux kernel. publishedDate: 2022-10-19 authors: @@ -18,16 +18,16 @@ In fact, [the original UKL paper was published back in 2019](https://dl.acm.org/ But what exactly is a unikernel? Perhaps the easiest definition is that it is a virtual machine specialized to the needs of a particular target application, the key word being specialized. And because of specialization the resulting unikernel can provide efficiency much higher than a general-purpose operating system such as Linux or FreeBSD could. -Here I am using efficiency as an umbrella term to mean higher I/O throughput, smaller images, lower memory consumption, lower latency and quick boot times, among others. And, because the entire software stack is specialized, that typically results in a much smaller Trusted Computing Base (TCB) and potentially fewer vulnerabilities. +Here I am using efficiency as an umbrella term to mean higher I/O throughput, smaller images, lower memory consumption, lower latency and quick boot times, among others. And, because the entire software stack is specialized, that typically results in a much smaller Trusted Computing Base (TCB) and potentially fewer vulnerabilities. In addition to specialization, many unikernels have a single-memory address space: since many of them target cloud or virtual deployments where a hypervisor is running underneath and providing isolation already, they get rid of the user-space/kernel divide since it's a source of overhead. Having a single memory address space is what projects like Unikernel Linux do; unfortunately, they obviate one of the main features of "true" unikernels: specialization. -In UKL, the Linux kernel is still there as it would be with a standard Ubuntu or Debian virtual machine, just running in the same address space as the application. +In UKL, the Linux kernel is still there as it would be with a standard Ubuntu or Debian virtual machine, just running in the same address space as the application. Why would one bother turning a general-purpose OS like Linux into a unikernel in the first place, given that it was clearly not intended for unikernels/specialization? The answer is great application compatibility: ultimately it's still Linux underneath, so all your favorite apps still run unmodified – or at least that's the theory. -In practice, UKL requires recompiling all applications/runtimes against a custom glibc and the kernel. +In practice, UKL requires recompiling all applications/runtimes against a custom glibc and the kernel. In short, there are two ways to go about application compatibility: @@ -43,6 +43,7 @@ This type of libc-level compatibility, also offered by UKL, is less than ideal: This is problematic for certain languages (e.g. Go), for which most such invocations are made directly by the runtime and not through the libc. In contrast, Unikraft offers system-call level compatibility, seamlessly boosting the performance of all kernel invocations. + + We designed and built Unikraft with specialization in mind from the beginning, around a highly modular architecture where every component is a library that can be added, removed or configured, from low-level architecture-specific code, to schedulers, memory allocators and network stacks. The result is Unikraft images that contain only the code that an application needs to run, nothing more, nothing less, always with optimization and performance in mind. diff --git a/content/blog/2023-02-07-unikraft-releases-epimetheus.mdx b/content/blog/2023-02-07-unikraft-releases-epimetheus.mdx index 2b17ef09..8ccd8a53 100644 --- a/content/blog/2023-02-07-unikraft-releases-epimetheus.mdx +++ b/content/blog/2023-02-07-unikraft-releases-epimetheus.mdx @@ -139,7 +139,7 @@ area that uses 2MB pages. The size must be a multiple of 2MB. uk_vma_advise(uk_vas_get_active(), vaddr, 0x100000, UK_VMA_ADV_DONTNEED, 0); ``` -7. Create a linear ring buffer that mirrors the buffer at the end to avoid copying (see https://en.wikipedia.org/wiki/Circular_buffer#Optimization). Note: Precede an address reservation for the whole 2 * PAGE_SIZE * PAGES range to ensure race free allocation of the virtual addresses. Note: Physical memory mapped with `uk_vma_map_dma()` will not be freed automatically when the VMA is unmapped. +7. Create a linear ring buffer that mirrors the buffer at the end to avoid copying (see ). Note: Precede an address reservation for the whole 2 * PAGE_SIZE * PAGES range to ensure race free allocation of the virtual addresses. Note: Physical memory mapped with `uk_vma_map_dma()` will not be freed automatically when the VMA is unmapped. ```clike struct uk_vas *vas = uk_vas_get_active(); diff --git a/content/blog/2023-05-15-unikraft-releases-atlas.mdx b/content/blog/2023-05-15-unikraft-releases-atlas.mdx index 1e3cf5ef..00cbe0ee 100644 --- a/content/blog/2023-05-15-unikraft-releases-atlas.mdx +++ b/content/blog/2023-05-15-unikraft-releases-atlas.mdx @@ -41,8 +41,8 @@ Employing reader-writer locks is thus more efficient for sychronizing data struc More information on the changes related to synchronization in Unikraft can be found here: -- https://unikraft.org/blog/2022-06-27-unikraft-synchronization/ -- https://unikraft.org/blog/2022-07-19-unikraft-synchronization/ +- +- ## Native Firecracker VMM Support ([#760](https://github.com/unikraft/unikraft/pull/760)) diff --git a/content/blog/2024-06-07-unikraft-releases-v0.17.0.mdx b/content/blog/2024-06-07-unikraft-releases-v0.17.0.mdx index 76285ea2..a38c62a4 100644 --- a/content/blog/2024-06-07-unikraft-releases-v0.17.0.mdx +++ b/content/blog/2024-06-07-unikraft-releases-v0.17.0.mdx @@ -191,7 +191,7 @@ Participants were able to deploy existing application and also try their own, us #### Xen Summit 2024 -Unikraft took part in [Xen Summit 2024](https://events.linuxfoundation.org/xen-project-summit/), the yearly gathering of the Xen community, in Lisbon, Portugal, on June 4-6, 2024. We gave the Keynote, titled [Unikraft Has Arrived: The Lightweight, Fast, Usable Solution for Cloud Deployments] (https://docs.google.com/presentation/d/1bOskgOIW5P0yQjybuiEqWolXwuCoTzwBy5e_OqGoRi8/edit?usp=sharing). +Unikraft took part in [Xen Summit 2024](https://events.linuxfoundation.org/xen-project-summit/), the yearly gathering of the Xen community, in Lisbon, Portugal, on June 4-6, 2024. We gave the Keynote, titled [Unikraft Has Arrived: The Lightweight, Fast, Usable Solution for Cloud Deployments](https://docs.google.com/presentation/d/1bOskgOIW5P0yQjybuiEqWolXwuCoTzwBy5e_OqGoRi8/edit?usp=sharing). We also headed the "Xen and Unikraft (and unikernels)" design session, where we captured insights in improving Unikraft's Xen support and where we clarified use cases for Unikraft for Xen (such as stub domains and Qubes OS). diff --git a/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx b/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx index da2c7ee5..7ba1eb56 100644 --- a/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx +++ b/content/blog/2024-12-21-unikraft-releases-v0.18.0.mdx @@ -93,7 +93,7 @@ For For a general descriptions on how to access the exported stats, see the docu * [lib/ukallocbuddy: Boot error message for Nginx (QEMU, KVM, x86_64)](https://github.com/unikraft/unikraft/issues/1505) * [plat/kvm does not boot on Firecracker `0.10.0-dev` on arm64](https://github.com/unikraft/unikraft/issues/1488) -For a full list of issues see: https://github.com/unikraft/unikraft/issues +For a full list of issues see: ### Catalog Update diff --git a/content/community/events.mdx b/content/community/events.mdx index 3721bc48..aa4c5005 100644 --- a/content/community/events.mdx +++ b/content/community/events.mdx @@ -10,7 +10,7 @@ description: | Weekly technical meetings occur Wednesday at 13:00 CET on the [Unikraft Discord Server](https://bit.ly/UnikraftDiscord) on the `#monkey-business` voice channel. All meetings are minuted, you can access past and future meeting notes at -https://github.com/unikraft/meeting-notes. The general topics of weekly +. The general topics of weekly technical meetings vary and largely plays as a round-table for discussion of on-going projects, software releases and more. diff --git a/content/docs/cli/hacking.mdx b/content/docs/cli/hacking.mdx index f1206a72..1ded4157 100644 --- a/content/docs/cli/hacking.mdx +++ b/content/docs/cli/hacking.mdx @@ -1,8 +1,8 @@ --- title: Building KraftKit from source description: - The Unikraft companion command-line tool `kraft` is developed via the - KraftKit project which is a general-purpose, Go-based SDK for building + The Unikraft companion command-line tool `kraft` is developed via the + KraftKit project which is a general-purpose, Go-based SDK for building Unikraft unikernels programmatically. Learn how to use this framework and build the `kraft` binary. --- @@ -76,7 +76,7 @@ for example: export DOCKER=nerdctl # For Podman -export DOCKER=podman +export DOCKER=podman ``` @@ -171,4 +171,4 @@ make test To view internal documentation about KraftKit and how to use exported packages and methods, please refer to the auto-generated documentation at: -https://pkg.go.dev/kraftkit.sh \ No newline at end of file + diff --git a/content/docs/cli/install.mdx b/content/docs/cli/install.mdx index 9335e0c5..1a066b3b 100644 --- a/content/docs/cli/install.mdx +++ b/content/docs/cli/install.mdx @@ -1,8 +1,8 @@ --- title: Installation description: | - With `kraft`, you can easily leverage Unikraft and manage specialized, - high-performance applications at every stage of their lifecycle: from + With `kraft`, you can easily leverage Unikraft and manage specialized, + high-performance applications at every stage of their lifecycle: from construction to production. --- @@ -14,7 +14,7 @@ to build and package unikernels. ## Recommended installation method You can quickly and easily install KraftKit using the interactive installer. -Simply run the following command to get started: +Simply run the following command to get started: ```console curl --proto '=https' --tlsv1.2 -sSf https://get.kraftkit.sh | sh @@ -34,7 +34,7 @@ brew install unikraft/cli/kraftkit ``` Alternatively, you can download the latest kraft darwin binary for your architecture from: -https://github.com/unikraft/kraftkit/releases/latest + Extract the archive to a local directory. For example: diff --git a/content/docs/cli/reference/kraft/cloud/index.mdx b/content/docs/cli/reference/kraft/cloud/index.mdx index 8a3a6838..e132e6d3 100644 --- a/content/docs/cli/reference/kraft/cloud/index.mdx +++ b/content/docs/cli/reference/kraft/cloud/index.mdx @@ -5,7 +5,7 @@ description: Manage resources on Unikraft Cloud Manage resources on Unikraft Cloud. -Learn more & sign up at https://unikraft.cloud +Learn more & sign up at Quickly switch between metros using the `--metro` flag or use the `UKC_METRO` environmental variable. @@ -72,4 +72,3 @@ $ kraft cloud instance remove UUID * [`kraft cloud service`](/docs/cli/reference/kraft/cloud/service): Manage services on KraftCloud * [`kraft cloud tunnel`](/docs/cli/reference/kraft/cloud/tunnel): Forward a local port to an unexposed instance * [`kraft cloud volume`](/docs/cli/reference/kraft/cloud/volume): Manage persistent volumes on KraftCloud - diff --git a/content/docs/cli/running.mdx b/content/docs/cli/running.mdx index c8745e16..055e1d49 100644 --- a/content/docs/cli/running.mdx +++ b/content/docs/cli/running.mdx @@ -138,7 +138,7 @@ kraft run -p 8080:80 unikraft.org/nginx:1.25 -In the above example, the NGINX instance will be available at http://localhost:8080/. +In the above example, the NGINX instance will be available at . ## Rootfs and mounting volumes diff --git a/content/docs/concepts/design-principles.mdx b/content/docs/concepts/design-principles.mdx index 0cbfecd9..8efd8ad2 100644 --- a/content/docs/concepts/design-principles.mdx +++ b/content/docs/concepts/design-principles.mdx @@ -116,6 +116,7 @@ removing or replacing any single component in the Linux kernel requires understanding and fixing all the dependencies of other components, a daunting task. + + While full modularization is difficult, modularizing certain parts of a monolithic kernel has been done succesfully by Rump. There, the NetBSD kernel diff --git a/content/docs/concepts/performance.mdx b/content/docs/concepts/performance.mdx index 90df5e67..0b0d6e33 100644 --- a/content/docs/concepts/performance.mdx +++ b/content/docs/concepts/performance.mdx @@ -18,6 +18,7 @@ As shown, Unikraft images are smaller than all other unikernel projects and comp they do not include the size of glibc nor the kernel). This is a consequence of Unikraft's modular approach, drastically reducing the amount of code to be compiled and linked (e.g., for helloworld, no scheduler and no memory allocator are needed). + + + + ## Boot Times @@ -42,6 +46,7 @@ This is a consequence of Unikraft's modular approach, drastically reducing the a In our evaluation, we use standard virtualization toolstacks instead, and wish to understand how quickly Unikraft VMs can boot. When running experiments, we measure both the time taken by the VMM (e.g. Firecracker, QEMU, Solo5) and the boot time of the actual unikernel/VM, measured from when the first guest instruction is run until `main()` is invoked. + + The results are shown in Figure 3, showing how long a helloworld unikernel needs to boot with different VMMs. Unikraft's boot time on QEMU and Solo5 (guest only, without VMM overheads) ranges from tens (no NIC) to hundreds of microseconds (one NIC). @@ -65,6 +71,7 @@ These results show that Unikraft can be readily used in scenarios where just-in- How much memory does Unikraft actually need when running real-world applications? To answer this question we ran experiments to measure the minimum amount of memory required to boot various applications as unikernels, finding that 2-6MBs of memory suffice for Unikraft guests (Figure 4). + + ## Application Performance @@ -81,6 +89,7 @@ We conduct all measurements with the same application config and where possible We did not optimize application or kernel configs for performance, however we took care of removing obvious performance bottlenecks for each system, e.g., switching on memory pools in Unikraft's networking stack (based on lwIP), or porting Lupine to QEMU/KVM in order to avoid Firecracker performance bottlenecks. Unikraft measurements use Mimalloc as the memory allocator. + + The results are shown in Figures 5 and 6. For both apps, Unikraft is around 30%-80% faster than running the same app in a container, and 70%-170% faster than the same app running in a Linux VM. @@ -98,6 +108,7 @@ unfortunately it is not possible to use Mimalloc as kernel allocator in Linux wi Note that we did try to LD_PRELOAD Mimalloc into Redis, but the performance improvement was not significant. We expect that the improvement would be more notable if Mimalloc were present at compile time instead of relying on the preloading mechanism (making the compiler aware of the allocator allows it to perform compile/link time optimizations) but we could not perform this experiment since Mimalloc is not natively supported by the current Redis code base. + + Compared to Lupine on QEMU/KVM, Unikraft is around 50% faster on both Redis and Nginx. These results may be due to overcutting in Lupine's official configuration, scheduling differences (we select Unikraft's cooperative scheduler since it fits well with Redis's single threaded approach), or remaining bloat in Lupine that could not be removed via configuration options. diff --git a/content/docs/concepts/security.mdx b/content/docs/concepts/security.mdx index f3d9814b..c1825042 100644 --- a/content/docs/concepts/security.mdx +++ b/content/docs/concepts/security.mdx @@ -112,6 +112,7 @@ impact on performance, and to easily try a wide range of different design choices in the security versus performance trade-off space (see graph below: each column is one such point in the design space). + + + + If you're interested in contributing to security features in Unikraft, or simply in following the discussion about ongoing security work, please feel free to diff --git a/content/docs/contributing/docs.mdx b/content/docs/contributing/docs.mdx index abe31451..f361a0ac 100644 --- a/content/docs/contributing/docs.mdx +++ b/content/docs/contributing/docs.mdx @@ -79,7 +79,7 @@ yarn run dev ``` You may need admin privileges to run the first 2 commands. -Open up your browser and point to http://localhost:3000 to check the deployed documentation website. +Open up your browser and point to to check the deployed documentation website. #### Building the Website Natively @@ -99,7 +99,7 @@ yarn install yarn run dev ``` -As above, open up your browser and point to http://localhost:3000 to check the deployed documentation website. +As above, open up your browser and point to to check the deployed documentation website. #### Using the Linter diff --git a/content/docs/internals/cross-compiling.mdx b/content/docs/internals/cross-compiling.mdx index 1eab1c06..0b649445 100644 --- a/content/docs/internals/cross-compiling.mdx +++ b/content/docs/internals/cross-compiling.mdx @@ -53,4 +53,4 @@ The actual right way of building apps on `AArch64` is by cross-compiling with `a However, `aarch64-none-elf` clashes with our expectations regarding the `emutls` and becomes unusable together with `clang`. -[^1]: https://opensource.apple.com/source/clang/clang-23/clang/tools/clang/www/features.html#performance +[^1]: diff --git a/content/releases/v0.15.0.mdx b/content/releases/v0.15.0.mdx index 007b88d5..19ecd6c4 100644 --- a/content/releases/v0.15.0.mdx +++ b/content/releases/v0.15.0.mdx @@ -21,7 +21,7 @@ Here is the full updates list: * `[app-duktape]`: Update setup for developer-centric scripts ([#10](https://github.com/unikraft/app-duktape/pull/10) by [@razvand](https:/github.com/razvand) * `[app-duktape]`: Add Musl support ([#9](https://github.com/unikraft/app-duktape/pull/9) by [@razvand](https:/github.com/razvand) * `[app-duktape]`: Added Makefile and Makefile.uk to duktape, including the necessary li… ([#7](https://github.com/unikraft/app-duktape/pull/7) by [@justin9939](https:/github.com/justin9939) - * `[app-duktape]`: lib/duktape: port to musl addresses: [#3 (#6](https://github.com/unikraft/app-duktape/pull/3 (#6) by [@JoachimBose](https:/github.com/JoachimBose) + * `[app-duktape]`: lib/duktape: port to musl addresses: [#6](https://github.com/unikraft/app-duktape/pull/6) by [@JoachimBose](https:/github.com/JoachimBose) * `[app-helloworld-cpp]`: `README.md`: Use correct Firecracker JSON file name ([#22](https://github.com/unikraft/app-helloworld-cpp/pull/22) by [@razvand](https:/github.com/razvand) * `[app-helloworld-cpp]`: Stefan jum/add dev content ([#21](https://github.com/unikraft/app-helloworld-cpp/pull/21) by [@StefanJum](https:/github.com/StefanJum) * `[app-helloworld-cpp]`: Add KraftKit configuration file for KraftCloud ([#20](https://github.com/unikraft/app-helloworld-cpp/pull/20) by [@razvand](https:/github.com/razvand) @@ -297,5 +297,5 @@ Here is the full updates list: * `[lib-libcxx]`: Assign `-Wno-keyword-compat` to clang only ([#35](https://github.com/unikraft/lib-libcxx/pull/35) by [@skuenzer](https:/github.com/skuenzer) * `[lib-libelf]`: Set `ELFTC_HAVE_MMAP` to `1` ([#3](https://github.com/unikraft/lib-libelf/pull/3) by [@mogasergiu](https:/github.com/mogasergiu) * `[lib-sqlite]`: `Makefile.uk`: Register library using `addlib_s` ([#8](https://github.com/unikraft/lib-sqlite/pull/8) by [@andreittr](https:/github.com/andreittr) - + A big thank you also to all those who helped in the [review process](unikraft.org/docs/contributing/review-process/): [Adina-Maria Vaman](https://github.com/adinamariav), [Andra Paraschiv](https://github.com/andraprs), [Andrei Tatar](https://github.com/andreittr), [Andrei Topală](https://github.com/Krechals), [Cezar Crăciunoiu](https://github.com/craciunoiuc), [Delia Pavel](https://github.com/DeliaPavel), [Eduard Vintilă](https://github.com/eduardvintila), [Eduard-Florin Mihăilescu](https://github.com/Starnox), [Ioan-Teodor Țeugea](https://github.com/John-Ted), [Jakub Ciolek](https://github.com/jake-ciolek), [Marco Schlumpp](https://github.com/mschlumpp), [Maria Sfîrăială](https://github.com/mariasfiraiala), [Michalis Pappas](https://github.com/michpappas), [Radu Nichita](https://github.com/RaduNichita), [Rareș Miculescu](https://github.com/rares-miculescu), [Răzvan Deaconescu](https://github.com/razvand), [Răzvan Vîrtan](https://github.com/razvanvirtan), [Robert Kuban](https://github.com/kubanrob), [Sergiu Moga](https://github.com/mogasergiu), [Simon Kuenzer](https://github.com/skuenzer), [Ștefan Jumarea](https://github.com/StefanJum), [Tianyi Liu](https://github.com/i-Pear).