我有一个系统,我想用Munin记录,它使用RRDtool。我想要计算的一些值可能(某天)变得非常大,例如整数TB的整数。我想知道,当我尝试在其中存储大值时,我在Munin中使用的数据存储不会溢出。
我在http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html#IGAUGE的文档中看不到关于支持的数据大小,范围或精度的任何注释,我没有通过Google搜索相关术语找到任何内容。
有没有关于GAUGE,COUNTER,DERIVE,ABSOLUTE和COMPUTE数据存储的支持范围和精度的文档,请?
答案 0 :(得分:1)
在内部,RRDTool将值存储为double
数据类型。但是,这实际上意味着什么有时可能取决于您的系统架构和编译器 - 这是RRD文件不可移植的原因之一。
要了解系统中的值,假设您自己编译了代码,请在C头文件中查找DBL_MAX
的定义(检查float.h,limits.h,values.h。 ..)
在我们的系统中,Double的最大值为1.79769313486231470e+308
;然而,一旦你超过1.0e + 15,你将开始看到精度损失,因为尾数长度是有限的(它只有52位精度)
可以修改rrd_value_t
和rrd.h
中rrd_format.h
的定义,以使用long double
(80位精度)甚至__float128
或quadruple
(128位精度),如果你的编译器支持它,但是如果你这样做的话,你就可以自己做,而且肯定不会向后兼容......