一千萬個為什麽

搜索

這意味著“在內存管理的代碼執行運行時(JVM,Go等)之外,unikernel的實用性開始快速下降”?



unikernel 的好處是管理受保護空間中的大量應用程序。 (有些人可能會說 Docker 的所有好處,但不包括所有開銷)。 (請不要誤會我 - 我是碼頭工的忠實粉絲,每天在我的工作中使用它20次 - 我將這個問題用作探索一個想法的一種方式)。

以下評論者寫道

另一個小問題是,除了內存管理的代碼執行運行時(JVM,Go等)之外,unikernel的實用性開始快速下降。

現在對我來說,用C ++(而不是內存管理)編寫的服務器應用程序與Java(內存管理)對unikernel的效用沒有影響。在這兩種情況下,您都可以獲得隔離的受保護方式來管理應用程序生命周期也許我錯過了一些東西。

My question is: What does it mean that "outside of memory-managed code execution runtimes (JVM, Go, etc.) the usefulness of unikernels starts to rapidly decline"?

轉載註明原文: 這意味著“在內存管理的代碼執行運行時(JVM,Go等)之外,unikernel的實用性開始快速下降”?

一共有 1 個回答:

那麽,我不是這方面的專家,事實上,我不明白這個說法。我已經讀了好幾遍,沒有進一步的解釋,所以我不能說這對我來說是有意義的,因為我不知道這個想法來自哪裏。

無論如何,我會盡力揭露我在這裏想到的。 關於托管和非托管代碼的主要區別是誰負責內存管理。如果是開發者,我們正在討論非托管代碼(C語言)。如果有垃圾收集器或任何其他類似的機制,它就被管理(Go,Java,.Net平臺,甚至Python,如果你想考慮它!!)。所以我不認為誰保留/釋放/無論什麽樣的記憶是多麽重要。

而且,恕我直言,unikernels的優點被認為是:

  1. Performance.
    1. Kernel modes are supressed (rings for x86, modes for arm, ...) and the application that will be running in the system, as well as any library needed, is compiled and statically linked into the kernel and the overhead introduced by these mechanism (syscalls basically) are supressed.
    2. Kernel is reduced as much as possible. No USB, bluetooth, support for lots of FS and unnecessary code is just not compiled. Kernel gets tiny.
  2. Security. This is a sensitive topic. Again, I think unikernels are safer than the traditinal ones. If it's a well-done job, there won't be nothing than the minimun functionalities implemented into the system, so this should reduce possible break-points. However, if any is found, this will be more dangerous. Every single process is running by the privileged privileged (and only, multiuser capabilities are disabled in unikernels) user in the system. Privileged Remote code executions can happend. However, it should be in a container-like system. You just can restart it and (in no persistent systems) all the work done by the attacker should be gone (but still an upgrade should be needed...).

正如我所說,我無法弄清楚這個聲明的原因,但我認為它與性能而不是安全有關。在那種情況下,我想知道為什麽應該是一個性能改進,以減少系統調用與容器相比,如果:

  1. 容器在正在運行的主機中共享正在運行的內核,因此只有一次內核正在運行時,系統調用只會執行一次。

  2. 正如所說的,Unikernels不使用系統調用,每個過程都以特權模式運行(可以直接訪問硬件)。但是,在這種情況下(我認為)就內核而言,你需要一個虛擬化層,因此總的運行內核是2.Unikernel沒有系統調用,但是主機內核是這樣的,所以系統調用不會被抑制並且只運行一次。當然,我假設沒有人會在裸機上運行unikernel系統。

所以,系統調用的數量應該與容器場景非常相似。不是嗎?