IncludeOS | A minimal , resource efficient unikernel for cloud services

 by   includeos C++ Version: v0.15.0 License: Apache-2.0

kandi X-RAY | IncludeOS Summary

kandi X-RAY | IncludeOS Summary

IncludeOS is a C++ library. IncludeOS has no bugs, it has no vulnerabilities, it has a Permissive License and it has medium support. You can download it from GitHub.

A minimal, resource efficient unikernel for cloud services
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              IncludeOS has a medium active ecosystem.
              It has 4700 star(s) with 355 fork(s). There are 177 watchers for this library.
              OutlinedDot
              It had no major release in the last 12 months.
              There are 74 open issues and 612 have been closed. On average issues are closed in 119 days. There are 4 open pull requests and 0 closed requests.
              It has a neutral sentiment in the developer community.
              The latest version of IncludeOS is v0.15.0

            kandi-Quality Quality

              IncludeOS has 0 bugs and 0 code smells.

            kandi-Security Security

              IncludeOS has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              IncludeOS code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              IncludeOS is licensed under the Apache-2.0 License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              IncludeOS releases are available to install and integrate.
              Installation instructions are not available. Examples and code snippets are available.
              It has 2275 lines of code, 145 functions and 73 files.
              It has high code complexity. Code complexity directly impacts maintainability of the code.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of IncludeOS
            Get all kandi verified functions for this library.

            IncludeOS Key Features

            No Key Features are available at this moment for IncludeOS.

            IncludeOS Examples and Code Snippets

            No Code Snippets are available at this moment for IncludeOS.

            Community Discussions

            Trending Discussions on IncludeOS

            QUESTION

            How does KVM/QEMU and guest OS handles page fault
            Asked 2020-Mar-15 at 20:20

            For example, I have a host OS (say, Ubuntu) with KVM enabled. I start a virtual machine with QEMU to run a guest OS (say, CentOS). It is said that to the host OS, this VM is just a process. So in the host's point of view, it handles page fault as usual (e.g., allocate page frame as needed, swap pages based on active/inactive lists if necessary).

            Here is the question and my understanding. Within the guest OS, as it's still a full-fledged OS, I assume it still has all mechanisms handling virtual memory. It sees some virtualized physical memory provided by QEMU. By virtualized physical memory I mean the guest OS doesn't know it is in a VM, and still works as it would on a real physical machine, but what it has are indeed an abstraction given by QEMU. So even if a page frame is allocated to it, if that's not in guest's page table, the guest OS will still trigger a page fault and then map some page to the frame. What's worse, there may be a double page fault, where the guest first allocate some page frames upon page fault, which triggers page fault at host OS.

            However, I also heard something like shallow (or shadow) page table which seems could optimize this unnecessary double page fault and double page table issue. I also looked at some other kernel implementation, specifically unikernels, e.g., OSv, IncludeOS, etc. I didn't find anything related to page fault and page table mechanisms. I did see some symbols like page_fault_handler but not as huge as what I saw in Linux kernel code. It seems memory management is not a big deal in these unikernel implementations. So I assume QEMU/KVM and some Intel's virtualization technologies have already handled that.

            Any ideas in this topic? Or if you have some good references/papers/resources to this problem, or some hints would be very helpful.

            ...

            ANSWER

            Answered 2020-Mar-15 at 20:20

            There are two ways for QEMU/KVM to support guest physical memory: EPT and shadow page tables. (EPT is an Intel-defined mechanism. Other processors support something similar, which I won't talk about here.)

            EPT stands for Extended Page Tables. It is a second level of paging supported by the CPU in addition to the regular processor page tables. While running in a VM, the regular page tables are used to translate Guest Virtual Addresses into Guest Physical Addresses, while the EPT tables are used to translate Guest Physical Addresses into Host Physical Addresses. This double-level translation is performed for every memory access within the guest. (The processor TLBs hide most of the cost.) EPT tables are managed by the VMM while the regular page tables are managed by the guest. If a page is not present in the guest page tables, it causes a page fault within the guest, exactly as you have described. If a page is present in the guest page tables but not present in the EPT, it causes an EPT violation VM exit, so the VMM can handle the missing page.

            Shadow page tables are used when EPT is not available. Shadow page tables are a copy of the guest page tables which incorporate both the GVA to GPA and GPA to HPA mappings within a single set of page tables. When a page fault occurs, it always causes a VM exit. The VMM checks whether the missing page is mapped in the guest page tables. If it is not, then the VMM injects the page fault into the guest for it to handle. If the page is mapped in the guest page tables, then the VMM handles the fault as it would for an EPT violation. Efficient management of shadow page tables across multiple processes within the guest can be very complex.

            EPT is both simpler to implement and has far better performance for most workloads, because page faults are generated directly to the guest OS, which is generally where they need to be handled. The use of shadow page tables requires a VM exit for every page fault. However, shadow page tables may have better performance for a few specific workloads that cause very few page faults.

            Source https://stackoverflow.com/questions/60694243

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install IncludeOS

            You can download it from GitHub.

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries

            Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Reuse Pre-built Kits with IncludeOS

            Consider Popular C++ Libraries

            tensorflow

            by tensorflow

            electron

            by electron

            terminal

            by microsoft

            bitcoin

            by bitcoin

            opencv

            by opencv

            Try Top Libraries by includeos

            acorn

            by includeosC++

            mana

            by includeosC++

            demo-examples

            by includeosC++

            NaCl

            by includeosPython

            includeos.org

            by includeosJavaScript