为了这两个”提高性能“的特性,CPU 还要集成专门的安全检查和调度单元,操作系统更是为此要设计好多复杂的安全组件,增加了大量的不安全因素,最终是否会得不偿失?如果改成传统的顺序执行,CPU 是否没必要进行代码的安全检查?操作系统的内核会不会要精简许多?
顺序执行的情况下,有没有其它办法提高执行效率?比如单纯提高频率?
1
d4rkb1ue 2018-01-06 21:35:19 +08:00 6
最直观的。因为代码本来就不是顺序的,会出现分支(判断,循环)。而现代处理器的流水线很长,因此也可以同时处理多条指令,来提升效率。 但是因为不是顺序的指令,不能因为一旦出现分叉整个处理器就停止,静待这个分叉解决,这太浪费资源了(分叉是很频繁地,if/for/while 有那么多)。所以需要 预测执行,如果分叉了,就把已经处理的数据抛弃。还有那么点概率没分叉,那就赚了。
乱序执行的一个目的也是为了解决冲突,提升利用率。想想这样的一个场景,一个 10 万次循环为一个数据加一,然后另一个 10 万个循环为另一个数据加一。因为在循环里每个数据都是在上一个数据得出之后再修改的,所以必须顺序执行,等待上一个执行完毕再执行下一个。那么这 20 万个操作全都是串行的,先循环 10 万,再循环另一个 10 万。如果可以乱序,这两个循环互不干涉,那么就可以在每个 cycle 里乱序、同时执行 2 个循环中的一步。这样就节约了一半的时间。(这只是个例子,展现乱序执行的意义)。 纯顺序执行,要么提升频率,要么延长流水线,但是问题在于,没有纯顺序执行的场景啊。什么代码里完全没有分支? |
2
hadoop 2018-01-06 21:43:20 +08:00 via Android 1
计算机体系结构研究了这么多年的流水线,超标量,多发射,乱序执行,都是为了性能啊
|
3
breeswish 2018-01-06 21:47:32 +08:00 1
楼主可以学习一下「计算机组成原理」
|
4
pq OP @d4rkb1ue 哦,我把我说的“顺序执行”定义为“以指令序列来执行”,分支与循环,也是一种序列。
我不是专业人士,但你这么一解释,我倒是理解了乱序执行与预测执行的必要性了。但我觉得,具有这两种特性的 CPU,很难做到绝对的安全,知乎上看了些牛人的分析,觉得要完全杜绝普通应用非授权地访问敏感数据,非常困难,毕竟道高一尺,魔高一丈,黑客们总能找到办法的。 |
5
Shura 2018-01-06 21:53:42 +08:00
都是为了提高 CPU 利用率,准确的说是提供 ALU 的利用率。
|
6
zn 2018-01-06 22:12:50 +08:00 1
楼主可能以为现代 CPU 就像是个考 60 分万岁多一份浪费的大学生,这道题不做换一道也能考达到及格线。
但实情是:现代的 CPU,要想在激烈的商业竞争中能活下来的,你必须得考 95、96、97 分,在这种情况下,再往上提高一分都是很困难的,所以任何一中能提高性能的技巧基本都用上了。当然你可以不用,但是如果你不用那你很可能会落后于竞争对手,如果然后你就快 over 了。就算没 over 也只能靠低价捡剩饭吃。 |
7
linboki 2018-01-06 22:28:13 +08:00 via Android
想的太多,知道的太少——自寻烦恼
|
8
wdlth 2018-01-06 22:31:59 +08:00
先不说 CPU 里面,连编译器都会预测代码里面的分支、循环等情况,在有限的资源下提高性能。
|
9
wwqgtxx 2018-01-06 22:45:35 +08:00
打个不太恰当的比喻,就好比投资是有风险的,需要你猜测风险来判断下一步的操作,那么只要是猜测就肯定还是有错误的,就肯定会存在亏损,所以为了安全大家就把钱存在自己家保险柜不就安全了么
|
11
est 2018-01-06 23:15:12 +08:00
AMD 当年主频打到了 4G,依然被 Intel 独步天下的 90% 缓存命中率按在地上摩擦。
|
12
akira 2018-01-06 23:23:13 +08:00
早期的时候,单纯提高频率确实是有效的,甚至有个著名的摩尔定律。
后面频率提不动了,就弄多核。 多核升不上去了,就来搞乱序了。 intel 也不想的啊,能怎么办,他们也很绝望啊。 |
14
yksoft1 2018-01-07 11:37:26 +08:00
性能和安全本来就是互相拮抗的一对啊。
你想想。去 TMD 什么内存保护,做一个 64 位长模式、单用户单任务的超级 DOS,岂不是效率最高,啥都不用管 |
15
zn 2018-01-07 11:57:40 +08:00
@kindjeff 这不是作弊,毕竟作弊是没法每次都做到比第一名还高分的。这次 AMD 受影响比 Intel 小只是因为 AMD 的架构不一样,恰好就躲开了这种攻击。而 AMD 一直打不过 Intel 只能说明 AMD 技不如人,综合比分比 Intel 低。
|
16
suspended 2018-01-07 14:27:36 +08:00
Intel 预测执行策略太激进了,你看 AMD 就没受到 Meltdown 的影响,或者影响很小,没有可靠 PoC。
|
17
xieyudi1990 2018-01-08 09:31:42 +08:00 via Android
@akira 60 年代就有乱序的 CPU 了。
PC 的话第一个乱序的应该是 95 年的 Pentium Pro,单 CPU 多核应该是 05 年的 Pentium D。所以至少 PC 是是先乱序,再多核。 @yksoft1 一直觉得安全这东西就很扯。CPU 从 archtecture,design,verification 到 bios,os,user code 耗费这么多精力搞的东西,到头来还是被轻易破开。感觉就是一些人拍脑袋弄的一套安全系统忽悠公司,公司拿出去忽悠用户。给一堆不管软件的设计验证,然后卖给不管硬件的半懂不懂地拿过来用。哪天出来一个从 silicon 到 os 整个 flow 都懂的,就被轻易破解。 每次看到 cpu rtl 里那些为了安全加的一堆逻辑就很烦。没办法,除非人类补完计划成真。 |