On Thu, Dec 19, 2013 at 10:11 AM, Ben Pfaff <[email protected]> wrote:
> Occasionally I run a command like this:
> watch -n.1 ovs-ofctl dump-flows br0
> to see how flows change over time. Until now, it has been more difficult
> than necessary to spot real changes, because flows "jump around" as the
> number of decimals printed for duration changes from moment to moment.
> That is, you might see
> cookie=0x0, duration=4.566s, table=0, n_packets=0, ...
> one moment, and then
> cookie=0x0, duration=4.8s, table=0, n_packets=0, ...
> the next moment. Shortening 4.8 to 4.800 shifts everything following it
> two places to the left, creating a visual jump.
>
> This commit avoids that problem by always printing at least three decimals
> if we print any. There can still be an occasional jump if a duration is
> exactly on a second boundary, but that only happens 1/1000 of the time.
>
> Signed-off-by: Ben Pfaff <[email protected]>
> ---
> lib/ofp-print.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/lib/ofp-print.c b/lib/ofp-print.c
> index 0f7278c..286af6f 100644
> --- a/lib/ofp-print.c
> +++ b/lib/ofp-print.c
> @@ -860,10 +860,26 @@ static void
> ofp_print_duration(struct ds *string, unsigned int sec, unsigned int nsec)
> {
> ds_put_format(string, "%u", sec);
> +
> + /* If there are no fractional seconds, don't print any decimals.
> + *
> + * If the fractional seconds can be expressed exactly as milliseconds,
> + * print 3 decimals. Open vSwitch provides millisecond precision for
> most
> + * time measurements, so printing 3 decimals every time makes it
> easier to
> + * spot real changes in flow dumps that refresh themselves quickly.
> + *
> + * If the factional seconds are more precise than milliseconds, print
> the
>
s/factional/fractional
> + * number of decimals needed to express them exactly.
> + */
> if (nsec > 0) {
> - ds_put_format(string, ".%09u", nsec);
> - while (string->string[string->length - 1] == '0') {
> - string->length--;
> + unsigned int msec = nsec / 1000000;
>
+ if (msec * 1000000 == nsec) {
> + ds_put_format(string, ".%03u", msec);
> + } else {
> + ds_put_format(string, ".%09u", nsec);
> + while (string->string[string->length - 1] == '0') {
> + string->length--;
> + }
> }
> }
> ds_put_char(string, 's');
>
Acked-by: Andy Zhou <[email protected]>
> --
> 1.7.10.4
>
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev