Hi,
i've got poor performance using RRDs::fetch with perl.
here is the problem. When you try to fetch value for a rdd file with then
command line, then rrdtool
malloc the entire space of memory needed. but when using the perl-shared module
is malloc the first
rows of data, then for each rows malloc the column needed. it's pretty
expensive in memory and cpu
usage. the possible solution it to malloc the array in one time. since my
knowledge of perl module
programming is near from zero. does anybody need how to do
actual RRDs.xs
#define rrdcode(name) \
argv = (char **) malloc((items+1)*sizeof(char *));\
argv[0] = "dummy";\
for (i = 0; i < items; i++) { \
STRLEN len; \
char *handle= SvPV(ST(i),len);\
/* actually copy the data to make sure possible
modifications \
on the argv data does not backfire into perl */ \
argv[i+1] = (char *)
malloc((strlen(handle)+1)*sizeof(char)); \
strcpy(argv[i+1],handle); \
} \
as you can see malloc is on the loop, and there is this dummy value on argv[0]
my solution **which doesn't work** but that might be helpful
#define rrdcode(name) \
argv = (char **) malloc((items+1)*sizeof(char *));\
aRgV[0] = (char *)malloc((items+1) * (30+1) * sizeof(char)); \
for (i = 0; i < items; i++) { \
STRLEN len; \
char *handle= SvPV(ST(i),len);\
/* actually copy the data to make sure possible
modifications \
on the argv data does not backfire into perl */ \
argv[i+1] = aRgV[0] + ((i+1) * 31); \
strcpy(argv[i+1],handle); \
} \
i've fixed the len of (*handle) to 31 , but i don't know what is the value.
some variable are uppercase
in case some would diff this bad code in his own.
that's all.
Regards
--
Alexandre
==
Don't try and use this release for anything useful. We have made every effort
to ensure that all
bits in this package are either 0 or 1. However, these bits may not be in the
correct order and proportion.
==
--
Unsubscribe mailto:[EMAIL PROTECTED]
Help mailto:[EMAIL PROTECTED]
Archive http://www.ee.ethz.ch/~slist/rrd-developers
WebAdmin http://www.ee.ethz.ch/~slist/lsg2.cgi