Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


指南:使用 Trickle 限制应用程序带宽占用

2015-5-27 09:56    收藏: 3    

学习如何使用Trickle

最基本的用法就是使用其独立模式,通过这种方式,trickle用来显式地定义给定应用程序的上传下载速率。如前所述,为了简单,我们会使用相同的应用来进行上传下载测试。

在独立模式下运行trickle

我们会比较在有无trickle的情况下的上传下载速率, ‘-d’选项指示下载速率(KB/s单位),而'-u'选项指示相同单位的上传速率。另外我们会使用到‘-s’选项来指定trickle应该以独立模式运行。

以独立模式运行trickle的基本语法如下:

# trickle -s -d [下载速率,KB/s] -u [上传速率,KB/s]

为了能够让你自己运行以下样例,确保你在自己的客户端安装了trickle和ncftp(我的是192.168.0.17)。

样例1:在有无trickle的情况下上传一个2.8 MB的PDF文件。

我们使用一个自由发布的LInux基础知识PDF文件来进行下面的测试。

你可以首先使用下面的命令将这个文件下载到你当前的工作目录中:

# wget http://linux-training.be/files/books/LinuxFun.pdf

下面是在没有trickle的情况下将一个文件上传到我们的FTP服务器的语法:

# ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename

其中的 /remote_directory 是相对于该用户的家目录的上传路径,而local-filename是一个你当前工作目录中的文件。

特别的是,在没有trickle的情形下,我们可以得到上传峰值速率52.02MB/s(请注意,这个不是真正的平均上传速率,而是峰值开始的瞬时值),而且这个文件几乎在瞬间就完成了上传。

# ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB   52.02 MB/s

在使用trickle的情况下,我们会限制上传速率在5KB/s。在第二次上传文件之前,我们需要在目标目录中删除这个文件,否则ncftp就会通知我们在目标目录中已经存在了与上传文件相同的文件,从而不会执行文件的传输:

# rm /absolute/path/to/destination/directory/LinuxFun.pdf

然后:

# trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB 4.94 kB/s

在上面的样例中,我们看到平均的上传速率下降到了5KB/s。

样例2:在有无trickle的情况下下载相同的2.8MB的PDF文件

首先,记得从原来的源目录中删除这个PDF:

# rm /absolute/path/to/source/directory/LinuxFun.pdf

请注意,下面的样例中将远程的文件下载到客户端机器的当前目录下,这是由FTP服务器的IP地址后面的“.”决定的。

没有trickle的情况下:

# ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB  260.53 MB/s

在有trickle的情况下,限制下载速率在20KB/s:

# trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB   17.76 kB/s

在监督[非托管]模式下运行Trickle

trickle也可以按照/etc/trickled.conf文件中定义的一系列参数运行在非托管模式下。 这个文件定义了守护线程 trickled的行为以及如何管理trickle。

另外,如果你想要全局设置被所有的应用程序使用的话,我们就会需要使用trickle命令。 这个命令运行守护进程,并允许我们通过trickle定义所有应用程序共享的上传下载限制,不需要我们每次来进行指定。

例如,运行:

# trickled -d 50 -u 10

会导致任何通过trickle运行的应用程序的上传下载速率分别限制在30kb/s和10kb/s。

请注意,你可以在任何时间都能确认守护线程trickled是否正在运行以及其运行参数:

# ps -ef | grep trickled | grep -v grep

输出:

root    16475   1  0 Dec24 ?        00:00:04 trickled -d 50 -u 10

样例3:在使用/不使用trickle的情形下上传一个 19MB 的mp4文件到我们的FTP服务器。

在这个样例中,我们会使用“He is the gift”的自由分发视频,可以通过这个链接下载。

我们将会在开始时通过以下的命令将这个文件下载到你的当前工作目录中:

# wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4

首先,我们会使用之前列出的命令来开启守护进程trickled:

# trickled -d 30 -u 10

在不使用trickle时:

# ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB   36.31 MB/s

在使用trickle时:

# trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB    9.51 kB/s

我们可以看到上面的输出,上传的速率下降到了约 10KB/s。

** 样例4:在使用/不使用trickle的情形下下载这个相同的视频 **

与样例2一样,我们会将该文件下载到当前工作目录中。

在没有trickle时:

# ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB  108.34 MB/s

有trickle的时:

# trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB   29.28 kB/s

上面的结果与我们之前设置的下载限速相对应(30KB/s)。

注意: 一旦守护进程开启之后,就没有必要使用trickle来为每个应用程序来单独设置限制。

如前所述,人们可以进一步地通过trickled.conf来客制化trickle的带宽速率调整,该文件的一个典型的分段有以下部分组成:

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

其中,

  • [service] 用来指示我们想要对其进行带宽使用调整的应用程序名称
  • Priority 用来让我们为某个服务制定一个相对于其他服务高的优先级,这样就不允许守护进程管理中的一个单独的应用程序来占用所有的带宽。越小的数字代表更高的优先级。
  • Time-Smoothing [以秒计]: 定义了trickled让各个应用程序传输或接收数据的时间间隔。小的间隔值(0.1-1秒)对于交互式应用程序是理想的,因为这样会具有一个更加平滑的会话体验,而一个相对较大的时间间隔值(1-10秒)对于需要批量传输应用程序就会显得更好。如果没有指定该值,默认是5秒。
  • Length-smoothing [KB 单位]: 该想法与Time-Smoothing如出一辙,但是是基于I/O操作而言。如果没有指定值,会使用默认的10KB。

上述平滑值(Time-Smoothing、 Length-smoothing)的改变会被翻译为将指定的服务的使用一个间隔值而不是一个固定值。不幸的是,没有一个特定的公式来计算间隔值的上下限,主要依赖于特定的应用场景。

下面是一个在CentOS 7 客户端中的trickled.conf 样例文件(192.168.0.17):

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

使用该设置,trickled会为SSH赋予比FTP较高的传输优先级。值得注意的是,一个交互进程,例如SSH,使用了一个较小的时间间隔值,然而一个处理批量数据传输的服务如FTP,则使用一个较大的时间间隔来控制之前的样例中的上传下载速率,尽管不是百分百的由trickled指定的值,但是也已经非常接近了。

总结

在该文章中,我们探索了使用trickle在基于Fedora发行版和Debian衍生版平台上来限制应用程序的带宽使用。也包含了其他的可能用法,但是不对以下情形进行限制:

  • 限制系统工具的下载速度,例如wget,或 BT客户端.
  • 限制你的系统的包管理工具yum更新的速度 (如果是基于Debian系统的话,其包管理工具为aptitude)。
  • 如果你的服务器是在一个代理或防火墙后面(或者其本身即是代理或防火墙的话),你可以使用trickle来同时设定下载和上传速率,或者客户端或外部通讯的速率。

欢迎提问或留言。


via: http://www.tecmint.com/manage-and-limit-downloadupload-bandwidth-with-trickle-in-linux/

作者:Gabriel Cánepa 译者:theo-l 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

12
查看其它分页:

发表评论


最新评论

我也要发表评论

返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。