我向欧洲发送 IP 数据包的速度比向屏幕发送像素的速度还快。这有多糟糕?
如果这不是约翰·卡马克 (John Carmack),我会将其归类为“互联网愚蠢”。
但这是约翰·卡马克。
这怎么可能是真的?
为了避免讨论推文中到底是什么意思,我希望得到以下答案:
在最佳情况下,从软件触发数据包到驱动程序级别以上的软件接收到数据包,将单个 IP 数据包从美国的服务器发送到欧洲的某个地方需要多长时间?
从驱动程序级别之上的软件改变像素的值开始测量,在最佳情况下,一个像素要花多长时间才能显示在屏幕上?
即使假设跨大西洋连接是金钱可以买到的最好的光纤电缆,并且约翰就坐在他的 ISP 旁边,数据仍然必须编码在 IP 数据包中,从主内存传输到他的网卡,从那里通过墙上的电缆进入另一栋建筑,可能会跳过那里的几台服务器(但我们假设它只需要一个中继),穿过海洋光子化,由光传感器转换回电脉冲,最后由另一张网卡解释。我们就到此为止吧。
至于像素,这是一个简单的机器字,它通过 PCI Express 插槽发送,写入缓冲区,然后刷新到屏幕上。即使考虑到“单个像素”可能会导致整个屏幕缓冲区传输到显示器,我也不认为这怎么会更慢:它不像是“一个接一个”地传输比特——相反,它们是连续的电脉冲,它们之间没有延迟地传输(对吗?)。
答案1
向远程主机发送数据包的时间是 ping 报告时间的一半,该时间用于测量往返时间。
我测量的显示器是索尼 HMZ-T1连接至PC的头戴式显示器。
为了测量显示延迟,我编写了一个小程序,该程序位于一个自旋循环中,轮询游戏控制器,每当按下按钮时,清除为不同的颜色并交换缓冲区。我用 240 fps 的摄像头录制显示游戏控制器和屏幕的视频,然后计算按下按钮和屏幕开始显示变化之间的帧数。
游戏控制器以 250 Hz 的频率更新,但没有直接的方法测量输入路径上的延迟(我希望我仍然可以将东西连接到并行端口并使用输入/输出 Sam 指令)。作为控制实验,我在具有 170 Hz 垂直回扫的旧 CRT 显示器上进行了相同的测试。Aero 和多台显示器可能会带来额外的延迟,但在最佳条件下,您通常会在按下按钮后两个 240 Hz 帧的屏幕上的某个点(禁用垂直同步)看到颜色变化。似乎有 8 毫秒左右的延迟通过USB 接口处理,但我希望在将来能更好地解决这个问题。
桌面液晶显示器需要 10+ 240 Hz 帧才能显示屏幕变化的情况并不罕见。索尼 HMZ 平均需要 18 帧左右,即总共 70+ 毫秒。
这是在多显示器设置中,所以有几帧是驱动程序的故障。
延迟是技术本身固有的。LCD 面板实际变化需要 4-20 毫秒,具体取决于技术。单芯片液晶显示模块显示器必须缓冲一个视频帧,才能将像素封装转换为连续的色彩平面。激光光栅显示器需要一定量的缓冲,才能将光栅返回转换为来回扫描模式。帧顺序或上下分割立体 3D 显示器有一半时间无法更新中间帧。
OLED展示应该是最好的,正如易美金 Z800,其延迟与 60 Hz CRT 相当,比我测试过的任何其他非 CRT 都要好。
索尼的糟糕表现是由于软件工程不佳。一些电视功能(如运动插值)需要缓冲至少一帧,如果缓冲更多帧可能会更好。其他功能(如浮动菜单、格式转换、内容保护等)可以以流式传输方式实现,但最简单的方法是在每个子系统之间进行缓冲,在某些系统中,缓冲可能多达六帧。
这非常不幸,但都是可以解决的,我希望将来在延迟问题上能更多地依靠显示器制造商。
答案2
有些显示器可能会有明显的输入延迟
与糟糕的显示器和显卡组合相比,拥有出色的网络连接是可能的
资料来源:
因此,在 30FPS 下,我们获得 8 帧/133 毫秒的基准性能,但在第二个视频片段中,游戏已降至 24FPS,从我扣动扳机到 Niko 开始霰弹枪射击动画之间明显有 12 帧/200 毫秒的延迟。这是 200 毫秒加上屏幕的额外延迟。哎哟。
显示器可以再增加 5-10ms
因此,主机的延迟可能会高达 210 毫秒
而且,根据 David 的评论,发送数据包的最佳情况应该是 70ms 左右
答案3
演示显示器上的输入延迟非常简单,只需将 LCD 放在 CRT 旁边,然后显示一个时钟或一个充满屏幕的动画并记录下来。延迟可能为一秒或更长时间。由于游戏玩家等对此更加关注,LCD 制造商已加强了对延迟的控制。