KxngDemon
2024-04-04T18:18:02+00:00
接第一集:聊聊1% low帧、掉帧、卡顿、帧数高但不流畅、不跟手这些概念
[url]https://bbs.nga.cn/read.php?tid=37349925[/url]
起因是Q群讨论DDR4和DDR5游戏性能的时候,自然而然的拿出了59172的那个测试数据。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-2fjyZqT3cS25o-zu.jpg[/img]
在这个数据里,DDR4和DDR5的平均帧几乎一样,但DDR5的1% low帧落后了DDR4接近10%。
这个数据表面上看起来没什么异样,就是很正常的表现了DDR4在这个游戏里强于DDR5,差了10%也不多。
但问题在于,在平均帧几乎一样的前提下,1% low帧相差10%,其实是个非常非常巨大的差距,远非表面的10%所能表示。
为了方便后续讲解,还是先从理论开始说起。
先回顾一下第一集中说到的1% low FPS average的定义:所有帧中,按顺序取帧生成时间最大的、占帧的总数量的1%的帧,计算这些帧的帧生成时间的平均值。使用公式“1000毫秒/帧生成时间平均值=帧率”,最终结果用帧率来表示。
1% low FPS其名字看起来像是帧率(FPS),但其本质是frametime。
考虑一个叫1% high frametime的定义:所有帧中,按顺序取帧生成时间最大的、占帧的总数量的1%的帧,计算这些帧的帧生成时间的平均值。
可以发现1% low FPS和1% high frametime的定义的唯一区别,就是有没有后半部分的“使用公式‘1000毫秒/帧生成时间平均值=帧率’,最终结果用帧率来表示。”,而前半部分是一模一样的。
换句话说,1% low FPS和1% high frametime就是同一个东西,只是表达方式不同。
后面会使用1% high frametime,以强调1% low FPS的frametime本质。
为了便于理解,可以简单的把帧分成两种:卡顿帧和非卡顿帧
平均帧(AVG FPS)很好的表示了非卡顿帧的平均frametime。
比如平均帧200FPS,说明非卡顿帧的平均frametime 5ms。
平均帧100FPS,说明非卡顿帧的平均frametime 10ms。
平均帧几乎一样,说明非卡顿帧的平均frametime几乎一样。
在正常的游戏的frametime数据中,非卡顿帧占了绝大部分,而卡顿帧只占了极小部分。
具体举例,比如99.99%都是非卡顿帧,只有0.01%才是卡顿帧。
那么1% high frametime的取值,就是取这占总数0.01%的卡顿帧,以及占总数0.99%的较大的非卡顿帧,计算这些帧的frametime的平均值。
显然,即便是已经在1% high frametime的样本里,卡顿帧和非卡顿帧的比例也达到了悬殊的1:99。
也就是说,非卡顿帧数量占据了样本的绝对主导地位, 非卡顿帧数量>>卡顿帧数量。
此时卡顿帧的frametime对1% high frametime的数值影响非常小,非卡顿帧的frametime对1% high frametime的数值影响非常大。
用一个比较通俗的说法来形容,就是1% high frametime的数值组成中,卡顿帧被大量的非卡顿帧稀释了。
就像1滴浓牛奶和99滴稀牛奶混合,最终的混合物的浓度就会绝大部分取决于稀牛奶的浓度。
在开头说的例子中,
已知非卡顿帧frametime几乎一样(因为平均帧几乎一样),卡顿帧出现频率几乎一样,连已经被严重稀释的1% high frametime的数值都能差出来10%,那么原始没有被稀释的卡顿帧frametime会差多少?
用比喻的说法就是:
已知稀牛奶浓度几乎一样,用同样的比例把稀牛奶和浓牛奶混合,连已经被严重稀释过的牛奶的浓度都能差出来10%,那么没有稀释时,弄牛奶的浓度会差多少?
下面举一些真实跑出来的数据的例子,看看在平均帧几乎一样的前提下,1% low帧相差10%,实际的差距到底差了多少
例子1
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-jbsrKbT3cS14v-9y.png[/img]
平均帧相差2%,可认为几乎一样。
1% low帧相差8%。
如果只看这两个数据,看起来不是什么大的区别。
但非卡顿帧稀释程度更少的0.1% low帧相差了60%,已经说明了一些问题。
我们再看看实际的frametime曲线。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-ic9fKtT3cS1gy-w1.png[/img]
一个的卡顿帧是20-25ms,另一个的卡顿帧是30-35ms,实际差距就是50%以上。
例子2
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-9bv8K8T3cS14c-a6.png[/img]
平均帧相差0.2%,可认为一样。
1% low帧相差11%。
如果只看这两个数据,看起来不是什么大的区别。
但非卡顿帧稀释程度更少的0.1% low帧相差了110%,已经说明了一些问题。
我们再看看实际的frametime曲线。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-l3ktKlT3cS1gg-vp.png[/img]
一个的卡顿帧是10ms,另一个的卡顿帧是20ms,实际差距就是100%以上。
这个差别是如何造成的呢?
一个跑4.7G,一个跑3.0G。
一个跑4.7G,一个跑3.0G,如此巨大的核心性能差别,在平均帧相同的前提下,都才能令被稀释的1% low帧差出来11%。
现在我们回去看51972那个数据,在平均帧相同的前提下,DDR4和DDR5被稀释的1% low帧差出来接近10%。
假如把frametime曲线拉出来看,卡顿帧的frametime必然差距巨大。
如果该测试数据靠谱,那么可以说明DDR4和DDR5的游戏性能差异,和4.7G和3.0G的游戏性能差异差不多了。
DDR5可以说是卡的没法玩,游戏性能等效落后2-3代,大概相当于10代对13代。
这显然不符合逻辑,DDR4和DDR5只相差5ns左右的空载内存延迟,不可能造成那么大的差距。
我个人认为,会造成如此巨大的卡顿表现差异的原因不在DDR4和DDR5上,而在于那个测试用的微星和华硕主板上,又或者是其他原因。
比如,华硕主板一旦打开asus ec,就会产生巨量硬件中断并导致游戏卡顿。
比如,奥创/神光同步产生巨量硬件中断并导致游戏卡顿等等。
在前面的例子中,我们得到了结论:
在平均帧相同的前提下,1% low越高越好。
并且1% low在数值上是被稀释的,因此实际差距将远远大于1% low数值上的差距。
我们也可以自然的从这个结论中得到一个推论:
在1% low相同的前提下,平均帧越低越好。
平均帧越高,卡顿情况就越严重。
这是因为平均帧越高,说明非卡顿帧的平均frametime越小。
非卡顿帧的平均frametime越小,被纳入1% low FPS/1% high frametime样本中的非卡顿帧数量越多、占比越大。
非卡顿帧占比越大,1% high frametime的数值被非卡顿帧稀释的程度就越严重。
平均帧更高的、被非卡顿帧稀释程度大的、虚高的1% low帧,只和平均帧更低的、被非卡顿帧稀释程度小的1% low帧堪堪打成平手。
这就说明了前者的卡顿帧的frametime,是远比后者更糟糕的。
这种数据,在zen4非x3d和zen3x3d的优化差的游戏对比中比较常见。
这种数据是非常迷惑小白的。
小白会觉得1% low帧已经打平手,平均帧还更强的,显然那个更好,但实际游戏体验是反过来的。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-11iiZkT3cS15v-id.png[/img]
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-b8atZ1bT3cS1uv-ex.png[/img]
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-8d0xZwT3cS1uu-ec.png[/img]
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-3egfK23T3cS1ex-tf.png[/img]
如果非要分析造成这种现象的原因,那就是
zen3x3d利用缓存内存优势,在非卡顿帧的优势区间疯狂刷分,降低非卡顿帧的frametime、拉高平均帧,并通过这个方式稀释了1% low帧,使得1% low帧在数值上不会太难看,但单核性能不行的结果就是遇到硬吃单核的卡顿时就遭重了;
而zen4非x3d虽然缓存内存不如对手强,非卡顿帧的frametime更大、平均帧更低,但他有单核性能优势,在出现硬吃CPU单核性能的卡顿的时候可保住卡顿的frametime表现。
如果让我在这两个里面选,我必然是选后者。
我不会在意非卡顿帧4毫秒(平均帧250)和5毫秒(平均帧200)的这区区1毫秒的区别,但我会很在意卡顿帧20毫秒和25毫秒的5毫秒区别。
[url]https://bbs.nga.cn/read.php?tid=37349925[/url]
起因是Q群讨论DDR4和DDR5游戏性能的时候,自然而然的拿出了59172的那个测试数据。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-2fjyZqT3cS25o-zu.jpg[/img]
在这个数据里,DDR4和DDR5的平均帧几乎一样,但DDR5的1% low帧落后了DDR4接近10%。
这个数据表面上看起来没什么异样,就是很正常的表现了DDR4在这个游戏里强于DDR5,差了10%也不多。
但问题在于,在平均帧几乎一样的前提下,1% low帧相差10%,其实是个非常非常巨大的差距,远非表面的10%所能表示。
为了方便后续讲解,还是先从理论开始说起。
先回顾一下第一集中说到的1% low FPS average的定义:所有帧中,按顺序取帧生成时间最大的、占帧的总数量的1%的帧,计算这些帧的帧生成时间的平均值。使用公式“1000毫秒/帧生成时间平均值=帧率”,最终结果用帧率来表示。
1% low FPS其名字看起来像是帧率(FPS),但其本质是frametime。
考虑一个叫1% high frametime的定义:所有帧中,按顺序取帧生成时间最大的、占帧的总数量的1%的帧,计算这些帧的帧生成时间的平均值。
可以发现1% low FPS和1% high frametime的定义的唯一区别,就是有没有后半部分的“使用公式‘1000毫秒/帧生成时间平均值=帧率’,最终结果用帧率来表示。”,而前半部分是一模一样的。
换句话说,1% low FPS和1% high frametime就是同一个东西,只是表达方式不同。
后面会使用1% high frametime,以强调1% low FPS的frametime本质。
为了便于理解,可以简单的把帧分成两种:卡顿帧和非卡顿帧
平均帧(AVG FPS)很好的表示了非卡顿帧的平均frametime。
比如平均帧200FPS,说明非卡顿帧的平均frametime 5ms。
平均帧100FPS,说明非卡顿帧的平均frametime 10ms。
平均帧几乎一样,说明非卡顿帧的平均frametime几乎一样。
在正常的游戏的frametime数据中,非卡顿帧占了绝大部分,而卡顿帧只占了极小部分。
具体举例,比如99.99%都是非卡顿帧,只有0.01%才是卡顿帧。
那么1% high frametime的取值,就是取这占总数0.01%的卡顿帧,以及占总数0.99%的较大的非卡顿帧,计算这些帧的frametime的平均值。
显然,即便是已经在1% high frametime的样本里,卡顿帧和非卡顿帧的比例也达到了悬殊的1:99。
也就是说,非卡顿帧数量占据了样本的绝对主导地位, 非卡顿帧数量>>卡顿帧数量。
此时卡顿帧的frametime对1% high frametime的数值影响非常小,非卡顿帧的frametime对1% high frametime的数值影响非常大。
用一个比较通俗的说法来形容,就是1% high frametime的数值组成中,卡顿帧被大量的非卡顿帧稀释了。
就像1滴浓牛奶和99滴稀牛奶混合,最终的混合物的浓度就会绝大部分取决于稀牛奶的浓度。
在开头说的例子中,
已知非卡顿帧frametime几乎一样(因为平均帧几乎一样),卡顿帧出现频率几乎一样,连已经被严重稀释的1% high frametime的数值都能差出来10%,那么原始没有被稀释的卡顿帧frametime会差多少?
用比喻的说法就是:
已知稀牛奶浓度几乎一样,用同样的比例把稀牛奶和浓牛奶混合,连已经被严重稀释过的牛奶的浓度都能差出来10%,那么没有稀释时,弄牛奶的浓度会差多少?
下面举一些真实跑出来的数据的例子,看看在平均帧几乎一样的前提下,1% low帧相差10%,实际的差距到底差了多少
例子1
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-jbsrKbT3cS14v-9y.png[/img]
平均帧相差2%,可认为几乎一样。
1% low帧相差8%。
如果只看这两个数据,看起来不是什么大的区别。
但非卡顿帧稀释程度更少的0.1% low帧相差了60%,已经说明了一些问题。
我们再看看实际的frametime曲线。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-ic9fKtT3cS1gy-w1.png[/img]
一个的卡顿帧是20-25ms,另一个的卡顿帧是30-35ms,实际差距就是50%以上。
例子2
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-9bv8K8T3cS14c-a6.png[/img]
平均帧相差0.2%,可认为一样。
1% low帧相差11%。
如果只看这两个数据,看起来不是什么大的区别。
但非卡顿帧稀释程度更少的0.1% low帧相差了110%,已经说明了一些问题。
我们再看看实际的frametime曲线。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-l3ktKlT3cS1gg-vp.png[/img]
一个的卡顿帧是10ms,另一个的卡顿帧是20ms,实际差距就是100%以上。
这个差别是如何造成的呢?
一个跑4.7G,一个跑3.0G。
一个跑4.7G,一个跑3.0G,如此巨大的核心性能差别,在平均帧相同的前提下,都才能令被稀释的1% low帧差出来11%。
现在我们回去看51972那个数据,在平均帧相同的前提下,DDR4和DDR5被稀释的1% low帧差出来接近10%。
假如把frametime曲线拉出来看,卡顿帧的frametime必然差距巨大。
如果该测试数据靠谱,那么可以说明DDR4和DDR5的游戏性能差异,和4.7G和3.0G的游戏性能差异差不多了。
DDR5可以说是卡的没法玩,游戏性能等效落后2-3代,大概相当于10代对13代。
这显然不符合逻辑,DDR4和DDR5只相差5ns左右的空载内存延迟,不可能造成那么大的差距。
我个人认为,会造成如此巨大的卡顿表现差异的原因不在DDR4和DDR5上,而在于那个测试用的微星和华硕主板上,又或者是其他原因。
比如,华硕主板一旦打开asus ec,就会产生巨量硬件中断并导致游戏卡顿。
比如,奥创/神光同步产生巨量硬件中断并导致游戏卡顿等等。
在前面的例子中,我们得到了结论:
在平均帧相同的前提下,1% low越高越好。
并且1% low在数值上是被稀释的,因此实际差距将远远大于1% low数值上的差距。
我们也可以自然的从这个结论中得到一个推论:
在1% low相同的前提下,平均帧越低越好。
平均帧越高,卡顿情况就越严重。
这是因为平均帧越高,说明非卡顿帧的平均frametime越小。
非卡顿帧的平均frametime越小,被纳入1% low FPS/1% high frametime样本中的非卡顿帧数量越多、占比越大。
非卡顿帧占比越大,1% high frametime的数值被非卡顿帧稀释的程度就越严重。
平均帧更高的、被非卡顿帧稀释程度大的、虚高的1% low帧,只和平均帧更低的、被非卡顿帧稀释程度小的1% low帧堪堪打成平手。
这就说明了前者的卡顿帧的frametime,是远比后者更糟糕的。
这种数据,在zen4非x3d和zen3x3d的优化差的游戏对比中比较常见。
这种数据是非常迷惑小白的。
小白会觉得1% low帧已经打平手,平均帧还更强的,显然那个更好,但实际游戏体验是反过来的。
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-11iiZkT3cS15v-id.png[/img]
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-b8atZ1bT3cS1uv-ex.png[/img]
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-8d0xZwT3cS1uu-ec.png[/img]
[img]https://img.nga.178.com/attachments/mon_202404/11/9aQk5y-3egfK23T3cS1ex-tf.png[/img]
如果非要分析造成这种现象的原因,那就是
zen3x3d利用缓存内存优势,在非卡顿帧的优势区间疯狂刷分,降低非卡顿帧的frametime、拉高平均帧,并通过这个方式稀释了1% low帧,使得1% low帧在数值上不会太难看,但单核性能不行的结果就是遇到硬吃单核的卡顿时就遭重了;
而zen4非x3d虽然缓存内存不如对手强,非卡顿帧的frametime更大、平均帧更低,但他有单核性能优势,在出现硬吃CPU单核性能的卡顿的时候可保住卡顿的frametime表现。
如果让我在这两个里面选,我必然是选后者。
我不会在意非卡顿帧4毫秒(平均帧250)和5毫秒(平均帧200)的这区区1毫秒的区别,但我会很在意卡顿帧20毫秒和25毫秒的5毫秒区别。