我pv
用于通过ssh
.
我可以毫无问题地将“活动光伏”的限制更改为 100M 以下。当我将活动pv
进程设置为 100M 或 1G 或更高时,我无法再更改速率...
但!如果我将 1M 更改为 2M 5-10 次,pv
有时可以将 2M 更改为 1M 为新速率。
我找不到该问题的任何解决方案。任何想法?
例子:
pv -R "15778" -f -F "%p***%t***%e***%r***%b" -L 1M
pv -R "15778" -f -F "%p***%t***%e***%r***%b" -L 1G
pv -R "15778" -f -F "%p***%t***%e***%r***%b" -L 1M (not working anymore)
这是由记帐引起的
pv
,这实际上意味着它的速率限制是读取限制而不是写入限制。查看源代码表明,速率限制是由“目标”驱动的,即剩余发送量。如果开启了速率限制,则每个速率限制评估周期一次,目标会根据速率限制增加我们应该发送的数量;然后,无论实际写入多少,目标都会减少。这意味着如果您将速率限制设置为大于实际写入容量的值,则目标将继续上升;pv
在赶上其目标(包括根据新的速率限制允许写入的内容)之前,降低速率限制不会产生任何影响。要查看此操作,请启动一个基本的
pv
:然后控制:
通过改变第二次睡眠的持续时间,您将看到目标计算的影响......
由于写入限制,仅当您将速率限制设置为大于写入容量的值时才会出现问题。
更详细一点,以下是在能够传输 400M 的连接上,最初限制为 1M,然后是 1G 持续 5 秒,然后回到 1M 的流量的计费方式:
再次应用速率限制需要 7 秒。使用高速率限制所花费的时间越长,执行降低的速率限制所需的时间就越长......
解决这个问题的方法很简单,如果你可以重新编译
pv
: inloop.c
,将第 154 行更改为target =
(fromtarget +=
),导致一旦完成,将立即应用速率限制降低(嗯,在一个速率限制周期内)。
这似乎是一个缓冲问题。这是我的试验台:
这是我的控制:
pv
以 1 秒的间隔,运行从 100MB/s (1Gb/s) 的尝试降低到 1KB/s 的最终目标大约需要 13 秒。将sleep
间隔增加 1 秒会使达到最终目标的时间增加近 10 秒:四个样本对于趋势线来说真的不够,所以我要避免暗示它是线性相关。
我正在纠正自己;pv可以改变速度..我不知道为什么,但根据你的速度限制它需要一些时间......如果你将它设置为1G,你必须等待45秒才能降低速度。
5G - 5 分钟。
10G - 7 分钟。
例如:
命令:
-开启 10Gb/s 网卡:
7分钟后,速度终于变了……
-ON 1Gb/s 网卡:
我又开始了 10G 的限制。
结果是一样的。如果将速度 10G 更改为 1M,则至少需要等待 7 分钟。但是,如果您将速度从 1M 更改为 10G,则无需等待任何时间。我不认为它只是与缓冲区有关,因为 7 分钟(45Gb)对于缓冲区来说必须太大。但这只是我的意见。