我想trickle
在 Raspbian 上使用。
似乎它可以在运行可执行文件时使用,如下所示:
trickle -u {up} -d {down} {program}
并且它也可以用于所有应用程序。例如:
trickled -d 50 -u 10
手册页说第一个不能用于静态链接的可执行文件。所以我的问题是,第二个用法示例是否适用于所有程序,无论它们是否是静态链接的?
谢谢
答案1
trickled
使用与 相同的技术来限制带宽trickle
。它只是在 UNIX 域套接字上侦听/tmp
其他trickle
进程。当另一个trickle
进程启动时,它会询问trickled
(如果它正在运行)全局设置,并将其设置为默认值,除非它对该特定 实例有单独的覆盖trickle
。
A充分静态链接的可执行文件(即所有内容(包括 libc)都静态编译到二进制文件中)不能用于像 这样的用户空间进程trickle
。静态链接的可执行文件最终会直接对 Linux 内核的稳定用户<->内核应用程序二进制接口 (ABI) 进行系统调用。它不会尝试加载/lib
、/usr/lib
、/usr/local/lib
等中的任何库来解析符号。
的神奇之处trickle
在于,它可以有效地将自定义代码注入到做从系统中动态加载 C 库。不或者被设置为 root 权限的进程不能通过这种方式修改其代码。
真正控制全部系统上的进程,这种级别的带宽限制需要在内核本身中完成。
Linux 内核本身中有一些新的和旧的流量整形功能(流量整形是带宽限制的统称,通常意味着修改数据包的时间或调度)的内核实现,这些实现更加可靠。这里是一个基于 nf 框架的较新示例,该框架计划取代 iptables 作为现代 Linux 的第 3 层策略和控制堆栈。