如果在半虚拟化的子操作系统中使用轻量级流程模型(如Erlang)会怎么样?

如果在半虚拟化的子操作系统中使用轻量级流程模型(如Erlang)会怎么样?,erlang,operating-system,virtualization,Erlang,Operating System,Virtualization,如果web服务器的实现方式如下: 主机操作系统,例如Linux 启动此子操作系统的虚拟机(半虚拟化) 此子操作系统中的每个连接都有许多轻量级进程,它们通过子操作系统调用与outness进行交互 ? 在这种情况下 主机系统中无加工食品 隔离-无论虚拟机中发生什么,它都能保持良好的工作状态 我们启动本机编写的应用程序,并在出现问题时“让它失败”。或者关闭虚拟机 在虚拟化环境中处理网络流量总是会导致网络输入/输出操作的性能问题。例如,请参见本文: 所有传入的HTTP请求都需要由主机操作系统重定向到特定

如果web服务器的实现方式如下:

  • 主机操作系统,例如Linux
  • 启动此子操作系统的虚拟机(半虚拟化)
  • 此子操作系统中的每个连接都有许多轻量级进程,它们通过子操作系统调用与outness进行交互
  • ?

    在这种情况下

  • 主机系统中无加工食品
  • 隔离-无论虚拟机中发生什么,它都能保持良好的工作状态
  • 我们启动本机编写的应用程序,并在出现问题时“让它失败”。或者关闭虚拟机

  • 在虚拟化环境中处理网络流量总是会导致网络输入/输出操作的性能问题。例如,请参见本文:

    所有传入的HTTP请求都需要由主机操作系统重定向到特定的虚拟机中。这将导致在这些半虚拟化操作系统之间不断切换上下文,并增加网络I/O操作的额外开销

    Host OS receive a HTTP packet -> copy the packet to the VM's memory -> switch to the VM process -> inside the VM: receive the packet in the sub-OS network stack -> copy the packet to the receiving process (the web server) -> switch to the receiving process -> handle the request and return a response (with the same steps in reverse order)
    
    这对于所提到的其他好处来说是不错的,但是与标准解决方案相比,需要额外的硬件来处理相同的流量

    在Erlang中,它的虚拟机不是一个具有自己网络堆栈的独立操作系统,而是一个在托管操作系统上本机运行的标准进程。IO网络操作没有开销,因为它们都由主机操作系统处理

    Host OS receive a HTTP packet -> copy the packet to the Erlang VM's memory -> switch to the Erlang VM process -> handle the request and return a response
    

    在虚拟化环境中处理网络流量总是会导致网络输入/输出操作的性能问题。例如,请参见本文:

    所有传入的HTTP请求都需要由主机操作系统重定向到特定的虚拟机中。这将导致在这些半虚拟化操作系统之间不断切换上下文,并增加网络I/O操作的额外开销

    Host OS receive a HTTP packet -> copy the packet to the VM's memory -> switch to the VM process -> inside the VM: receive the packet in the sub-OS network stack -> copy the packet to the receiving process (the web server) -> switch to the receiving process -> handle the request and return a response (with the same steps in reverse order)
    
    这对于所提到的其他好处来说是不错的,但是与标准解决方案相比,需要额外的硬件来处理相同的流量

    在Erlang中,它的虚拟机不是一个具有自己网络堆栈的独立操作系统,而是一个在托管操作系统上本机运行的标准进程。IO网络操作没有开销,因为它们都由主机操作系统处理

    Host OS receive a HTTP packet -> copy the packet to the Erlang VM's memory -> switch to the Erlang VM process -> handle the request and return a response
    

    多年前,基于Erlang的操作系统是沿着Erlang VM和Mnesia开发的。因为OTP团队无法跟上硬件/驱动层的步伐,所以它无法工作。看来这个主意还不错。Erlang风格的进程和数据库,而不是现在的文件系统管理员。我想这可能会让你感兴趣:基于Erlang的操作系统是几年前沿着Erlang VM和Mnesia开发的。因为OTP团队无法跟上硬件/驱动层的步伐,所以它无法工作。看来这个主意还不错。Erlang风格的进程和数据库,而不是现在的文件系统管理员。我想你可能会感兴趣: