* [iproute2] minor tc cleanup patches @ 2010-01-12 20:34 Florian Westphal 2010-01-12 20:39 ` [PATCH 1/5] tc: man: add limit parameter to tc-sfq man page Florian Westphal ` (5 more replies) 0 siblings, 6 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-12 20:34 UTC (permalink / raw) To: Stephen Hemminger; +Cc: netdev, kaber Hello Stephen, hello Patrick, here are 5 minor patches for iproute2/tc: the first two are small man page adjustments. The 3rd one makes tc print a more verbose error message instead of -EINVAL. The 4th is a janitorial patch that removes some stale (c&p) code. Last patch adds a man page for sched_drr. Patrick, it would be nice if you could have a look at this one to see if I got everything right (or if i forgot something important). Thanks a lot! Alternatively, you may pull from git://git.breakpoint.cc/fw/iproute2.git cleanups to obtain the following changes since commit d63a9b2b1e4e3eab0d0577d0a0f412d50be1e0a7: Arnd Bergmann (1): iproute2/iplink: add macvlan options for bridge mode Florian Westphal (5): tc: man: add limit parameter to tc-sfq man page tc: man: SO_PRIORITY is described in socket documentation, not tc one tc: red, gred, tbf: more helpful error messages tc: remove stale code tc: man: add man page for drr scheduler man/man8/tc-drr.8 | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ man/man8/tc-prio.8 | 2 +- man/man8/tc-sfq.8 | 3 ++ man/man8/tc.8 | 1 + tc/f_fw.c | 2 - tc/f_route.c | 2 - tc/f_rsvp.c | 2 - tc/f_tcindex.c | 4 -- tc/f_u32.c | 2 - tc/q_atm.c | 2 - tc/q_cbq.c | 3 +- tc/q_drr.c | 1 - tc/q_dsmark.c | 3 -- tc/q_fifo.c | 2 - tc/q_gred.c | 7 +--- tc/q_htb.c | 2 - tc/q_ingress.c | 2 - tc/q_multiq.c | 2 - tc/q_netem.c | 2 - tc/q_prio.c | 4 -- tc/q_red.c | 16 +--------- tc/q_rr.c | 3 -- tc/q_sfq.c | 2 - tc/q_tbf.c | 8 ++-- 24 files changed, 101 insertions(+), 65 deletions(-) create mode 100644 man/man8/tc-drr.8 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/5] tc: man: add limit parameter to tc-sfq man page 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal @ 2010-01-12 20:39 ` Florian Westphal 2010-01-12 20:43 ` [PATCH 2/5] tc: man: SO_PRIORITY is described in socket documentation, not tc one Florian Westphal ` (4 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-12 20:39 UTC (permalink / raw) To: netdev; +Cc: shemminger, Florian Westphal Signed-off-by: Florian Westphal <fw@strlen.de> --- man/man8/tc-sfq.8 | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/man/man8/tc-sfq.8 b/man/man8/tc-sfq.8 index 337c795..8f2b433 100644 --- a/man/man8/tc-sfq.8 +++ b/man/man8/tc-sfq.8 @@ -51,6 +51,9 @@ on the fullest bucket, thus maintaining fairness. .SH PARAMETERS .TP +limit +Upper limit of the SFQ. Can be used to reduce the default length of 128 packets. +.TP perturb Interval in seconds for queue algorithm perturbation. Defaults to 0, which means that no perturbation occurs. Do not set too low for each perturbation may cause some packet -- 1.6.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/5] tc: man: SO_PRIORITY is described in socket documentation, not tc one 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal 2010-01-12 20:39 ` [PATCH 1/5] tc: man: add limit parameter to tc-sfq man page Florian Westphal @ 2010-01-12 20:43 ` Florian Westphal 2010-01-12 20:44 ` [PATCH 3/5] tc: red, gred, tbf: more helpful error messages Florian Westphal ` (3 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-12 20:43 UTC (permalink / raw) To: netdev; +Cc: shemminger, Florian Westphal fix up reference: there is no tc(7) man page. Signed-off-by: Florian Westphal <fw@strlen.de> --- man/man8/tc-prio.8 | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/man/man8/tc-prio.8 b/man/man8/tc-prio.8 index 780bcd5..1625fcc 100644 --- a/man/man8/tc-prio.8 +++ b/man/man8/tc-prio.8 @@ -50,7 +50,7 @@ be enqueued. From userspace A process with sufficient privileges can encode the destination class directly with SO_PRIORITY, see -.BR tc(7). +.BR socket(7). .TP with a tc filter A tc filter attached to the root qdisc can point traffic directly to a class -- 1.6.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/5] tc: red, gred, tbf: more helpful error messages 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal 2010-01-12 20:39 ` [PATCH 1/5] tc: man: add limit parameter to tc-sfq man page Florian Westphal 2010-01-12 20:43 ` [PATCH 2/5] tc: man: SO_PRIORITY is described in socket documentation, not tc one Florian Westphal @ 2010-01-12 20:44 ` Florian Westphal 2010-01-12 20:45 ` [PATCH 4/5] tc: remove stale code Florian Westphal ` (2 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-12 20:44 UTC (permalink / raw) To: netdev; +Cc: shemminger, Florian Westphal $ tc qdisc add dev eth1 root tbf RTNETLINK answers: Invalid argument $ tc qdisc add dev eth1 root red RTNETLINK answers: Invalid argument with patch: $ tc qdisc add dev eth1 root red Required parameter (min, max, burst, limit, avpkt) is missing $ tc qdisc add dev eth1 root tbf Usage: ... tbf limit BYTES burst BYTES[/BYTES] rate KBPS ... Signed-off-by: Florian Westphal <fw@strlen.de> --- tc/q_gred.c | 5 +---- tc/q_red.c | 14 +------------- tc/q_tbf.c | 6 ++++-- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/tc/q_gred.c b/tc/q_gred.c index ecef42e..ab26801 100644 --- a/tc/q_gred.c +++ b/tc/q_gred.c @@ -215,16 +215,13 @@ static int gred_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct n argc--; argv++; } - if (!ok) - return 0; - if (rate == 0) get_rate(&rate, "10Mbit"); if (!opt.qth_min || !opt.qth_max || !burst || !opt.limit || !avpkt || (opt.DP<0)) { fprintf(stderr, "Required parameter (min, max, burst, limit, " - "avpket, DP) is missing\n"); + "avpkt, DP) is missing\n"); return -1; } diff --git a/tc/q_red.c b/tc/q_red.c index 6f93b26..3ba6bc7 100644 --- a/tc/q_red.c +++ b/tc/q_red.c @@ -35,7 +35,6 @@ static void explain(void) static int red_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { - int ok=0; struct tc_red_qopt opt; unsigned burst = 0; unsigned avpkt = 0; @@ -55,52 +54,44 @@ static int red_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl fprintf(stderr, "Illegal \"limit\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "min") == 0) { NEXT_ARG(); if (get_size(&opt.qth_min, *argv)) { fprintf(stderr, "Illegal \"min\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "max") == 0) { NEXT_ARG(); if (get_size(&opt.qth_max, *argv)) { fprintf(stderr, "Illegal \"max\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "burst") == 0) { NEXT_ARG(); if (get_unsigned(&burst, *argv, 0)) { fprintf(stderr, "Illegal \"burst\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "avpkt") == 0) { NEXT_ARG(); if (get_size(&avpkt, *argv)) { fprintf(stderr, "Illegal \"avpkt\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "probability") == 0) { NEXT_ARG(); if (sscanf(*argv, "%lg", &probability) != 1) { fprintf(stderr, "Illegal \"probability\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "bandwidth") == 0) { NEXT_ARG(); if (get_rate(&rate, *argv)) { fprintf(stderr, "Illegal \"bandwidth\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "ecn") == 0) { ecn_ok = 1; - ok++; } else if (strcmp(*argv, "help") == 0) { explain(); return -1; @@ -112,14 +103,11 @@ static int red_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl argc--; argv++; } - if (!ok) - return 0; - if (rate == 0) get_rate(&rate, "10Mbit"); if (!opt.qth_min || !opt.qth_max || !burst || !opt.limit || !avpkt) { - fprintf(stderr, "Required parameter (min, max, burst, limit, avpket) is missing\n"); + fprintf(stderr, "Required parameter (min, max, burst, limit, avpkt) is missing\n"); return -1; } diff --git a/tc/q_tbf.c b/tc/q_tbf.c index dbf9586..06ccda3 100644 --- a/tc/q_tbf.c +++ b/tc/q_tbf.c @@ -158,8 +158,10 @@ static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nl argc--; argv++; } - if (!ok) - return 0; + if (!ok) { + explain(); + return -1; + } if (opt.rate.rate == 0 || !buffer) { fprintf(stderr, "Both \"rate\" and \"burst\" are required.\n"); -- 1.6.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/5] tc: remove stale code 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal ` (2 preceding siblings ...) 2010-01-12 20:44 ` [PATCH 3/5] tc: red, gred, tbf: more helpful error messages Florian Westphal @ 2010-01-12 20:45 ` Florian Westphal 2010-01-12 20:45 ` [PATCH 5/5] tc: man: add man page for drr scheduler Florian Westphal 2010-01-21 18:13 ` [iproute2] minor tc cleanup patches Stephen Hemminger 5 siblings, 0 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-12 20:45 UTC (permalink / raw) To: netdev; +Cc: shemminger remove unused #define and "ok" statements. Signed-off-by: Florian Westphal <fwestphal@astaro.com> --- tc/f_fw.c | 2 -- tc/f_route.c | 2 -- tc/f_rsvp.c | 2 -- tc/f_tcindex.c | 4 ---- tc/f_u32.c | 2 -- tc/q_atm.c | 2 -- tc/q_cbq.c | 3 +-- tc/q_drr.c | 1 - tc/q_dsmark.c | 3 --- tc/q_fifo.c | 2 -- tc/q_gred.c | 2 -- tc/q_htb.c | 2 -- tc/q_ingress.c | 2 -- tc/q_multiq.c | 2 -- tc/q_netem.c | 2 -- tc/q_prio.c | 4 ---- tc/q_red.c | 2 -- tc/q_rr.c | 3 --- tc/q_sfq.c | 2 -- tc/q_tbf.c | 2 -- 20 files changed, 1 insertions(+), 45 deletions(-) diff --git a/tc/f_fw.c b/tc/f_fw.c index cc8ea2d..219b404 100644 --- a/tc/f_fw.c +++ b/tc/f_fw.c @@ -31,8 +31,6 @@ static void explain(void) fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n"); } -#define usage() return(-1) - static int fw_parse_opt(struct filter_util *qu, char *handle, int argc, char **argv, struct nlmsghdr *n) { struct tc_police tp; diff --git a/tc/f_route.c b/tc/f_route.c index 67dd49c..eccf924 100644 --- a/tc/f_route.c +++ b/tc/f_route.c @@ -34,8 +34,6 @@ static void explain(void) fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n"); } -#define usage() return(-1) - static int route_parse_opt(struct filter_util *qu, char *handle, int argc, char **argv, struct nlmsghdr *n) { struct tc_police tp; diff --git a/tc/f_rsvp.c b/tc/f_rsvp.c index 7e1e6d9..808310d 100644 --- a/tc/f_rsvp.c +++ b/tc/f_rsvp.c @@ -37,8 +37,6 @@ static void explain(void) fprintf(stderr, "\nNOTE: CLASSID is parsed as hexadecimal input.\n"); } -#define usage() return(-1) - int get_addr_and_pi(int *argc_p, char ***argv_p, inet_prefix * addr, struct tc_rsvp_pinfo *pinfo, int dir, int family) { diff --git a/tc/f_tcindex.c b/tc/f_tcindex.c index 39ac75a..cb6f854 100644 --- a/tc/f_tcindex.c +++ b/tc/f_tcindex.c @@ -24,10 +24,6 @@ static void explain(void) "[ police POLICE_SPEC ]\n"); } - -#define usage() return(-1) - - static int tcindex_parse_opt(struct filter_util *qu, char *handle, int argc, char **argv, struct nlmsghdr *n) { diff --git a/tc/f_u32.c b/tc/f_u32.c index cb3f67e..4f5f74e 100644 --- a/tc/f_u32.c +++ b/tc/f_u32.c @@ -45,8 +45,6 @@ static void explain(void) fprintf(stderr, "\nNOTE: CLASSID is parsed at hexadecimal input.\n"); } -#define usage() return(-1) - int get_u32_handle(__u32 *handle, const char *str) { __u32 htid=0, hash=0, nodeid=0; diff --git a/tc/q_atm.c b/tc/q_atm.c index 4c8dc0b..eec0d77 100644 --- a/tc/q_atm.c +++ b/tc/q_atm.c @@ -26,8 +26,6 @@ #define MAX_HDR_LEN 64 -#define usage() return(-1) - static int atm_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { diff --git a/tc/q_cbq.c b/tc/q_cbq.c index c99dc3b..3c5e72c 100644 --- a/tc/q_cbq.c +++ b/tc/q_cbq.c @@ -46,7 +46,6 @@ static void explain1(char *arg) fprintf(stderr, "Illegal \"%s\"\n", arg); } -#define usage() return(-1) static int cbq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { @@ -319,7 +318,7 @@ static int cbq_parse_class_opt(struct qdisc_util *qu, int argc, char **argv, str NEXT_ARG(); if (get_tc_classid(&fopt.split, *argv)) { fprintf(stderr, "Invalid split node ID.\n"); - usage(); + return -1; } fopt_ok++; } else if (matches(*argv, "defmap") == 0) { diff --git a/tc/q_drr.c b/tc/q_drr.c index 7d2d874..81de44d 100644 --- a/tc/q_drr.c +++ b/tc/q_drr.c @@ -33,7 +33,6 @@ static void explain2(void) fprintf(stderr, "Usage: ... drr quantum SIZE\n"); } -#define usage() return(-1) static int drr_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { diff --git a/tc/q_dsmark.c b/tc/q_dsmark.c index cdb5bf2..cfbb335 100644 --- a/tc/q_dsmark.c +++ b/tc/q_dsmark.c @@ -19,9 +19,6 @@ #include "tc_util.h" -#define usage() return(-1) - - static void explain(void) { fprintf(stderr,"Usage: dsmark indices INDICES [ default_index " diff --git a/tc/q_fifo.c b/tc/q_fifo.c index 9f3b3eb..f561752 100644 --- a/tc/q_fifo.c +++ b/tc/q_fifo.c @@ -28,8 +28,6 @@ static void explain(void) fprintf(stderr, "Usage: ... [p|b]fifo [ limit NUMBER ]\n"); } -#define usage() return(-1) - static int fifo_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { int ok=0; diff --git a/tc/q_gred.c b/tc/q_gred.c index ab26801..df4aa3d 100644 --- a/tc/q_gred.c +++ b/tc/q_gred.c @@ -46,8 +46,6 @@ static void explain(void) "[grio]\n"); } -#define usage() return(-1) - static int init_gred(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { diff --git a/tc/q_htb.c b/tc/q_htb.c index c69e350..caa47c2 100644 --- a/tc/q_htb.c +++ b/tc/q_htb.c @@ -58,8 +58,6 @@ static void explain1(char *arg) } -#define usage() return(-1) - static int htb_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { struct tc_htb_glob opt; diff --git a/tc/q_ingress.c b/tc/q_ingress.c index 71fbd49..ba58e72 100644 --- a/tc/q_ingress.c +++ b/tc/q_ingress.c @@ -32,8 +32,6 @@ static void explain(void) fprintf(stderr, "Usage: ... ingress \n"); } -#define usage() return(-1) - static int ingress_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { diff --git a/tc/q_multiq.c b/tc/q_multiq.c index 306e170..fce5e44 100644 --- a/tc/q_multiq.c +++ b/tc/q_multiq.c @@ -41,8 +41,6 @@ static void explain(void) fprintf(stderr, "Usage: ... multiq [help]\n"); } -#define usage() return(-1) - static int multiq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { diff --git a/tc/q_netem.c b/tc/q_netem.c index 33b3d2a..6aaaded 100644 --- a/tc/q_netem.c +++ b/tc/q_netem.c @@ -42,8 +42,6 @@ static void explain1(const char *arg) fprintf(stderr, "Illegal \"%s\"\n", arg); } -#define usage() return(-1) - /* Upper bound on size of distribution * really (TCA_BUF_MAX - other headers) / sizeof (__s16) */ diff --git a/tc/q_prio.c b/tc/q_prio.c index 31a37cd..2f54d55 100644 --- a/tc/q_prio.c +++ b/tc/q_prio.c @@ -28,11 +28,8 @@ static void explain(void) fprintf(stderr, "Usage: ... prio bands NUMBER priomap P1 P2...[multiqueue]\n"); } -#define usage() return(-1) - static int prio_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { - int ok=0; int pmap_mode = 0; int idx = 0; struct tc_prio_qopt opt={3,{ 1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }}; @@ -48,7 +45,6 @@ static int prio_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct n fprintf(stderr, "Illegal \"bands\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "priomap") == 0) { if (pmap_mode) { fprintf(stderr, "Error: duplicate priomap\n"); diff --git a/tc/q_red.c b/tc/q_red.c index 3ba6bc7..4b1b889 100644 --- a/tc/q_red.c +++ b/tc/q_red.c @@ -31,8 +31,6 @@ static void explain(void) fprintf(stderr, " probability PROBABILITY bandwidth KBPS [ ecn ]\n"); } -#define usage() return(-1) - static int red_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { struct tc_red_qopt opt; diff --git a/tc/q_rr.c b/tc/q_rr.c index 9bb8c7d..1ff3ac9 100644 --- a/tc/q_rr.c +++ b/tc/q_rr.c @@ -28,11 +28,9 @@ static void explain(void) fprintf(stderr, "Usage: ... rr bands NUMBER priomap P1 P2... [multiqueue]\n"); } -#define usage() return(-1) static int rr_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { - int ok = 0; int pmap_mode = 0; int idx = 0; struct tc_prio_qopt opt={3,{ 1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }}; @@ -48,7 +46,6 @@ static int rr_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlm fprintf(stderr, "Illegal \"bands\"\n"); return -1; } - ok++; } else if (strcmp(*argv, "priomap") == 0) { if (pmap_mode) { fprintf(stderr, "Error: duplicate priomap\n"); diff --git a/tc/q_sfq.c b/tc/q_sfq.c index ce4dade..71a3c9a 100644 --- a/tc/q_sfq.c +++ b/tc/q_sfq.c @@ -28,8 +28,6 @@ static void explain(void) fprintf(stderr, "Usage: ... sfq [ limit NUMBER ] [ perturb SECS ] [ quantum BYTES ]\n"); } -#define usage() return(-1) - static int sfq_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { int ok=0; diff --git a/tc/q_tbf.c b/tc/q_tbf.c index 06ccda3..dc556fe 100644 --- a/tc/q_tbf.c +++ b/tc/q_tbf.c @@ -36,8 +36,6 @@ static void explain1(char *arg) } -#define usage() return(-1) - static int tbf_parse_opt(struct qdisc_util *qu, int argc, char **argv, struct nlmsghdr *n) { int ok=0; -- 1.6.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/5] tc: man: add man page for drr scheduler 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal ` (3 preceding siblings ...) 2010-01-12 20:45 ` [PATCH 4/5] tc: remove stale code Florian Westphal @ 2010-01-12 20:45 ` Florian Westphal 2010-01-13 5:34 ` Patrick McHardy 2010-01-18 22:54 ` [PATCH 5/5 v2] " Florian Westphal 2010-01-21 18:13 ` [iproute2] minor tc cleanup patches Stephen Hemminger 5 siblings, 2 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-12 20:45 UTC (permalink / raw) To: netdev; +Cc: shemminger, Patrick McHardy, Florian Westphal Cc: Patrick McHardy <kaber@trash.net> Signed-off-by: Florian Westphal <fw@strlen.de> --- man/man8/tc-drr.8 | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ man/man8/tc.8 | 1 + 2 files changed, 90 insertions(+), 0 deletions(-) create mode 100644 man/man8/tc-drr.8 diff --git a/man/man8/tc-drr.8 b/man/man8/tc-drr.8 new file mode 100644 index 0000000..5fcb0eb --- /dev/null +++ b/man/man8/tc-drr.8 @@ -0,0 +1,89 @@ +.TH TC 8 "January 2010" "iproute2" "Linux" +.SH NAME +drr \- deficit round robin scheduler +.SH SYNOPSIS +.B tc qdisc ... add drr +.B [ quantum +bytes +.B ] + +.SH DESCRIPTION + +The Deficit Round Robin Scheduler is a classful queuing discipline as +a more flexible replacement for Stochastic Fairness Queuing. + +Unlike SFQ, there are no built-in queues \-\- you need to add classes +and then set up filters to classify packets accordingly. +This can be useful e.g. for using RED qdiscs with different settings for particular +traffic. There is no default class \-\- if a packet cannot be classified, +it is dropped. + +.SH ALGORITHM +Each class is assigned a deficit counter, initialized to +.B quantum. + +DRR maintains an (internal) ''active'' list of classes whose qdiscs are +non-empty. This list is used for dequeuing. A packet is dequeued from +the class at the head of the list if the packet size is smaller or equal +to the deficit counter. If the counter is too small, it is increased by +.B quantum +and the scheduler moves on to the next class in the active list. + + +.SH PARAMETERS +.TP +quantum +Amount of bytes a flow is allowed to dequeue before the scheduler moves to the next. +Defaults to the MTU of the interface. The minimum value is 1. + +.SH EXAMPLE & USAGE + +To attach to device eth0, using the interface MTU as its quantum: +.P +# tc qdisc add dev eth0 handle 1 root drr +.P +Adding two classes: +.P +# tc class add dev eth0 parent 1: classid 1:1 drr +# tc class add dev eth0 parent 1: classid 1:2 drr +.P +You also need to add at least one filter to classify packets. +.P +# tc filter add dev eth0 protocol .. classid 1:1 +.P + +Like SFQ, DRR is only useful when it owns the queue \-\- it is a pure scheduler and does +not delay packets. Attaching non-work-conserving qdiscs like tbf to it does not make +sense \-\- other qdiscs in the active list will also become inactive until the dequeue +operation succeeds. Embed DRR within another qdisc like HTB or HFSC to ensure it owns the queue. +.P +You can mimic SFQ behavior by assigning packets to the attached classes using the +hash filter: + +.B tc qdisc add dev .. drr +.B for i in .. 1024;do +.B tc class add dev .. classid $handle:$(print %x $i) +.B tc qdisc add dev .. fifo limit 16 +.B done +.B tc filter add .. protocol ip .. $handle flow hash keys src,dst divisor 1024 perturb 10 + + +.SH SOURCE +.TP +o +M. Shreedhar and George Varghese "Efficient Fair +Queuing using Deficit Round Robin", Proc. SIGCOMM 95. + +.SH NOTES + +This implementation does not drop packets from the longest queue on overrun, +as limits are handled by the individual child qdiscs. + +.SH SEE ALSO +.BR tc (8), +.BR tc-htb (8), +.BR tc-sfq (8) + +.SH AUTHOR +sched_drr was written by Patrick McHardy. + diff --git a/man/man8/tc.8 b/man/man8/tc.8 index 8c0880f..e17ce68 100644 --- a/man/man8/tc.8 +++ b/man/man8/tc.8 @@ -367,6 +367,7 @@ print rates in IEC units (ie. 1K = 1024). was written by Alexey N. Kuznetsov and added in Linux 2.2. .SH SEE ALSO .BR tc-cbq (8), +.BR tc-drr (8), .BR tc-htb (8), .BR tc-sfq (8), .BR tc-red (8), -- 1.6.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] tc: man: add man page for drr scheduler 2010-01-12 20:45 ` [PATCH 5/5] tc: man: add man page for drr scheduler Florian Westphal @ 2010-01-13 5:34 ` Patrick McHardy 2010-01-13 8:27 ` Florian Westphal 2010-01-18 22:54 ` [PATCH 5/5 v2] " Florian Westphal 1 sibling, 1 reply; 12+ messages in thread From: Patrick McHardy @ 2010-01-13 5:34 UTC (permalink / raw) To: Florian Westphal; +Cc: netdev, shemminger Florian Westphal wrote: Thanks Florian. A few minor suggestions below. > diff --git a/man/man8/tc-drr.8 b/man/man8/tc-drr.8 > new file mode 100644 > index 0000000..5fcb0eb > --- /dev/null > +++ b/man/man8/tc-drr.8 > @@ -0,0 +1,89 @@ > +.TH TC 8 "January 2010" "iproute2" "Linux" > +.SH NAME > +drr \- deficit round robin scheduler > +.SH SYNOPSIS > +.B tc qdisc ... add drr > +.B [ quantum > +bytes > +.B ] > + > +.SH DESCRIPTION > + > +The Deficit Round Robin Scheduler is a classful queuing discipline as > +a more flexible replacement for Stochastic Fairness Queuing. > + > +Unlike SFQ, there are no built-in queues \-\- you need to add classes > +and then set up filters to classify packets accordingly. > +This can be useful e.g. for using RED qdiscs with different settings for particular > +traffic. There is no default class \-\- if a packet cannot be classified, > +it is dropped. > + > +.SH ALGORITHM > +Each class is assigned a deficit counter, initialized to > +.B quantum. > + > +DRR maintains an (internal) ''active'' list of classes whose qdiscs are > +non-empty. This list is used for dequeuing. A packet is dequeued from > +the class at the head of the list if the packet size is smaller or equal > +to the deficit counter. If the counter is too small, it is increased by > +.B quantum > +and the scheduler moves on to the next class in the active list. > + > + > +.SH PARAMETERS > +.TP > +quantum > +Amount of bytes a flow is allowed to dequeue before the scheduler moves to the next. next class or next flow? > +Defaults to the MTU of the interface. The minimum value is 1. > + > +.SH EXAMPLE & USAGE > + > +To attach to device eth0, using the interface MTU as its quantum: > +.P > +# tc qdisc add dev eth0 handle 1 root drr > +.P > +Adding two classes: > +.P > +# tc class add dev eth0 parent 1: classid 1:1 drr > +# tc class add dev eth0 parent 1: classid 1:2 drr > +.P > +You also need to add at least one filter to classify packets. > +.P > +# tc filter add dev eth0 protocol .. classid 1:1 > +.P > + > +Like SFQ, DRR is only useful when it owns the queue \-\- it is a pure scheduler and does > +not delay packets. Attaching non-work-conserving qdiscs like tbf to it does not make > +sense \-\- other qdiscs in the active list will also become inactive until the dequeue > +operation succeeds. Embed DRR within another qdisc like HTB or HFSC to ensure it owns the queue. > +.P > +You can mimic SFQ behavior by assigning packets to the attached classes using the > +hash filter: flow filter > + > +.B tc qdisc add dev .. drr > +.B for i in .. 1024;do > +.B tc class add dev .. classid $handle:$(print %x $i) > +.B tc qdisc add dev .. fifo limit 16 > +.B done > +.B tc filter add .. protocol ip .. $handle flow hash keys src,dst divisor 1024 perturb 10 To mimic SFQ, the filter needs to use "keys src,dst,proto,proto-src,proto-dst". > + > + > +.SH SOURCE > +.TP > +o > +M. Shreedhar and George Varghese "Efficient Fair > +Queuing using Deficit Round Robin", Proc. SIGCOMM 95. > + > +.SH NOTES > + > +This implementation does not drop packets from the longest queue on overrun, > +as limits are handled by the individual child qdiscs. > + > +.SH SEE ALSO > +.BR tc (8), > +.BR tc-htb (8), > +.BR tc-sfq (8) > + > +.SH AUTHOR > +sched_drr was written by Patrick McHardy. > + ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 5/5] tc: man: add man page for drr scheduler 2010-01-13 5:34 ` Patrick McHardy @ 2010-01-13 8:27 ` Florian Westphal 0 siblings, 0 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-13 8:27 UTC (permalink / raw) To: Patrick McHardy; +Cc: Florian Westphal, netdev, shemminger Patrick McHardy <kaber@trash.net> wrote: > Thanks Florian. A few minor suggestions below. Thanks Patrick, I'll add all of your suggestions to the man page in the next round of this patch. I'll wait a few days, maybe someone else has other ideas. Thanks again for reviewing, Florian ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 5/5 v2] tc: man: add man page for drr scheduler 2010-01-12 20:45 ` [PATCH 5/5] tc: man: add man page for drr scheduler Florian Westphal 2010-01-13 5:34 ` Patrick McHardy @ 2010-01-18 22:54 ` Florian Westphal 1 sibling, 0 replies; 12+ messages in thread From: Florian Westphal @ 2010-01-18 22:54 UTC (permalink / raw) To: netdev; +Cc: Florian Westphal With help from Patrick McHardy. Signed-off-by: Florian Westphal <fw@strlen.de> --- Aplogies for taking so long to re-spin this. Changes since v1: - fix garbled formatting of drr example usage - add all changes Patrick suggested. man/man8/tc-drr.8 | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++ man/man8/tc.8 | 1 + 2 files changed, 95 insertions(+), 0 deletions(-) create mode 100644 man/man8/tc-drr.8 diff --git a/man/man8/tc-drr.8 b/man/man8/tc-drr.8 new file mode 100644 index 0000000..16a8ec0 --- /dev/null +++ b/man/man8/tc-drr.8 @@ -0,0 +1,94 @@ +.TH TC 8 "January 2010" "iproute2" "Linux" +.SH NAME +drr \- deficit round robin scheduler +.SH SYNOPSIS +.B tc qdisc ... add drr +.B [ quantum +bytes +.B ] + +.SH DESCRIPTION + +The Deficit Round Robin Scheduler is a classful queuing discipline as +a more flexible replacement for Stochastic Fairness Queuing. + +Unlike SFQ, there are no built-in queues \-\- you need to add classes +and then set up filters to classify packets accordingly. +This can be useful e.g. for using RED qdiscs with different settings for particular +traffic. There is no default class \-\- if a packet cannot be classified, +it is dropped. + +.SH ALGORITHM +Each class is assigned a deficit counter, initialized to +.B quantum. + +DRR maintains an (internal) ''active'' list of classes whose qdiscs are +non-empty. This list is used for dequeuing. A packet is dequeued from +the class at the head of the list if the packet size is smaller or equal +to the deficit counter. If the counter is too small, it is increased by +.B quantum +and the scheduler moves on to the next class in the active list. + + +.SH PARAMETERS +.TP +quantum +Amount of bytes a flow is allowed to dequeue before the scheduler moves to +the next class. Defaults to the MTU of the interface. The minimum value is 1. + +.SH EXAMPLE & USAGE + +To attach to device eth0, using the interface MTU as its quantum: +.P +# tc qdisc add dev eth0 handle 1 root drr +.P +Adding two classes: +.P +# tc class add dev eth0 parent 1: classid 1:1 drr +# tc class add dev eth0 parent 1: classid 1:2 drr +.P +You also need to add at least one filter to classify packets. +.P +# tc filter add dev eth0 protocol .. classid 1:1 +.P + +Like SFQ, DRR is only useful when it owns the queue \-\- it is a pure scheduler and does +not delay packets. Attaching non-work-conserving qdiscs like tbf to it does not make +sense \-\- other qdiscs in the active list will also become inactive until the dequeue +operation succeeds. Embed DRR within another qdisc like HTB or HFSC to ensure it owns the queue. +.P +You can mimic SFQ behavior by assigning packets to the attached classes using the +flow filter: + +.B tc qdisc add dev .. drr + +.B for i in .. 1024;do +.br +.B \ttc class add dev .. classid $handle:$(print %x $i) +.br +.B \ttc qdisc add dev .. fifo limit 16 +.br +.B done + +.B tc filter add .. protocol ip .. $handle flow hash keys src,dst,proto,proto-src,proto-dst divisor 1024 perturb 10 + + +.SH SOURCE +.TP +o +M. Shreedhar and George Varghese "Efficient Fair +Queuing using Deficit Round Robin", Proc. SIGCOMM 95. + +.SH NOTES + +This implementation does not drop packets from the longest queue on overrun, +as limits are handled by the individual child qdiscs. + +.SH SEE ALSO +.BR tc (8), +.BR tc-htb (8), +.BR tc-sfq (8) + +.SH AUTHOR +sched_drr was written by Patrick McHardy. + diff --git a/man/man8/tc.8 b/man/man8/tc.8 index 8c0880f..e17ce68 100644 --- a/man/man8/tc.8 +++ b/man/man8/tc.8 @@ -367,6 +367,7 @@ print rates in IEC units (ie. 1K = 1024). was written by Alexey N. Kuznetsov and added in Linux 2.2. .SH SEE ALSO .BR tc-cbq (8), +.BR tc-drr (8), .BR tc-htb (8), .BR tc-sfq (8), .BR tc-red (8), -- 1.6.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [iproute2] minor tc cleanup patches 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal ` (4 preceding siblings ...) 2010-01-12 20:45 ` [PATCH 5/5] tc: man: add man page for drr scheduler Florian Westphal @ 2010-01-21 18:13 ` Stephen Hemminger 2010-01-21 18:19 ` Patrick McHardy 5 siblings, 1 reply; 12+ messages in thread From: Stephen Hemminger @ 2010-01-21 18:13 UTC (permalink / raw) To: Florian Westphal; +Cc: netdev, kaber On Tue, 12 Jan 2010 21:34:28 +0100 Florian Westphal <fw@strlen.de> wrote: > Hello Stephen, hello Patrick, > > here are 5 minor patches for iproute2/tc: > the first two are small man page adjustments. > The 3rd one makes tc print a more verbose error message instead of -EINVAL. > > The 4th is a janitorial patch that removes some stale (c&p) code. > > Last patch adds a man page for sched_drr. > Patrick, it would be nice if you could have a look at this one to see > if I got everything right (or if i forgot something important). > > Thanks a lot! > > Alternatively, you may pull from > > git://git.breakpoint.cc/fw/iproute2.git cleanups > > to obtain the following changes since commit Applied 1-4 will wait for updated DRR man page for 5 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [iproute2] minor tc cleanup patches 2010-01-21 18:13 ` [iproute2] minor tc cleanup patches Stephen Hemminger @ 2010-01-21 18:19 ` Patrick McHardy 2010-01-21 21:51 ` Stephen Hemminger 0 siblings, 1 reply; 12+ messages in thread From: Patrick McHardy @ 2010-01-21 18:19 UTC (permalink / raw) To: Stephen Hemminger; +Cc: Florian Westphal, netdev Stephen Hemminger wrote: > Applied 1-4 will wait for updated DRR man page for 5 > I believe Florian posted the final version on the 18th: [PATCH 5/5 v2] tc: man: add man page for drr scheduler ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [iproute2] minor tc cleanup patches 2010-01-21 18:19 ` Patrick McHardy @ 2010-01-21 21:51 ` Stephen Hemminger 0 siblings, 0 replies; 12+ messages in thread From: Stephen Hemminger @ 2010-01-21 21:51 UTC (permalink / raw) To: Patrick McHardy; +Cc: Florian Westphal, netdev On Thu, 21 Jan 2010 19:19:00 +0100 Patrick McHardy <kaber@trash.net> wrote: > Stephen Hemminger wrote: > > Applied 1-4 will wait for updated DRR man page for 5 > > > > I believe Florian posted the final version on the 18th: > > [PATCH 5/5 v2] tc: man: add man page for drr scheduler got it thanks -- ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2010-01-21 21:51 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-12 20:34 [iproute2] minor tc cleanup patches Florian Westphal 2010-01-12 20:39 ` [PATCH 1/5] tc: man: add limit parameter to tc-sfq man page Florian Westphal 2010-01-12 20:43 ` [PATCH 2/5] tc: man: SO_PRIORITY is described in socket documentation, not tc one Florian Westphal 2010-01-12 20:44 ` [PATCH 3/5] tc: red, gred, tbf: more helpful error messages Florian Westphal 2010-01-12 20:45 ` [PATCH 4/5] tc: remove stale code Florian Westphal 2010-01-12 20:45 ` [PATCH 5/5] tc: man: add man page for drr scheduler Florian Westphal 2010-01-13 5:34 ` Patrick McHardy 2010-01-13 8:27 ` Florian Westphal 2010-01-18 22:54 ` [PATCH 5/5 v2] " Florian Westphal 2010-01-21 18:13 ` [iproute2] minor tc cleanup patches Stephen Hemminger 2010-01-21 18:19 ` Patrick McHardy 2010-01-21 21:51 ` Stephen Hemminger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).