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

Reply via email to