From: Sebastien GODARD Date: Sat, 14 Sep 2013 13:59:58 +0000 (+0200) Subject: Add "prealloc" variable to configure script X-Git-Tag: v10.2.0~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=436f85f3731bfeb3eb8a30d3b7479472a141aba8;p=sysstat Add "prealloc" variable to configure script sar (or sadc) allocates empty records in the data files it creates so that it can save statistics for devices (disks, network interfaces, etc.) that may be added to the system after the file was created. The drawback is that data files take more space on disk than actually strictly necessary. Using the "prealloc" variable with configure (before compiling sysstat), the user can tell how much space he wants to allocate. This variable will determine the size of data files created by sar/sadc. The default value is 1, meaning that some empty records will be allocated. A value of 0 means that data files will be the smallest possible. --- diff --git a/.gitignore b/.gitignore index 3648e8b..7a8eccf 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ sysstat crontab version.h sysconfig.h +prealloc.h sysstat.sysconfig sysstat.service sysstat.crond diff --git a/Makefile.in b/Makefile.in index 48f994c..9ce9ee6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -199,7 +199,7 @@ xml_stats.o: xml_stats.c sa.h sadf.h ioconf.h sysconfig.h xml_stats.h json_stats.o: json_stats.c sa.h sadf.h ioconf.h sysconfig.h json_stats.h -sa_wrap.o: sa_wrap.c sa.h rd_stats.h count.h rd_sensors.h +sa_wrap.o: sa_wrap.c sa.h rd_stats.h count.h rd_sensors.h prealloc.h format.o: format.c sadf.h @@ -506,7 +506,7 @@ clean: find nls -name "*.gmo" -exec rm -f {} \; almost-distclean: clean nls/sysstat.pot - rm -f sa1 sa2 sysstat cron/crontab version.h sysconfig.h + rm -f sa1 sa2 sysstat cron/crontab version.h sysconfig.h prealloc.h rm -f sysstat.sysconfig cron/sysstat.crond cron/sysstat.cron.daily sysstat.service rm -f cron/sysstat.cron.hourly cron/sysstat.crond.sample cron/sysstat.crond.sample.in rm -f contrib/isag/isag diff --git a/build/prealloc b/build/prealloc new file mode 100644 index 0000000..898034f --- /dev/null +++ b/build/prealloc @@ -0,0 +1,12 @@ + +sar (or sadc) allocates empty records in the data files it creates so that +it can save statistics for devices (disks, network interfaces, etc.) that +may be added to the system after the file was created. The drawback is that +data files take more space on disk than actually strictly necessary. +Answer here a positive integer number telling sar/sadc how much space they +should allocate for such devices. The default value (1) means that a few +records will be allocated. A greater value (e.g. 2 or 3) means that many +more of them will be allocated. A value of 0 doesn't allocate any empty +records. +The default value should be OK for most of you. + diff --git a/configure b/configure index 051e05f..b8d6843 100755 --- a/configure +++ b/configure @@ -642,6 +642,8 @@ COMPRESS_MANPG IGNORE_MAN_GROUP MAN_GROUP man_group +PREALLOC_FACTOR +prealloc COMPRESSAFTER compressafter HISTORY @@ -758,6 +760,7 @@ sa_dir conf_dir history compressafter +prealloc man_group cron_owner cron_interval' @@ -1407,6 +1410,8 @@ Some influential environment variables: compressafter number of days after which data files are compressed (default value is 10) + prealloc preallocation factor that will determine data files size + (default value is 1) man_group group for manual pages cron_owner crontab owner cron_interval @@ -5053,6 +5058,19 @@ fi $as_echo "$COMPRESSAFTER" >&6; } +# Preallocation factor +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking preallocation factor value" >&5 +$as_echo_n "checking preallocation factor value... " >&6; } + +if test x$prealloc = x""; then + PREALLOC_FACTOR=1 +else + PREALLOC_FACTOR=$prealloc +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PREALLOC_FACTOR" >&5 +$as_echo "$PREALLOC_FACTOR" >&6; } + + # Manual page group grep ^man: /etc/group >/dev/null 2>&1 if test $? = 0; then @@ -5360,6 +5378,8 @@ ac_config_files="$ac_config_files version.h:version.in" # File must be renamed ac_config_files="$ac_config_files sysconfig.h:sysconfig.in" # File must be renamed +ac_config_files="$ac_config_files prealloc.h:prealloc.in" + # File must be renamed ac_config_files="$ac_config_files cron/sysstat.cron.daily" ac_config_files="$ac_config_files cron/sysstat.cron.hourly" @@ -6106,6 +6126,7 @@ do "sysstat.sysconfig") CONFIG_FILES="$CONFIG_FILES sysstat.sysconfig" ;; "version.h") CONFIG_FILES="$CONFIG_FILES version.h:version.in" ;; "sysconfig.h") CONFIG_FILES="$CONFIG_FILES sysconfig.h:sysconfig.in" ;; + "prealloc.h") CONFIG_FILES="$CONFIG_FILES prealloc.h:prealloc.in" ;; "cron/sysstat.cron.daily") CONFIG_FILES="$CONFIG_FILES cron/sysstat.cron.daily" ;; "cron/sysstat.cron.hourly") CONFIG_FILES="$CONFIG_FILES cron/sysstat.cron.hourly" ;; "cron/sysstat.crond") CONFIG_FILES="$CONFIG_FILES cron/sysstat.crond" ;; diff --git a/configure.in b/configure.in index 359b58a..c91e335 100644 --- a/configure.in +++ b/configure.in @@ -318,6 +318,17 @@ fi AC_MSG_RESULT($COMPRESSAFTER) AC_SUBST(COMPRESSAFTER) +# Preallocation factor +AC_MSG_CHECKING(preallocation factor value) +AC_ARG_VAR([prealloc],[preallocation factor that will determine data files size (default value is 1)]) +if test x$prealloc = x""; then + PREALLOC_FACTOR=1 +else + PREALLOC_FACTOR=$prealloc +fi +AC_MSG_RESULT($PREALLOC_FACTOR) +AC_SUBST(PREALLOC_FACTOR) + # Manual page group grep ^man: /etc/group >/dev/null 2>&1 if test $? = 0; then @@ -566,6 +577,7 @@ AC_CONFIG_FILES([cron/crontab:cron/crontab.sample]) # File must be renamed AC_CONFIG_FILES([sysstat.sysconfig]) AC_CONFIG_FILES([version.h:version.in]) # File must be renamed AC_CONFIG_FILES([sysconfig.h:sysconfig.in]) # File must be renamed +AC_CONFIG_FILES([prealloc.h:prealloc.in]) # File must be renamed AC_CONFIG_FILES([cron/sysstat.cron.daily]) AC_CONFIG_FILES([cron/sysstat.cron.hourly]) AC_CONFIG_FILES([cron/sysstat.crond]) diff --git a/iconfig b/iconfig index 05bdc9c..1d092c8 100755 --- a/iconfig +++ b/iconfig @@ -88,6 +88,12 @@ if [ "${COMPRESSAFTER}" != "" ]; then COMPRESSAFTER="compressafter=${COMPRESSAFTER} " fi +# Preallocation factor +PREALLOC_ANSWER=`${ASK} 'Preallocation factor value:' "prealloc" "prealloc"` +if [ "${PREALLOC_ANSWER}" != "" ]; then + PREALLOC_ANSWER="prealloc=${PREALLOC_ANSWER} " +fi + # Manual page group MAN=`${ASK} 'Group for manual pages:' "man_group" "man_group"` if [ "${MAN}" != "" ]; then @@ -194,11 +200,11 @@ fi echo echo "./configure ${PREFIX}${SA_LIB_DIR}${SA_DIR}${SYSCONFIG_DIR}${CLEAN_SA_DIR}${NLS} \ -${YESTERDAY}${HISTORY}${COMPRESSAFTER}${MAN}${IGNORE_MAN}${CRON}${RCDIR} \ +${YESTERDAY}${HISTORY}${COMPRESSAFTER}${PREALLOC_ANSWER}${MAN}${IGNORE_MAN}${CRON}${RCDIR} \ ${COMPRESSMANPG}${INSTALL_DOC}${DEBUGINFO}${INSTALL_ISAG}${SENSORS}${STRIP}" echo ./configure ${PREFIX}${SA_LIB_DIR}${SA_DIR}${SYSCONFIG_DIR}${CLEAN_SA_DIR}${NLS} \ -${YESTERDAY}${HISTORY}${COMPRESSAFTER}${MAN}${IGNORE_MAN}${CRON}${RCDIR} \ +${YESTERDAY}${HISTORY}${COMPRESSAFTER}${PREALLOC_ANSWER}${MAN}${IGNORE_MAN}${CRON}${RCDIR} \ ${COMPRESSMANPG}${INSTALL_DOC}${DEBUGINFO}${INSTALL_ISAG}${SENSORS}${STRIP} diff --git a/prealloc.in b/prealloc.in new file mode 100644 index 0000000..6045210 --- /dev/null +++ b/prealloc.in @@ -0,0 +1,17 @@ +/* + * sysstat: System performance tools for Linux + * (C) 1999-2013 by Sebastien Godard (sysstat orange.fr) + */ + +#ifndef _PREALLOC_H +#define _PREALLOC_H + +/* Preallocation constants for sar */ +#define NR_IFACE_PREALLOC (2 * @PREALLOC_FACTOR@) +#define NR_SERIAL_PREALLOC (2 * @PREALLOC_FACTOR@) +#define NR_DISK_PREALLOC (3 * @PREALLOC_FACTOR@) +#define NR_FREQ_PREALLOC (0 * @PREALLOC_FACTOR@) +#define NR_USB_PREALLOC (5 * @PREALLOC_FACTOR@) +#define NR_FILESYSTEM_PREALLOC (3 * @PREALLOC_FACTOR@) + +#endif /* _PREALLOC_H */ diff --git a/sa.h b/sa.h index b21baa2..c8799fb 100644 --- a/sa.h +++ b/sa.h @@ -9,6 +9,7 @@ #include #include "common.h" +#include "prealloc.h" #include "rd_stats.h" #include "rd_sensors.h" @@ -192,14 +193,6 @@ */ #define BITMAP_SIZE(m) ((((m) + 1) / 8) + 1) -/* Pre-allocation constants */ -#define NR_IFACE_PREALLOC 2 -#define NR_SERIAL_PREALLOC 2 -#define NR_DISK_PREALLOC 3 -#define NR_FREQ_PREALLOC 0 -#define NR_USB_PREALLOC 5 -#define NR_FILESYSTEM_PREALLOC 3 - #define UTSNAME_LEN 65 #define TIMESTAMP_LEN 16 #define HEADER_LINE_LEN 512