mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-10-24 12:04:33 +00:00
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.
107 lines
4.9 KiB
Plaintext
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.
|