Eeprom driver optimization
Mark D. Studebaker
mds at paradyne.com
Tue Aug 19 20:41:59 CEST 2003
The refresh time is 5 minutes now.
As I've said before, I consider the eeprom driver a "demonstration" rather than
something with a whole lot of value.
Therefore I don't feel that inefficiency is a big concern.
But if there's some generic method to reduce the number of accesses
that could be added, that may be interesting.
I'm not in favor of more Vaio- or EDID-specific stuff
("subsets") in eeprom.c.
Philip Pokorny wrote:
> I would suggest that the chance of eeprom contents changing during
> normal running is *very* small.
> Therefore, you could set the refresh time to be *very* long by default
> (and make it configurable if the VAIO BIOS is changing the eeprom
> underneath us. Gosh I hope not...) Say 10 minutes or more. Then read
> the contents once, and cache the results.
> An alternative would be to just divide the eeprom into 16-byte subsets
> and assign a refresh timer to each. This matches the /proc organization
> pretty well. (16 bytes per file)
> But since sysfs is coming soon and Greg KH's proposal is a single binary
> file for eeprom's, I think my first suggestion is better for the future...
> Jean Delvare wrote:
>> Hi all,
>> As I was working on the eeprom driver, one thing came to my mind. If
>> should be possible to significantly speed the eeprom module up. As it is
>> now, requesting one single byte from the eeprom cause the whole eeprom
>> (256 bytes) to be read. Of course, we don't want to refresh bytes
>> one-by-one, it would be too complex. But maybe we could define subsets
>> of bytes that should be refreshed at once. In a way, this joins a
>> previous discussion about driver design
>> (http://archives.andrew.net.au/lm-sensors/msg03657.html). Philip Pokorny
>> already did something similar in the adm1026 driver, introducing a
>> second refresh frequency for limits, as opposed to measured values.
>> Still there is a single update function in the adm1026 driver, and this
>> too could be discussed. And a general discussion about these policies
>> would be welcome for sensor drivers.
>> But let's stick to the eeprom module for now (my train leaves in less
>> than 3 hours now so I'm a bit short in time).
>> When sensors is called for regular memory eeproms, the rows that will be
>> accessed (to return the memory type and the memory size) are 1 and 2
>> (counting rows from 1 to 16). When called for a Sony Vaio EEPROM, it
>> will read rows 9, 13 and 14. For an EDID it will read rows 1 and 9 (but
>> this could be changed to row 1 only). Likewise, running the
>> decode-eeprom, decode-vaio and decode-edid scripts will only access
>> subsets of the eeprom. At the very least, I believe we should divide the
>> eeprom in two subsets: rows 1-2 and rows 3-16. That would make sensors
>> far faster on memory eeproms. Additionally, I think I remember these
>> eeproms are usually 64-byte or 128-byte long (EDIDs are), only the
>> Vaio's are 256-byte long. So we could define 4 subsets instead: rows
>> 1-2, rows 3-4, rows 5-8 and rows 9-16. I believe that this would speed
>> up sensors and scripts much. This would require to add separated refresh
>> timers, but I think it's worth it.
>> I don't know if it's worth it defining more complex subsets. For example
>> we could define a subset for the 5 bytes used by sensors for memory
>> eeproms. This would make things even faster, but OTOH too many subsets
>> will be difficult to optimize, especially if more and more eeprom types
>> appear (I think I remember see many unknown eeproms in user reports
>> these last months).
>> I'll try this while in the train, but I still would like to hear
>> opinions about this.
More information about the lm-sensors