首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带限速变化的管道查看器问题

带限速变化的管道查看器问题
EN

Unix & Linux用户
提问于 2018-01-24 13:10:14
回答 2查看 751关注 0票数 3

我使用pv通过ssh发送文件。

我可以改变“有源光伏”的限制在100米以下,没有任何问题。当我将活动pv进程设置为100 M或1G或更高时,我不能再改变速率了。

但!如果我把5-10倍的1M改为2M,200万到1M的pv有时会调整到新的速率。

我找不到解决这个问题的办法。有什么想法吗?

示例:

代码语言:javascript
复制
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)  
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-01-24 14:25:32

这是由pv中的会计造成的,这实际上意味着它的速率限制是读限制的,而不是写限制的。查看源代码显示,速率限制是由一个“目标”驱动的,该目标是要发送的剩余数量。如果利率限制是开启的,一旦每个利率限制评估周期,目标将增加多少我们应该发送的利率限制;然后目标是减少了多少,无论是多少实际写。这意味着,如果将利率限制设置为大于实际写入容量的值,则目标将继续上升;在pv赶上其目标之前,降低利率限制不会产生任何效果(包括根据新的利率限制允许编写的内容)。

要查看此操作,请启动一个基本的pv

代码语言:javascript
复制
pv /dev/zero /dev/null

然后控制:

代码语言:javascript
复制
pv -R 32605 -L 1M; sleep 10; pv -R 32605 -L 1G; sleep 1; pv -R 32605 -L 1M

通过改变第二次睡眠的持续时间,您将看到目标计算的影响.

由于写入限制,这仅在将利率限制设置为大于写入容量的值时才会引起问题。

更详细的是,在一个能够传输400米的连接上,首先将流量限制在1M,然后5s限制在1G,然后返回到1M:

代码语言:javascript
复制
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 +=),则修复非常简单

代码语言:javascript
复制
                   || (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);

一旦做到这一点,利率限制降低将立即实施(嗯,在一个利率限制周期内)。

票数 5
EN

Unix & Linux用户

发布于 2018-01-24 16:50:32

我在纠正自己;pv可以改变速度。我不知道为什么,但根据你的速度限制,这只需要一些时间.如果你把它设置为1G,你必须等待45秒才能降低速度。

5G-5分钟。

10G -7分钟。

例如:

命令:

代码语言:javascript
复制
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网卡:

代码语言:javascript
复制
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克的限制开始了。

代码语言:javascript
复制
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)必须太大的缓冲区。但这只是我的观点。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/419341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档