内核统计数据的最大值 - python
Maximum value of kernel statistics - 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 位版本留作 reader 的练习。 :)
问题:内核统计计数器的最大值是多少,我如何在 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 位版本留作 reader 的练习。 :)