从1977-2017(2017)的计算机输入延迟

2020-12-04 20:53:53

计算机延迟时间:1977-2017年,我有种this的感觉,我今天使用的计算机比我小时候使用的计算机要慢。通常,我不相信这种感觉,因为在经验研究中,人类的感知被证明是不可靠的,所以我随身携带了一个高速摄像头,并测量了过去遇到的设备的响应延迟几个月。结果如下:

这些是对按键和终端中字符显示之间的等待时间的测试(更多信息,请参见附录)。结果从最快到最慢排序。在“延迟”列中,随着设备变慢,背景从绿色变为黄色,从红色变为黑色,随着设备变慢,背景变得更暗。没有设备是绿色的。在同一台计算机上测试了多个操作系统时,操作系统以粗体显示。在同一台计算机上测试多个刷新率时,刷新率以斜体表示。

在“年份”列中,随着设备的老化,背景变得更暗,更紫。如果旧设备的运行速度较慢,那么我们在阅读下表时会看到年份列变暗。

接下来的两列显示了时钟速度和处理器中的晶体管数量。较小的数字则更暗和更蓝。如上所述,如果时钟变慢和较小的芯片与较长的延迟相关联,那么当我们在桌子底下时,列会变暗,但是,如果有的话,情况似乎恰恰相反。

作为参考,表中插入了从纽约到纽约的光纤通过东京和伦敦回传到全球的数据包的等待时间。

如果从总体结果来看,最快的机器是古老的。较新的机器无处不在。带有异常高刷新率显示的高级游戏设备几乎可以与70年代末和80年代初的机器竞争,但是“普通”现代计算机无法与30到40年的旧机器竞争。

我们还可以看一下移动设备。在这种情况下,我们将在浏览器中查看滚动延迟:

如上所述,当设备变慢时,结果将按延迟排序,并从绿色到黄色到红色到黑色进行颜色编码。同样如上所述,随着设备的老化,年份会变紫(变暗)。

如果我们排除游戏男孩的颜色(这是与其他设备不同的设备类别),则所有最快的设备都是Apple手机或平板电脑。下一个最快的设备是黑莓q10。尽管我们没有足够的数据来真正说明为什么非Apple设备对黑莓q10的反应速度如此之快,但一个合理的猜测是它具有实际按钮的帮助,该按钮比触摸屏更容易实现,并且延迟时间短。带有实际按钮的其他两个设备是Gameboy颜色和kindle 4。

在配备了iPhone和非固定按钮设备之后,我们拥有了各种不同年龄的Android设备。在底部,我们有古老的掌上电脑1000,其后是kindle。手掌受触摸屏和显示屏的束缚,触摸屏和显示屏的时代要慢得多,并且kindle使用电子墨水显示屏,这比现代手机上使用的显示屏要慢得多,因此看到这些设备位于底部并不奇怪。 。

与不是最新版ipad pro的现代计算机相比,Apple 2在输入和输出方面均具有显着优势,并且除了Apple 2以来最精心编写的代码外,它在所有输入和输出之间均具有优势。不必处理上下文切换,不同进程之间的切换所涉及的缓冲区等。

在输入上,如果我们看一下现代键盘,通常会看到它们以100 Hz至200 Hz的频率扫描输入(例如,ergodox声称以167 Hz的频率扫描)。相比之下,苹果2e有效扫描556 Hz。有关详细信息,请参见附录。

如果我们查看流水线的另一端,即显示,我们还会发现那里的延迟过大。我有一个显示器,显示在盒子上的切换时间为1毫秒,但如果我们查看从第一次在屏幕上看到它的痕迹到该字符稳定为止,显示器实际显示一个字符需要多长时间。可以很容易地是10毫秒。您甚至可以通过一些高刷新率的显示器(据称延迟时间长)来看到这种效果。

在144 Hz时,每帧花费7毫秒。屏幕的更改将有0到7毫秒的额外延迟,因为它等待渲染之前等待下一个帧边界(平均而言,我们期望最大延迟的一半,即3.5毫秒)。最重要的是,即使我在家中的显示器宣告了1毫秒的切换时间,但实际上一旦显示器开始改变颜色,它要花费10毫秒才能完全改变颜色。当我们将等待下一个帧的延迟与实际颜色更改的延迟相加时,我们得到的预期延迟为7/2 + 10 = 13.5ms

对于Apple 2e中的旧CRT,我们希望60 Hz刷新(16.7 ms / 2)的一半加上可忽略的延迟(即8.3 ms)。今天这很难被击败:最先进的“游戏监视器”可以将总的显示延迟降低到相同的范围内,但是就市场份额而言,很少有人拥有这种显示器,甚至被宣传为快速竞技场的显示器实际上并不总是很快。

如果我们看一下输入和输出之间发生的情况,那么即使不撰写整本书,也无法描述现代系统和apple 2e之间的差异。为了了解现代机器的情况,这里是前iOS / UIKit工程师Andy Matuschak对iOS上发生的事情的简要概述,他说应该带有免责声明,“这是我过时的记忆日期信息”:

硬件具有自己的扫描速率(例如,最近的触摸屏为120 Hz),因此可能导致长达8毫秒的延迟

事件通过固件传递给内核;这相对较快,但系统调度问题可能会在此处引入几毫秒

内核通过一个mach端口将这些事件传递给特权订户(在此称为背板);可能会有更多的调度损失

篮板必须确定哪个进程应该接收事件;这就需要锁定共享该信息的窗口服务器(返回内核,更多的调度延迟)

背板将该事件发送到相关进程;处理之前可能会有更多的调度延迟

这些事件仅在主线程上出队;主线程上可能会发生其他事情(例如由于计时器或网络活动),因此可能会导致更多延迟,具体取决于该工作

应用程序决定如何处理事件;应用程式的编写不佳,因此通常需要花费许多毫秒。结果将汇总到数据驱动的更新中,并通过IPC发送到渲染服务器。如果由于事件而导致应用需要新的共享内存视频缓冲区,则该事件将在任何不重要的事件发生时发生,将需要往返IPC到渲染服务器;更多的调度延迟

(微不足道的更改是渲染服务器可以合并的东西,例如仿射变换更改或图层的颜色更改;非平凡的更改包括与文本,大多数栅格和矢量操作有关的所有内容)

这些类型的更新通常最终会被三重缓冲:GPU现在可能正在使用一个缓冲区进行渲染;渲染服务器可能将另一个缓冲区排队等待下一帧;而您想吸引到另一个。这里有更多(跨进程)锁定;更多的内核之旅。

每N Hz,渲染树就会刷新到GPU,然后要求GPU填充视频缓冲区实际上,实际上,出于上述原因,屏幕缓冲区通常有三倍缓冲:现在将GPU绘制成一个;可能正在读取另一个,以准备另一个框架

每N Hz,该视频缓冲区就会与另一个视频缓冲区交换,并且显示器会直接从该内存驱动(此N Hz不一定与上一步的N Hz对齐)

安迪说:“这里实际发生的工作量通常很小。几毫秒的CPU时间。关键开销来自:”

跨越流程边界的许多移交,每个移交都是安排其他事情的机会,而不是输入事件的后果

相比之下,Apple 2e基本上没有交接,锁定或进程边界。运行一些非常简单的代码,并将结果写入显示内存,这将导致在下一次扫描时更新显示内容。

对计算机结果感到好奇的一件事是刷新率的影响。从24 Hz到165 Hz,我们得到了90毫秒的改善。在24 Hz时,每帧花费41.67 ms,在165 Hz时,每帧花费6.061 ms。正如我们在上面看到的,如果没有任何缓冲,我们希望帧刷新所增加的平均延迟在前一种情况下为20.8毫秒,在后一种情况下为3.03毫秒(因为我们希望获得统一的帧中的随机点,必须等待0毫秒到完整的帧时间之间),这大约相差18毫秒。但实际上相差90毫秒,这意味着我们的等待时间等于(90-18)/(41.67-6.061)= 2个缓冲帧。

如果我们在同一台机器(未显示)上绘制来自其他刷新率的结果,我们可以看到它们大致符合“最佳拟合”曲线,如果我们假设对于运行Powershell的那台机器,无论刷新率如何,我们都会获得价值2.5帧的延迟。这使我们可以估计,如果我们为这款低延迟游戏机配备无穷大Hz显示器,则延迟将是什么-我们期望延迟为140-2.5 * 41.67 = 36 ms,几乎与标准机的速度一样快70年代和80年代。

今天人们购买的几乎所有计算机和移动设备都比70年代和80年代的普通型号的计算机慢。从30到40年前,低延迟游戏台式机和ipad pro可以进入与快速游戏机相同的范围,但是大多数现成的设备都还没有。

如果我们必须找出导致延迟膨胀的一个根本原因,我们可能会说这是因为“复杂性”。当然,我们都知道复杂性是不好的。如果您过去十年来参加过一次非学术性的非企业技术会议,那么很有可能至少有一次关于复杂性是万恶之源的演讲,我们应该渴望减少复杂性。

不幸的是,要消除复杂性要比发表演讲说要消除复杂性要难得多。许多复杂性直接或间接为我们买了东西。当我们看一看精美的现代键盘与Apple 2键盘的输入时,我们发现使用功能相对强大且价格昂贵的通用处理器来处理键盘输入可能比键盘专用逻辑要慢,这既简单又容易。更便宜但是,使用处理器使人们能够轻松自定义键盘,并且还带来了将键盘从硬件“编程”到软件的问题,这降低了键盘的制造成本。较昂贵的芯片会增加制造成本,但是考虑到这些小批量手工键盘的成本中有多少是设计成本,为了简化编程,似乎可以用贸易成本来代替制造成本。

我们在管道的每个部分都看到了这种折衷。最大的例子之一是您可能在现代台式机上运行的操作系统,而不是在Apple 2上运行的循环。现代操作系统使程序员可以编写通用代码,以处理在同一台计算机上同时运行其他程序的问题,并且这样做具有相当合理的总体性能,但是我们为此付出了巨大的复杂性成本,而使这一简单操作所涉及的越区切换会导致大量的等待时间损失。

许多复杂性都可以称为意外复杂性,但由于它非常方便,因此大部分意外复杂性都在这里。从硬件体系结构到系统调用接口再到我们使用的I / O框架的每个级别,我们都承担着复杂性,如果我们今天坐下来重新编写所有系统及其接口,可以消除很多复杂性,但是重新发明宇宙以降低复杂性太不方便了,我们从规模经济中受益,因此我们只能依靠自己拥有的东西生活。

出于这些原因以及更多原因,在实践中,解决“过分”复杂性导致的性能不佳的方法通常是增加更多的复杂性。尤其值得一提的是,我们所看到的使我们回到30到40年前最快的机器的速度上的收益,并非来自听从为降低复杂性而进行的劝告,而是来自更多的复杂性。

ipad pro是现代工程的壮举。增加输入和输出的刷新率以及确保软件管道没有不必要的缓冲的工程非常复杂!高刷新率的显示器的设计和制造可以降低系统延迟,而且对于标准的60 Hz显示器来说,这并不是必需的,而是非常复杂的。

实际上,这是减少延迟的常见主题。减少延迟的常见技巧是添加缓存,但是将缓存添加到系统会使它更加复杂。对于产生新数据且无法容忍缓存的系统,解决方案通常更加复杂。例如,大规模的RoCE部署。这些可以将远程数据访问延迟从毫秒范围降低到微秒范围,从而实现了新的应用程序类别。然而,这在复杂性上付出了巨大的代价。早期的大规模RoCE部署很容易就花费了数十个人的时间才能获得正确的解决,同时也带来了巨大的运营负担。

有点荒唐的是,现代游戏机的运行速度是苹果2的4,000倍,而CPU的晶体管数量是500,000倍(GPU的晶体管数量是2,000,000x),它可能可以管理与苹果2相同的延迟。如果我们有一台刷新率接近3倍的显示器,则在非常仔细编码的应用程序中使用apple 2。可能更荒谬的是,powerspec g405的默认配置具有直到2017年10月为止最快的单线程性能,从键盘到屏幕的延迟更长(大约3英尺,也许是实际电缆的10英尺)。而不是在全球范围内发送数据包(从纽约市到东京再到伦敦再到纽约再到16187英里,这更多是因为使用了尽可能短的光纤长度造成的成本)。

从好的方面来说,我们可以说已经摆脱了延迟的黑暗时代,现在可以组装一台计算机或购买一台平板电脑,其延迟范围与您在70年代和80年代就可以买到的相同。这让我想起了屏幕分辨率和在90年代的CRT中,直到最近,CRT才能提供比可承受的非便携式LCD更好的分辨率和更高的像素密度。 4k显示屏现在已成为正常且价格合理的8k显示屏即将出现,超越了我们在消费者CRT上看到的一切。我不知道我们会在延迟方面看到相同的改进,但是可以希望。有一些开发人员为使用某些经过非常仔细编码的应用程序的人改善了使用体验,但是尚不清楚什么力量可以导致大多数用户看到的默认体验得到显着改善。

延迟很重要!对于非常简单的任务,人们可以感知到2 ms或更短的延迟。而且,增加的等待时间不仅对用户而言是显而易见的,而且还会导致用户不太准确地执行简单任务。如果您想直观地了解延迟的情况,而又没有一台超高速的旧计算机,请查看此有关触摸屏延迟的MSR演示。

关于响应时间的最常引用的文档是尼尔森小组关于响应时间的文章,该文章声称低于100ms的延迟是等效的,并且被认为是瞬时的。一种简单的方法来确定这是错误的方法是进入终端并尝试睡眠0;否则,请执行以下操作。回声" pong" vs.睡眠0.1;回声"测试" (或者为此,尝试玩没有延迟补偿的旧游戏,例如地震1,ping 100毫秒甚至30毫秒ping,或者尝试在ping 30毫秒的终端上输入内容)。有关此延迟错误和其他延迟错误的详细信息,请参阅本文档,以了解有关延迟的常见误解。

吞吐量也很重要,但这已被广泛理解和衡量。如果您访问了几乎所有主流评论或基准测试站点,则可以找到各种各样的吞吐量度量,因此编写其他吞吐量度量的价值就较小。

苹果2e并没有使用编程的微控制器来读取键盘,而是使用了一种更为简单的定制芯片,用于读取键盘输入,即AY3600。如果查看AY 3600数据表,我们可以看到扫描时间为(90 * 1 / f),反跳时间列为strobe_delay。这些数量由一些电容器和一个电阻确定,对于Apple 2e来说似乎是47pf,100k欧姆和0.022uf。将这些数字插入AY3600数据表,我们可以看到f = 50 kHz,从而为我们提供了1.8 ms的扫描延迟和6.8 ms的去抖动延迟(假设值是准确的-电容器会随着时间的推移而退化,因此我们应该期待真实的在旧版Apple 2e上的延迟要短一些),内部键盘逻辑的时间不到8.6毫秒。

相比于具有167 Hz扫描速率的键盘,该键盘可以扫描两次以上以防抖动,等效数字为3 * 6 ms = 18 ms。扫描速度为100Hz时,变为3 * 10 ms = 30 ms。 18 ms至30 ms的键盘扫描加上去抖动延迟时间与我们进行一些初步的键盘延迟时间测量时所看到的一致。

作为参考,ergodox使用带有约80k晶体管的16 MHz微控制器,而apple 2e CPU是带有3.5k晶体管的1 MHz芯片。

正如我们已经看到的那样,原始处理能力对于解决管道中的延迟的许多原因没有多大帮助,例如不同进程之间的切换,因此,电话的功能要比具有较传统处理器高10倍的android手机即使iphone可以更快地渲染javascript繁重的页面,也不能保证它能更快地做出响应。

如果您与使用非Apple移动CPU的人交谈,您会发现它们运行的​​基准测试如dhrystone(合成基准,即使在1984年创建时也无关紧要)和SPEC2006(基准测试的更新版本)。如果您关心工作站工作负载(与移动工作负载完全不同),那么在90年代甚至是2000年代初就一直存在的工作站基准测试很重要。在制造组件的供应商的中间目标仅与实际用户体验之间存在弱关联的情况下,会出现此问题。我听说有人在研究像素电话,他们关心端到端的延迟,但是当您不得不使用针对dhrystone和dhrystone等进行了优化的组件时,很难获得良好的延迟。 SPEC2006。

如果您与Apple的人交谈,您会发现他们很笼罩,但是他们将端到端用户体验定位为目标的时间已经很长了,他们可以做到"全栈" android供应商难以实现的优化。它们并不是字面上不可能的,但是除非谷歌进行了优化并且谷歌没有进行优化,否则您几乎不可能看到必须通过操作系统线程化的芯片的更改。直到最近,对端到端体验的态度还是很认真的。

一个普遍的主题是在无法衡量的方面具有相对较差的性能,这是我们在查看终端延迟时看到的一个主题。在检查颞骨潜伏期之前,

......