仅内核模式的操作系统



一个普通的x86 CPU有两种不同的模式(这里我们可以再细分为保护环)。一个是用户模式,另一个是内核模式。

内核模式对硬件具有完全访问权限。基本上,在这里执行某些操作时应该小心。

出于安全考虑,一般应用程序(如web服务器)选择用户模式。

例如,要调用内核函数,必须进行代价高昂的上下文切换。

现在我的问题:除了在内核模式下运行普通应用程序是不负责任的这一事实外,理论上可以在内核模式下运行像简单HTTP服务器这样的应用程序。

然而,系统必须是完美的:HTTP服务器是无bug的。这在实践中基本上是不可能的。此外,CPU可能有一个安全漏洞,这使得这更加悲惨。

现在我们假设系统真的是100%完美的,我们将在内核模式下运行应用程序。这种性能差异明显吗?

有人尝试过并发布了基准测试吗?

是的,Linux有一段时间使用了TUX web服务器。几年前,它可能有一些生产用途,当时cpu速度较慢,安全威胁不那么严重。仅用于提供静态内容。摘自维基百科,浓缩:

TUX web服务器是GNU通用公共许可证(GPL)下许可的Linux内核内web服务器。它由Ingo Molnár维护。
[...]

TUX和其他web服务器的主要区别包括:

  • TUX部分运行在自定义版本的Linux内核中,而部分作为用户空间守护进程运行。(使用tux(2)系统调用)
  • 通过一个功能强大的网卡,TUX允许从页面缓存直接到网络的分散收集DMA。
  • TUX只能提供静态网页。

假设守护进程可以是一个"内核线程"而不是用户空间,也就是说,可以是一个运行在环0中的可调度任务。

kHTTPd是我认为同样的事情?它表示,它可以将对非静态内容的请求传递给像Apache这样的完整web服务器。网站有一些旧的基准测试,比如350MHz的K6-2,显示每秒请求数与并发请求数的对比,Apache的峰值约为500个请求/秒(对于通过100Mbit连接apachebench的1K文件)。Zeus管理大约1900 req/s,但kHTTPd最多处理大约2300 req/s,并发性不高。

我相信你现在可以谷歌其他基准的Tux/kHTTPd,现在你知道要搜索什么。

由于多核cpu,现代系统甚至可以用在用户空间运行的普通服务器来接近饱和10gb网络链接。所以这个想法在web服务中已经被抛弃了。

对于本地文件共享,NFSd仍然主要在内核中完成。


https://en.wikipedia.org/wiki/In-kernel_web_server说实际上有许多不同的操作系统,包括Solaris和HP-UX的实现。

相关内容

  • 没有找到相关文章

最新更新