Module Name: src Committed By: ozaki-r Date: Wed Jul 21 06:36:33 UTC 2021
Modified Files: src/usr.sbin/altq/libaltq: qop_cbq.c qop_cbq.h Log Message: libaltq, cbq: convert ns_per_byte to ps_per_byte PR kern/56319 To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/altq/libaltq/qop_cbq.c cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/altq/libaltq/qop_cbq.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/altq/libaltq/qop_cbq.c diff -u src/usr.sbin/altq/libaltq/qop_cbq.c:1.11 src/usr.sbin/altq/libaltq/qop_cbq.c:1.12 --- src/usr.sbin/altq/libaltq/qop_cbq.c:1.11 Wed Jul 14 08:32:13 2021 +++ src/usr.sbin/altq/libaltq/qop_cbq.c Wed Jul 21 06:36:33 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: qop_cbq.c,v 1.11 2021/07/14 08:32:13 ozaki-r Exp $ */ +/* $NetBSD: qop_cbq.c,v 1.12 2021/07/21 06:36:33 ozaki-r Exp $ */ /* $KAME: qop_cbq.c,v 1.7 2002/05/31 06:03:35 kjc Exp $ */ /* * Copyright (c) Sun Microsystems, Inc. 1993-1998 All rights reserved. @@ -78,8 +78,12 @@ static int cbq_delete_filter(struct fltr #define CTL_PBANDWIDTH 2 #define NS_PER_MS (1000000.0) #define NS_PER_SEC (NS_PER_MS*1000.0) +#define PS_PER_MS (1000000000.0) +#define PS_PER_SEC (PS_PER_MS*1000.0) #define RM_FILTER_GAIN 5 +#define PSEC_TO_USEC(ps) ((ps) / 1000.0 / 1000.0) + #define CBQ_DEVICE "/dev/altq/cbq" static int cbq_fd = -1; @@ -484,8 +488,8 @@ qop_cbq_add_if(struct ifinfo **rp, const if ((cbq_ifinfo = calloc(1, sizeof(*cbq_ifinfo))) == NULL) return (QOPERR_NOMEM); - cbq_ifinfo->nsPerByte = - (1.0 / (double)bandwidth) * NS_PER_SEC * 8; + cbq_ifinfo->psPerByte = + (1.0 / (double)bandwidth) * PS_PER_SEC * 8; cbq_ifinfo->is_wrr = is_wrr; cbq_ifinfo->is_efficient = efficient; cbq_ifinfo->no_control = no_control; @@ -768,7 +772,7 @@ cbq_class_spec(struct ifinfo *ifinfo, u_ { struct cbq_ifinfo *cbq_ifinfo = ifinfo->private; double maxq, maxidle_s, maxidle, minidle, - lofftime, nsPerByte, ptime, cptime; + lofftime, psPerByte, ptime, cptime; double z = (double)(1 << RM_FILTER_GAIN); double g = (1.0 - 1.0 / z); double f; @@ -792,22 +796,12 @@ cbq_class_spec(struct ifinfo *ifinfo, u_ else if (max_pkt_size > ifinfo->ifmtu) max_pkt_size = ifinfo->ifmtu; - nsPerByte = cbq_ifinfo->nsPerByte / f; - ptime = (double) av_pkt_size * (double)cbq_ifinfo->nsPerByte; + psPerByte = cbq_ifinfo->psPerByte / f; + ptime = (double) av_pkt_size * (double)cbq_ifinfo->psPerByte; cptime = ptime * (1.0 - f) / f; -#if 1 /* ALTQ */ - if (nsPerByte * (double)max_pkt_size > (double)INT_MAX) { - /* - * this causes integer overflow in kernel! - * (bandwidth < 6Kbps when max_pkt_size=1500) - */ - if (bandwidth != 0) - LOG(LOG_WARNING, 0, "warning: class is too slow!!"); - nsPerByte = (double)(INT_MAX / max_pkt_size); - } -#endif + if (maxburst == 0) { /* use default */ - if (cptime > 10.0 * NS_PER_MS) + if (cptime > 10.0 * PS_PER_MS) maxburst = 4; else maxburst = 16; @@ -823,9 +817,9 @@ cbq_class_spec(struct ifinfo *ifinfo, u_ "cbq_flowspec: maxburst=%d,minburst=%d,pkt_size=%d", maxburst, minburst, av_pkt_size); LOG(LOG_DEBUG, 0, - " nsPerByte=%.2f ns, link's nsPerByte=%.2f, f=%.3f", - nsPerByte, cbq_ifinfo->nsPerByte, f); - packet_time = av_pkt_size * (int)nsPerByte / 1000; + " psPerByte=%.2f ps, link's psPerByte=%.2f, f=%.3f", + psPerByte, cbq_ifinfo->psPerByte, f); + packet_time = av_pkt_size * (int)PSEC_TO_USEC(psPerByte); LOG(LOG_DEBUG, 0, " packet time=%d [us]\n", packet_time); if (maxburst * packet_time < 20000) { @@ -845,21 +839,21 @@ cbq_class_spec(struct ifinfo *ifinfo, u_ else maxidle = ptime * maxidle_s; if (IsDebug(DEBUG_ALTQ)) - LOG(LOG_DEBUG, 0, " maxidle=%.2f us", maxidle/1000.0); + LOG(LOG_DEBUG, 0, " maxidle=%.2f us", PSEC_TO_USEC(maxidle)); if (minburst) lofftime = cptime * (1.0 + 1.0/(1.0 - g) * (1.0 - gtom) / gtom); else lofftime = cptime; - minidle = -((double)max_pkt_size * (double)nsPerByte); + minidle = -((double)max_pkt_size * (double)psPerByte); if (IsDebug(DEBUG_ALTQ)) LOG(LOG_DEBUG, 0, " lofftime=%.2f us minidle=%.2f us", - lofftime/1000.0, minidle/1000.0); + PSEC_TO_USEC(lofftime), PSEC_TO_USEC(minidle)); - maxidle = ((maxidle * 8.0) / nsPerByte) * pow(2, RM_FILTER_GAIN); + maxidle = ((maxidle * 8.0) / psPerByte) * pow(2, RM_FILTER_GAIN); #if 1 /* ALTQ */ /* also scale lofftime and minidle */ - lofftime = (lofftime * 8.0) / nsPerByte * pow(2, RM_FILTER_GAIN); - minidle = ((minidle * 8.0) / nsPerByte) * pow(2, RM_FILTER_GAIN); + lofftime = (lofftime * 8.0) / psPerByte * pow(2, RM_FILTER_GAIN); + minidle = ((minidle * 8.0) / psPerByte) * pow(2, RM_FILTER_GAIN); #endif maxidle = maxidle / 1000.0; lofftime = lofftime / 1000.0; @@ -872,7 +866,7 @@ cbq_class_spec(struct ifinfo *ifinfo, u_ else maxq = 30.0; } else { - maxq = ((double) maxdelay * NS_PER_MS) / (nsPerByte * av_pkt_size); + maxq = ((double) maxdelay * PS_PER_MS) / (psPerByte * av_pkt_size); if (maxq < 4) { LOG(LOG_WARNING, 0, "warning: maxq (%d) is too small. set to %d", @@ -905,7 +899,7 @@ cbq_class_spec(struct ifinfo *ifinfo, u_ memset((void *)cl_spec, 0, sizeof(cbq_class_spec_t)); cl_spec->priority = pri; - cl_spec->nano_sec_per_byte = (u_int) nsPerByte; + cl_spec->pico_sec_per_byte = (u_long) psPerByte; cl_spec->maxq = (u_int) maxq; cl_spec->maxidle = (u_int) fabs(maxidle); cl_spec->minidle = (int)minidle; Index: src/usr.sbin/altq/libaltq/qop_cbq.h diff -u src/usr.sbin/altq/libaltq/qop_cbq.h:1.3 src/usr.sbin/altq/libaltq/qop_cbq.h:1.4 --- src/usr.sbin/altq/libaltq/qop_cbq.h:1.3 Wed Jul 14 08:32:13 2021 +++ src/usr.sbin/altq/libaltq/qop_cbq.h Wed Jul 21 06:36:33 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: qop_cbq.h,v 1.3 2021/07/14 08:32:13 ozaki-r Exp $ */ +/* $NetBSD: qop_cbq.h,v 1.4 2021/07/21 06:36:33 ozaki-r Exp $ */ /* $KAME: qop_cbq.h,v 1.2 2000/10/18 09:15:18 kjc Exp $ */ /* * Copyright (c) Sun Microsystems, Inc. 1993-1998 All rights reserved. @@ -50,7 +50,7 @@ struct cbq_ifinfo { struct classinfo *default_class; /* default class */ struct classinfo *ctl_class; /* control class */ - double nsPerByte; /* bandwidth in ns per sec */ + double psPerByte; /* bandwidth in ps per sec */ int is_wrr; /* use weighted-round robin */ int is_efficient; /* use work-conserving */ bool no_control; /* don't create a control class automatically */