我使用pv通过ssh发送文件。
我可以改变“有源光伏”的限制在100米以下,没有任何问题。当我将活动pv进程设置为100 M或1G或更高时,我不能再改变速率了。
但!如果我把5-10倍的1M改为2M,200万到1M的pv有时会调整到新的速率。
我找不到解决这个问题的办法。有什么想法吗?
示例:
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) 发布于 2018-01-24 14:25:32
这是由pv中的会计造成的,这实际上意味着它的速率限制是读限制的,而不是写限制的。查看源代码显示,速率限制是由一个“目标”驱动的,该目标是要发送的剩余数量。如果利率限制是开启的,一旦每个利率限制评估周期,目标将增加多少我们应该发送的利率限制;然后目标是减少了多少,无论是多少实际写。这意味着,如果将利率限制设置为大于实际写入容量的值,则目标将继续上升;在pv赶上其目标之前,降低利率限制不会产生任何效果(包括根据新的利率限制允许编写的内容)。
要查看此操作,请启动一个基本的pv:
pv /dev/zero /dev/null然后控制:
pv -R 32605 -L 1M; sleep 10; pv -R 32605 -L 1G; sleep 1; pv -R 32605 -L 1M通过改变第二次睡眠的持续时间,您将看到目标计算的影响.
由于写入限制,这仅在将利率限制设置为大于写入容量的值时才会引起问题。
更详细的是,在一个能够传输400米的连接上,首先将流量限制在1M,然后5s限制在1G,然后返回到1M:
Time Rate Target Sent Remaining
1 1M 1M 1M 0
2 1G 1G 400M 600M
3 1G 1.6G 400M 1.2G
4 1G 2.2G 400M 1.8G
5 1G 2.8G 400M 2.4G
6 1G 3.4G 400M 3G
7 1M 3001M 400M 2601M
8 1M 2602M 400M 2202M
9 1M 2203M 400M 1803M
10 1M 1804M 400M 1404M
11 1M 1405M 400M 1005M
12 1M 1006M 400M 606M
13 1M 607M 400M 207M
14 1M 208M 208M 0
15 1M 1M 1M 0利率限制需要7s才能再次适用。高利率限制花费的时间越长,降低利率限制的执行时间就越长.
如果您可以重新编译pv:在loop.c中,将第154行更改为target = (从target +=),则修复非常简单
|| (cur_time.tv_sec == next_ratecheck.tv_sec
&& cur_time.tv_usec >=
next_ratecheck.tv_usec)) {
target =
((long double) (state->rate_limit)) /
(long double) (1000000 /
RATE_GRANULARITY);一旦做到这一点,利率限制降低将立即实施(嗯,在一个利率限制周期内)。
发布于 2018-01-24 16:50:32
我在纠正自己;pv可以改变速度。我不知道为什么,但根据你的速度限制,这只需要一些时间.如果你把它设置为1G,你必须等待45秒才能降低速度。
5G-5分钟。
10G -7分钟。
例如:
命令:
pv --pidfile /tmp/pv.pid --rate-limit 10G </dev/zero | ssh 10.1.1.5 'cat>/dev/null'
pv --rate-limit 1M --remote $(cat /tmp/pv.pid)-ON 10-ON/S网卡:
3.99GiB 0:02:26 [ 157MiB/s] (Right here i just changed to 1M)
26.1GiB 0:02:30 [ 160MiB/s]
77.6GiB 0:09:38 [1.01MiB/s]7分钟后速度终于变了..。
-ON 1Gb/s网卡:
我又以10克的限制开始了。
770MiB 0:00:07 [ 112MiB/s]
44.5GiB 0:06:49 [ 111MiB/s]
46.4GiB 0:07:31 [1.00MiB/s]结果是一样的。如果你把速度10G改为1M,你至少要等7分钟。但是如果你把速度1M改为10G,你就不需要等一秒了。我不认为它只是缓冲区,因为7分钟(45‘t)必须太大的缓冲区。但这只是我的观点。
https://unix.stackexchange.com/questions/419341
复制相似问题