LM Sensors Autoconfig Tool - Database aspects

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hans de Goede wrote:

hi Hans,

> Jim Cromie wrote:
>   
>> This is an important choice of directions.  Setting that aside for the 
>> moment,
>> the database has great value in its own right, esp if this is recognized 
>> early, and maximized.
>>
>> Id suggest looking for available fingerprint-worthy items - they offer 
>> the possiblity of
>> setting up multiple indices which at minimum could help to optimize the 
>> implementation.
>>
>>     
>
> I agree after seeing some of the dmidecode posts here it has become
> clear to me that dmidecode output alone will not be enough (sigh) as
> many bioses don't have proper tables.
>
>
>   
Ooh that sounds like agreement of sorts -

I went back to the webite you posted links to, what you said there seems
more reliant on dmidecode than I think you're thinking now..

We have a quality of information problem.  This is true on many levels .
We're trying to improve an untenable situation ( trying to make optimized
configuration decisions based upon incomplete info about nearly
un-knowable mobo environs, at least wrt probing currently) with other 
imperfect info.
- improve Q of the data which drives choices
- use more data
    - must learn which data is good


>> `checksum /proc/cpuinfo`
>>
>> that almost works, but is devalued / diffused by the characteristic that
>> both cpu-mhz and bogo-mips vary with the current cpufreq.
>> Still, it results in a small-finite number for each CPU ( 4-5 for my 
>> pentium-M )
>>
>> `grep -vE 'cpu MHz|bogomips' /proc/cpuinfo | cksum`
>>
>>     
>
> I think this is the better one to use, not sure if we should use
> checksums though, it might be better to actually have the output of the
> grep command since thats human readable.

Id say we want both and both:
    checksum and content,
    modified content and modified checksum.
Both contain unifying report-number.

why both ? we can learn (in this particular case)
- how many different frequencies this CPU/MOBO can run at
- whether this CPU can do more than this MOBO
- for CPUs that match on a group of frequencies,
    how many reported into each bucket ?
- the raw data can be cleaned out if
    we need the space
    many rows (thousands) collapse to single cooked one
    thousands means mature, uninteresting here..

The key is storing chunks that are profitably comparable.


>  Also we want to identify the
> mainboard not the CPU afaik. Then again some cpu's have build in sensors
> connected to the smbus, right?
>
>   
The CPU and the MOBO are highly correlated - which seems important
in this "recognize good data automatically" world we're in.


> So we want to identify both the mainboard and the cpu. giving each
> a seperate sensors.conf snippet. This makes me like the export the
> database as a bunch of flat files and put #include statements in
> sensors.conf idea even more, then we can haev a seperate include for
> both the mainbaord and the cpu (for cpu's with sensors).

from a user-standpoint I dont care about includes.
On the 2 machines I run regularly, one is acpi, the other is sensors.conf
is edited down to the 1 device I have.
from the admin / dist / cvs view I agree completely

and out of pure curiousity,     I would look at sensors.conf.cpu-* files 
to see who has what..

>  This does mean
> that the modules must always be loaded in such a way tha the i2c
> controller/master on who's bus are the cpu(s) is always controller0!
>
>
>   
umm  no idea what that means,
or in the end how much it would matter....
If there are 2, 5, or 10 slot variations that the database collects,
we would learn that, esp with decent web-query front ends.

Bugzilla almost surely has some established practices wrt this,
others abound too.  Thats a give-take between you, the 4 team members,
and the foundation.

>> `lspci | cksum`
>>
>> lspci output, or certain parts of it, are consistent across a batch of 
>> motherboards,
>> and hence are valuable for identification.
>>
>> There are many potential variations on lspci,
>> forex:
>> $ for device in `lspci -n | cut -d\  -f 4`; do
>>     echo lookat $device;    
>>     lspci -vv -d $device | cksum;
>> done
>>
>> Each chunk is a compact unit that is likely to have lots of commonality,
>> forex across many motherboards, this would likely be found:
>>
>> lookat 8086:24c6
>> 00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) 
>> AC'97 Modem Controller (rev 03) (prog-if 00 [Generic])
>>         Subsystem: Sony Corporation: Unknown device 818c
>>         Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- 
>> ParErr- Stepping- SERR- FastB2B-
>>         Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
>> <TAbort- <MAbort- >SERR- <PERR-
>>         Latency: 0
>>         Interrupt: pin B routed to IRQ 9
>>         Region 0: I/O ports at e400 [size=256]
>>         Region 1: I/O ports at e080 [size=128]
>>         Capabilities: <available only to root>
>>
>> fingerprints on each line of lspci individually are more likely to avoid
>> irrelevant variations like IO ports, etc.  Stripping the 1st column 
>> might even be better.
>>
>> 00:00.0 Host bridge: Intel Corporation 82855PM Processor to I/O 
>> Controller (rev 03)
>> 00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM 
>> (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03)
>> 01:00.0 VGA compatible controller: ATI Technologies Inc RV350 [Mobility 
>> Radeon 9600 M10]
>> 02:01.0 CardBus bridge: Texas Instruments PCI7420 CardBus Controller
>> 02:01.2 FireWire (IEEE 1394): Texas Instruments PCI7x20 1394a-2000 OHCI 
>> Two-Port PHY/Link-Layer Controller
>> 02:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG (rev 05)
>> 02:03.0 Ethernet controller: Intel Corporation 82541GI/PI Gigabit 
>> Ethernet Controller
>>
>>
>> Summarizing, a Mobo-ID is a composite of as many partial fingerprints as 
>> possible;
>> obviously some items would be identifiable as not part of the 
>> motherboard, but cataloging
>> them would be cheap (since duplicates are automatically and cheaply 
>> detected (by the fingerprint).
>> Referential integrity goodness follows.
>>
>>     
>
> I have been thinking along the same lines, but how can one differ
> between onboard peripherals and add in cards with lspci?
>
>   
Heres how.

Consider a new report coming in from a desktop, which is likely
to have both on-the-mobo stuff, and pci cards plugged in.
Laptops will probably have more built-ins.

If that report is 'parsed' into the right chunks, those chunks are trivially
matchable on (any) existing rows.

Ok, so the new report has been chunked, and the results are:

3664734889
517486700
1357016642
2667015379
3591110619
3186403710
1684482534
2594428371
1744699660

Ok  - not too helpful, you think.  (Im hiding the content to make a point)

If 3664734889 has been found in > 500 reports, coming from both
AMD and Intel machines, 80 % of which are desktops, its a pretty fair bet
that its a plug-in card of some flavor, and not particularly useful to 
your quest.

lets suppose you do the right thing, look at the output text, pull out the
pci device-id,and figure out that its a vortex-card, sitting in PCI slot X

    mv 3664734889  3664734889-vortex-boomerang-pci-sX

Later, we add a filter, active for lspci-chunks, that extracts the 
bus-addys, and anything
else that we might want to histogram (rather than save raw).  With 5-6 
slots max
on 90% mobos today, you get a lot by saving the histogram, and dumping 
the raw.

that identified chunk is now available for regexification, and use against
raw data, both new ones, and ones already in the database - thus we get
more info out of our data-collection.

ok - a bit fabricated.. lets try another (yeah right, like this ones not 
loaded too ;-)

suppose youve got a chunk that has showed up a dozen times, but hasnt
been annotated in any way.  All we know is that 12 reports showed the
same piece of content (quite distinct from same whole-document !!)

So, we look at it :

soekris:/sys/bus/i2c/devices/9191-6620# ls
alarms_in      in1_input   in4_min     in8_input     temp2_crit    
temp4_status
alarms_temp    in1_max     in4_status  in8_max       temp2_input   
temp5_crit
bus@           in1_min     in5_input   in8_min       temp2_max     
temp5_input
cpu0_vid       in1_status  in5_max     in8_status    temp2_min     temp5_max
driver@        in2_input   in5_min     in9_input     temp2_status  temp5_min
hwmon:hwmon0@  in2_max     in5_status  in9_max       temp3_crit    
temp5_status
in0_input      in2_min     in6_input   in9_min       temp3_input   
temp6_crit
in0_max        in2_status  in6_max     in9_status    temp3_max     
temp6_input
in0_min        in3_input   in6_min     name          temp3_min     temp6_max
in0_status     in3_max     in6_status  temp1_crit    temp3_status  temp6_min
in10_input     in3_min     in7_input   temp1_input   temp4_crit    
temp6_status
in10_max       in3_status  in7_max     temp1_max     temp4_input   uevent
in10_min       in4_input   in7_min     temp1_min     temp4_max     vrm
in10_status    in4_max     in7_status  temp1_status  temp4_min

wow - that looks familiar !  (to some of you)

Now lets suppose the 12th man to send a report that *hits* this record is
Henrik Brix Anderson (name-dropping is fun).  When he sent his report in,
he used his real email, and got an auto-reply.  He read that, saw that the
tool didnt recognize stuff about a computer that he has, and knows a 
bunch about.
He follows links in the email, and uploads his /etc/sensors.conf, and 
his url.
The app sends an email to every reporter about the event / uploaded 
goodness.

Too blue sky ! the naysayers cry (not that Im calling you one Hans,
just taking keyboard liberties).  Actually, Id think an extension to 
bugzilla
or many other working systems is the fastest & surest way to a killer app.

Another contrived example

Suppose we have a chunk in the db thats unique -
we know its a small chunk, since we adopted that strategy
but still - nobody else has encountered that hardware / thingy ?
So we look at it.  (notice that up til now, nobody has)

02:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG (rev 06)
        Subsystem: Intel Corporation: Unknown device 2751
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- 
ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR-
        Latency: 64 (750ns min, 6000ns max), Cache Line Size 10
        Interrupt: pin A routed to IRQ 7
        Region 0: Memory at ff6fd000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: <available only to root>

that also looks familiar - lets query for text matches 2200BG , type = 
'lspci -vv'
we see a chunk with 100s of hits. whats up ?

-02:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG (rev 05)
+02:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG (rev 06)

I told you it was contrived.

But its important to someone, and fairly close to 'emergent'






>>> I own lots of motheboards, however most
>>> of them are too different (i want to see, how similar are the reports of
>>> dmidecode on "similar" motheboards (i.e. different revisions)).
>>>
>>>       
>
> Do we have different motherboard revisions which are so different that
> the revison matters for sensors.conf, or do you want to know this so
> that the autoconfig tool will correctly identify all revisions?
>   
we want the database to be able to tell us over time
for that we need
- easy platform-analyse script and upload system,
    so the data becomes available,
- excellent similarity detector, to:
    maximize semantic understanding,
       leads to maximized info reuse
    learn from the histogram of the rows
       add a labelling system to further leverage info.
> --- end of reply ---
>
> My own idea for being able to configure motherboards with a broken (or
> no) dmi table was to actually use the motherboard. In my memory dos
> tools were able to provide all kinda info on the bios, like version
> string, etc. Often the version string contains the mobo model. Anyone
> know how these dos tools did this (are these strings at a fixed memory
> location, or was it a dos int?).
>   
consider this 2 liner:
    sudo dmidecode > sony-dmi-out
     perl -de'$/=undef;$b=<>;@p=split/Handle/ms,$b; print"@p"' < 
sony-dmi-out

this will parse/chunkify the dmidecode output like I described in 
earlier msg, on /Handle/.

If each chunk were fingerprinted, we could answer:

- how many bios vendors ?
    A - query for chunks with type==dmidecode' which match /DMI type 0/
    select distinct Vendor (add count and group by for more)

- how many different bioses have been released ?
    A - same as before +
    from these, select Vendor, Version, Release-date, catenate, and 
histogram.

- do any vendors reuse versions across different platforms ?
    easy, with a database.

(Implicit feature creep)

For those who didnt notice, I started 'parsing into lines' right in the 
middle there.
There are cases where the data warrants it, others where it doesnt.

Another case where its good .. lsmod
Consider this :

Module                  Size  Used by
ndiswrapper           148396  0
usbcore                99144  1 ndiswrapper
scx200_gpio             4844  0
scx200                  4688  1 scx200_gpio
pc8736x_gpio            6452  0
nsc_gpio                4384  2 scx200_gpio,pc8736x_gpio
pc87360                18096  0
hwmon_vid               2624  1 pc87360
i2c_isa                 6016  1 pc87360
i2c_core               21664  2 pc87360,i2c_isa

parse by the line, hash / partial-index the 1st token,
now you know how many times each module gets used in the linux world.
Given that some of the modules will be loaded,

size is unlikely to ever be used, and in this case, should be stripped 
to reduce
database size.  OTOH - it could be useful if someone wanted to track that -
- I can imagine some for curiosity, not for practical value atm.
- see below for another example ..




> I'm thinking about a tool which memmaps /dev/mem at 0xf0000 - 0xfffff
> where the bios is and making a hexdump to see if I can dig up any
> interesting info there which could help us identifying the mainboard.
>   
I cannot evaluate these nuggets you could dredge out.
I would only observe that they should show correlation with something before
we know how much to count upon them.

In a twisted way, they need this system up and running to help evaluate them
against the panoply of configuration files that become available once it 
is working.

> Now modern bioses are bigger then the 64k window at 0xf0000 - 0xfffff
> does anyone know how one gets to the rest of the bios? (a bios checksum
> might nbe another way to identify mainboards, yes I know we will have
> problems with multiple bios versions).
>
> Regards,
>
> Hans
>
>
>   
Im flogging this horse - to the point Im feeling self concious about it -
- but let me float 1 more example.
   
dmesg output

For info extraction, we definitely want to chunkify to the line, strip 
out leading timestamps.
If we want to go Full-RI,  the dmesg-parse-captures table has these cols;
a content-hash - PK
a report-key - FK  (or a dmesg-rpt-key, which links up)

Once we collect dozens of reports, *many* dmesg lines will emerge as 
known-good,
and conversely, error messages become immediately obvious.

Freeing initrd memory: 1065k freed
NET: Registered protocol family 16
ACPI: bus type pci registered
PCI: PCI BIOS revision 2.10 entry at 0xf0031, last bus=2
PCI: Using configuration type 1
ACPI: Subsystem revision 20060127
ACPI: Interpreter enabled
ACPI: Using PIC for interrupt routing
ACPI: PCI Root Bridge [PCI0] (0000:00)
PCI: Probing PCI hardware (bus 00)
PCI quirk: region 0400-047f claimed by ICH4 ACPI/GPIO/TCO

Simple regexs could compress out the irrelevancies, trivially,
and could easily evolve (given enough time) where the maintainer
of a driver supplies you with regexs of messages they dont want to see 
anymore.

forex, ACPI folks might supply rex to suppress this.

ACPI: PCI Interrupt 0000:02:03.0[A] -> Link [LNKB] -> GSI 9 (level, low) 
-> IRQ 9
ACPI: PCI Interrupt 0000:02:02.0[A] -> Link [LNKC] -> GSI 7 (level, low) 
-> IRQ 7

Or, if they were hungry for mapping info, and the facilities were there..

s/ACPI: PCI Interrupt 0*?)\[()\] -> Link \[(\w+)\]  ... / 
insert(pcidev=>$1, lnk=>$3,...)/e;

this perl regex captures interesting parts of the line, and calls a 
routine ..
Obviously doable other (wordier) ways, and completely untested too.



I know this smells like mission-creep, but Id re-phrase that (were I 
asked ;) as
 
taking advantage of a tactical situation that incurred no new risk,
instead lowering it by reducing reliance on possibly bad data,
from our (as yet non-existent) data-content.

Im also convinced that theres value to be mined here -      
-a possible "kill-many-birds-with-one-great-throw" outcome.



Ok, I sat on this for 8 more hours, and Im still not all wound out.

GIT:
- git repo works entirely by checksums - it holds the development 
process together.
- the A*S*M configs could trivially be added to git repos, where the

--  the march-of-versions that each *-config undergoes,  over  2.6.1[6789].*
    carries a clear and concise record of what configs and modules were 
added,
    and when they changed enough to affect the xconfig experience.
    As such, it is valuable.

-- when bugs are reported, a .config often comes with.
    it could be a diff instead :
        against any of the 'predefined+platform-defaults'
          virtue of brevity
          maybe of clarity

-- its really nothing less than the foundation of kernel-genetics

- Having a finite universe of .configs (by dropping the date),
and collecting Confinger-prints and key CONFIG vars, allows great leaps
in tracability of changes (and the bugs they cause, fix),
which could soon benefit the guys who needs it most:

- the kconfig-twizzler hobbyist  ;-)
- Google's back room uber-gurus
    that keep 1000's of servers humming,
    and dozens of mini-clusters busy, spinning plates, folding protiens, 
and stuff.
       (FTR, im making that stuff up, but it could be)

- Im quite off topic now on this, and Im becoming a zealot -
I hope folks will challenge me to explain what doesnt make sense to them.

if this project LMS-AT - (or maybe LMS-aCT), with its 
fedora-core-associations,
has ability to widen the perspective, and scale up to big iron,
the finger-printing system could be exploited by numerous benchmarking 
and QA projects.

XENOMAI: ( one last example )

xenomai.org has a xeno-test script which runs a series of RT latency tests,
after it collects a snapshot of the platform.  It has nascent code to bundle
and email/upload the results tarball, but lacks either;
    a site to send emails, upload testdata and platform-data to.
    OR the ability to send a spam-filter-safe-message

Once they have data that is comparable, they can look for intra-platform
similarities, and inter-platform differences, in a 
data->analysis->inference->bugfix
process.  Or thats the hope.  But clearly a multi-vector 
correllation->identification
system would help them select tailored datasets for their investigations.
Query services connecting to the raw, or prepared data would complete 
the picture.

an egghead abstract wrt scale-space theory
http://www.visionscience.com/mail/vslist/2000/0264.html
an egghead book on subject
http://springerlink.metapress.com/(osdyeu55e3x1wi45hi2lb4fm)/app/home/contribution.asp?referrer=parent&backto=issue,89,179;journal,1171,3854;linkingpublicationresults,1:105633,1

Im not saying I understand that stuff, only that it seems to resonate
somehow as a unifying viewpoint on many problems.

Id hope that fedora-foundation could see fit to host a pass-thru service 
that
collects uploads/emails, extracts and fingerprints the 'known' stuff.
Known is an evolving thing, and here would include knowing that the
performance data is not finger-printable, and it is passed thru to 
client projects,
along with all/some of the fingerprints, per their preferences - ML 
being common.
Each project might want to manage custom finger-print vectors,
that are more or less particular about stuff.

whew!
-jimc

.. one more thing .. <ducks>





[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux