通过专门构建的操作系统获得性能

use*_*170 0 performance operating-system

让我们采取一个简单的CPU绑定程序,例如暴力强制素数,这可能偶尔将它们保存到SD卡.

当今程序的效率低下包括解释和虚拟机等.因此,为了速度,让我们抛弃它们,并使用编译语言.

现在,虽然我们现在拥有可以直接在处理器上运行的代码,但我们仍然拥有操作系统,它将在不同进程之间进行多路复用,运行自己的代码,管理内存以及执行其他会降低程序执行速度的事情.

如果我们编写自己的操作系统,只运行我们的程序,我们可以期待看到什么样的加速因素?
我确定可能会有很多变量,所以请详细说明你是否愿意.

qdo*_*dot 5

看看Return Infinity的产品http://www.returninfinity.com/(我没有任何关联),并进行实验.

我自己的超级经验表明,不吃的TLB(几乎全部),通过运行一个平面内存模式,与缺乏上下文的内核和用户态之间切换相结合,能够而且确实会加速某些任务 - 尤其是那些涉及到传递网络消息(MAC级别,甚至TCP,为什么麻烦),以及暴力计算(由于缺乏内存管理).

在蛮力计算超出TLB或高速缓存的大小,你可以期望大约5-15%的性能增益相比,不得不做基于RAM的转换表的查找 - 罚款是每一个软件错误是完全无人防守的(你可以锁定一些静态页面与单片链接,你).

在高带宽工作中,特别是在大量小消息传递的情况下,通过完全删除(多任务)操作系统或将应用程序加载为内核,可以通过内核空间轻松获得500%的加速驱动程序,也绕过了整个抽象.我们已经能够将MAC层ping的网络延迟从18us降低到1.3us.

在适合L1缓存的计算中,我预计会有很小的改进(大约1%).

这一切都很重要吗?是的,不是.如果您的硬件成本远远超过您的工程成本,并且您已经完成了所有可以想到的算法改进(更好的是,证明完成的计算完全是结果所需的计算!) - 这可以提供有意义的性能优势.超级计算机额外3%(总体平均成功率)的电费约为800万美元/年,不包括硬件摊销,价值2400美元/年.足以支付工程师一个月的时间来优化它运行的最常见任务:).