Wednesday Jul 07, 2010

What Topology Map(s) is FMA Using?

When debugging FMA issues, there's been several times I've wanted to know what XML maps are being used to generate (or fail to generate :) the FM topology. I guess I reached a sufficient point of annoyance, so I wrote a pair of dtrace scripts to automate this. Here's an example from an Ultra 24 workstation running snv_140.

# ./topomaps.d -c /usr/lib/fm/fmd/fmtopo 2>/dev/null | grep Map Map: //usr/platform/i86pc/lib/fm/topo/maps/i86pc-hc-topology.xml Map: //usr/platform/i86pc/lib/fm/topo/maps/i86pc-legacy-hc-topology.xml Map: //usr/platform/i86pc/lib/fm/topo/maps/chip-hc-topology.xml Map: //usr/platform/i86pc/lib/fm/topo/maps/chassis-hc-topology.xml \^C

Now, I did say a pair of dtrace scripts. topomaps.d is the first script, which calls a second script topomapmon.d that ultimately traces the calls to topo_xml_read(). Two scripts are required to deal with the dynamic loading done by fmtopo. Anyway, drop both in the same directory and run with sufficient privileges and you should be good to go.

:wq

Tuesday Jul 22, 2008

Debugging topology map XML

I was working on modeling some topology today using straight XML to support the sun4v platform independent FMA project and roughly 2000 lines in, starting to get not-so-good results:

# /usr/lib/fm/fmd/fmtopo /usr/lib/fm/fmd/fmtopo: failed to walk hc topology: empty topology

Knowing that libtopo (as well as enumerators) often have some debug tracing functions, I did a search on OpenSolaris for topo debug environment variables. Two jumped out that looked useful for debugging XML issues, TOPOXML_VALIDATE and TOPOXML_PERROR. Turns out for my problem, the latter is what I wanted. Once set, and using the -d option for fmtopo:

# /usr/lib/fm/fmd/fmtopo //usr/platform/SUNW,FOO/lib/fm/topo/maps/FOO-hc-topology.xml:1821: parser error : Opening and ending tag mismatch: propgroup line 1682 and node </node> \^ //usr/platform/SUNW,FOO/lib/fm/topo/maps/FOO-hc-topology.xml:1822: parser error : Opening and ending tag mismatch: node line 1681 and range </range> \^ //usr/platform/SUNW,FOO/lib/fm/topo/maps/FOO-hc-topology.xml:1823: parser error : Opening and ending tag mismatch: range line 1680 and dependents </dependents> \^ ...

The first error was with a propgroup at line 1682. Looking at that area of the map:

1678 <!-- memory-controller 2 --> 1679 <dependents grouping='children'> 1680 <range name='memory-controller' min='0' max='3'> 1681 <node instance='2'> 1682 <propgroup name='protocol' version='1' 1683 name-stability='Private' data-stability='Private' > 1684 <propval name='FRU' type='fmri' 1685 value='hc:///motherboard=0/cpuboard=2' /> 1686 <propval name='label' type='string' value='MB/CPU2' /> 1687 1688 <!-- memory-controller 2's buffers --> 1689 <dependents grouping='children'> 1690 <range name='memory-buffer' min='4' max='5'>

Sure enough, I'd missed the the </proprgroup> after line 1686.

While it was very handy to have the XML debugging in libtopo, it got me wondering what XML editors are out there that would do this kind of syntactical checking while I'm adding in nodes. Afraid I'm a bit of an old dog using vi. Any favorites out there?

:wq

About

user9148476

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today