Files
lm-sensors/doc/libsensors-API.txt
T
Jean Delvare 883f4e49a3 libsensors: Get rid of arbitrary limit on per-type sensor count
When gathering the attributes of each hwmon chip, libsensors uses a
temporary structure in memory to order and group all the attributes
into features. This temporary structure used to be a single array with
room for every possible attribute/subfeature. While simple, this
approach required to predefine a maximum number of per-type sensor
that could be handled.

In order to get rid of this arbitrary limit, which we hit and had to
raise three times already, I changed the temporary structure to an
array of dynamically allocated per-type subattribute arrays. This lets
us not allocate any memory for types which aren't implemented by a
given chip, and more importantly, this lets us reallocate room for
more attributes of a given type as needed.

I decided to allocate chunks of 8 attributes at a time, as this seemed
a good compromise between two frequent reallocations and
over-provisioning. It could be tweaked if needed.

Icing on the cake, I benchmarked this change on two different systems
and it results in performance gains. The total heap usage as reported
by valgrind is down by 50% on average, with peak memory consumption
(as reported by valgrind's massif) also down by 43% on average. The
total instructions count (as reported by valgrind's callgrind) is down
by 11% on average, with measured execution time also down by a few
percents. Valgrind rocks, BTW.

I have some ideas to optimize the memory allocations further, but I do
not expect such a huge gain from them. They may not even improve peak
memory consumption as massif shows the peak is somewhere else now at
least in some cases.
2014-01-29 09:25:31 +00:00

107 lines
4.9 KiB
Plaintext

libsensors API history
======================
SENSORS_API_VERSION tracks the evolutions made to the libsensors API
over time. This document summarizes these evolutions so that application
authors can quickly figure out how to test for the availability of a
given new feature.
0x440 lm-sensors 3.4.0
* Defined SENSORS_FEATURE_MAX
enum sensors_feature_type SENSORS_FEATURE_MAX
0x432 lm-sensors 3.3.2 to 3.3.5
* Added support for new sysfs attributes
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_AVERAGE
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_LOWEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_HIGHEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_LOWEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_HIGHEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_AVERAGE
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_LOWEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_HIGHEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_MAX
enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_MIN_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_MAX_ALARM
0x431 lm-sensors 3.3.0 to 3.3.1
* Added support for intrusion detection
enum sensors_feature_type SENSORS_FEATURE_INTRUSION
enum sensors_subfeature_type SENSORS_SUBFEATURE_INTRUSION_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_INTRUSION_BEEP
* Added support for various new sysfs attributes
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_LCRIT
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_CRIT
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_LCRIT_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_CRIT_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_LCRIT
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_EMERGENCY
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_EMERGENCY_HYST
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_LCRIT_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_EMERGENCY_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_CAP
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_CAP_HYST
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_MAX
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_CRIT
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_CAP_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_MAX_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_CRIT_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_LCRIT
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_CRIT
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_LCRIT_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_CRIT_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_PULSES
* Added support for humidity sensors
enum sensors_feature_type SENSORS_FEATURE_HUMIDITY
enum sensors_subfeature_type SENSORS_SUBFEATURE_HUMIDITY_INPUT
0x430 lm-sensors 3.2.0
* License changed from GPL to LGPL
0x421 lm-sensors 3.1.2
* Added bus type "hid":
#define SENSORS_BUS_TYPE_HID
0x420 lm-sensors 3.1.1
* Added a method to free the memory allocated by sensors_parse_chip_name()
void sensors_free_chip_name(sensors_chip_name *chip);
0x410 lm-sensors 3.1.0
* Added bus type "acpi":
#define SENSORS_BUS_TYPE_ACPI
* Added support for instantaneous power sensors
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT_LOWEST
* Added support for current sensors
enum sensors_feature_type SENSORS_FEATURE_CURR
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_INPUT
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MIN
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MAX
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MIN_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_MAX_ALARM
enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_BEEP
* Added error value for excessive recursion depth
#define SENSORS_ERR_RECURSION 11
* Added parse error reporting function including the configuration file
name
extern void (*sensors_parse_error_wfn) (const char *err,
const char *filename, int lineno);
0x401 lm-sensors 3.0.2 to 3.0.3
* Added bus type "virtual":
#define SENSORS_BUS_TYPE_VIRTUAL
* Added support for power and energy sensors
enum sensors_feature_type SENSORS_FEATURE_POWER
enum sensors_feature_type SENSORS_FEATURE_ENERGY
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_AVERAGE
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST
enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL
enum sensors_subfeature_type SENSORS_SUBFEATURE_ENERGY_INPUT
0x400 lm-sensors 3.0.0 to 3.0.1
* Initial API.