Fwd: Any way to find the network usage by a process?
Stone, Joshua I
joshua.i.stone@intel.com
Fri Oct 6 01:08:00 GMT 2006
On Thursday, October 05, 2006 5:00 PM, Frank Ch. Eigler wrote:
> Hi -
>
> On Thu, Oct 05, 2006 at 04:28:10PM -0700, Mike Mason wrote:
>> [...]
>> ERROR: empty aggregate near identifier 'execname' at nettop.stp:35:4
>> WARNING: Number of errors: 1, skipped probes: 0
>> Apparently using @sum on empty aggregates isn't allowed. I expected
>> 0's to be returned.
>
> As a judgement call, to be consistent with other extractors like @avg,
> the @sum etc. of an empty set was deemed to be undefined.
FWIW, Python allows you to take the sum of an empty list, even though
other equivalent extractors fail:
>>> sum([])
0
>>> max([])
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: min() or max() arg is an empty sequence
I'm just looking for precedence in other languages...
>> The only way to avoid the error is use @sum only if @count >
>> 0, which makes the printf too complex in my opinion.
>
> Maybe so. It's worth considering some syntactic sugar to express a
> undefined=>0 intent.
One possibility is an optional second parameter to the extractor that
gives a default value. We could require this to be a constant (usually
0), or maybe even allow a numeric expression.
a <<< 1; del a // prepare an empty aggregate
printf("%d\n", @sum(a)) // runtime error
printf("%d\n", @sum(a, 0)) // prints 0
printf("%d\n", @sum(a, x)) // prints value of x
This works for min, max, and avg as well.
Or, instead of a default, it might be less confusing to consider the
second parameter as an initializer -- so when 'a' isn't empty, @sum(a,x)
== x + @sum(a). Then min and max would effectively get an upper and
lower bound, respectively. I'm not sure if avg works well this way
though.
Josh
More information about the Systemtap
mailing list