C语言 内核统计信息的最大值 - python



问题:内核统计计数器的最大值是多少,如何在 python 代码中处理它?

上下文:我根据内核统计信息计算一些统计信息(例如/proc/partitions - 它将自定义 python iostat 版本)。但是我对溢出的值有问题 - 负值。原始iostat代码 https://github.com/sysstat/sysstat/blob/master/iostat.c 注释:

* Counters overflows are possible, but don't need to be handled in
* a special way: The difference is still properly calculated if the
* result is of the same type as the two values.

我的语言是python,在我的情况下,我需要关心溢出。可能这也取决于建筑(32/64)。我尝试过 2^64-1(64 位系统),但没有成功。

以下函数适用于 32 位计数器:

def calc_32bit_diff(old, new):
  return (new - old + 0x100000000) % 0x100000000
print calc_32bit_diff(1, 42)
print calc_32bit_diff(2147483647, -2147483648)
print calc_32bit_diff(-2147483648, 2147483647)

这显然是行不通的,因为计数器在两次连续读取之间多次环绕(但随后没有其他方法可以工作,因为信息已不可恢复地丢失)。

编写 64 位版本留给读者作为练习。 :)

最新更新