Feature #12330
closedlibtopo: add support for directed graph based topologies
100%
Description
Libtopo currently only supports building topologies based on a tree structure. The problem is that not all topologies map naturally to a tree structure.
For example. network and fabric topologies are really graph structures. There is currently work underway at Joyent to model SAS-based storage fabrics in software with the eventual goal of enhancing SmartOS' ability to diagnose the underlying cause(s) of SCSI transport problems.
To help enable that effort, this ticket covers the work necessary to extend libtopo to support building topologies that are based on directed graph structures.
Specifically, this ticket will cover adding new APIs to libtopo for the following:- building digraphs
- iterating over graph vertices
- iterating over vertice edges
- finding all paths between an arbitrary pair of vertices
- serializing a graph-based topology to XML
- deserialzing a graph-based topology from XML
Updated by Rob Johnston over 2 years ago
This work will also include changing the underlying type for a topo_instance_t from uint32_t to uint64_t. This adds additional flexibility in what can be encoded in a node instance. This will be leveraged by the SAS enumeration work described in illumos#12331, which will use the SAS address as the instance number for nodes in the SAS topology.
Additionally, this change will introduce a new FMRI scheme for representing a path between two arbitrary vertices(nodes) in a graph topology.
Updated by Rob Johnston over 2 years ago
Testing¶
These changes include automated tests which exercise the new libtopo interfaces. Output from those tests is captured below.
root@nvme:/var/tmp# ./digraph-test 2020-04-01T17:58:27Z Opening libtopo 2020-04-01T17:58:27Z TEST: Deserialize directed graph topology 2020-04-01T17:58:27Z Opening test XML topology 2020-04-01T17:58:27Z Deserializing XML topology 2020-04-01T17:58:27Z topo_digraph_deserialize() succeeded 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z TEST: Serialize directed graph topology 2020-04-01T17:58:27Z Serializing topology to XML (/var/tmp/digraAAA9XGMng) 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z Closing libtopo 2020-04-01T17:58:27Z Reopening libtopo 2020-04-01T17:58:27Z TEST: Deserialize directed graph topology (pass 2) 2020-04-01T17:58:27Z Opening test XML topology 2020-04-01T17:58:27Z Deserializing XML topology 2020-04-01T17:58:27Z topo_digraph_deserialize() succeeded 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z TEST: Calculating paths between vertices 2020-04-01T17:58:27Z Calculating number of paths between node 0 and node 4 2020-04-01T17:58:27Z Calculating number of paths between node 6 and node 4 2020-04-01T17:58:27Z Calculating number of paths between node 5 and node 1 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z Closing libtopo 2020-04-01T17:58:27Z Reopening libtopo 2020-04-01T17:58:27Z TEST: Deserialize directed graph topology (bad scheme) 2020-04-01T17:58:27Z Opening test XML topology 2020-04-01T17:58:27Z Deserializing XML topology 2020-04-01T17:58:27Z topo_digraph_deserialize() failed! 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z TEST: Deserialize directed graph topology (bad number) 2020-04-01T17:58:27Z Opening test XML topology 2020-04-01T17:58:27Z Deserializing XML topology 2020-04-01T17:58:27Z topo_digraph_deserialize() failed! 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z TEST: Deserialize directed graph topology (bad edge) 2020-04-01T17:58:27Z Opening test XML topology 2020-04-01T17:58:27Z Deserializing XML topology 2020-04-01T17:58:27Z topo_digraph_deserialize() failed! 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z TEST: Deserialize directed graph topology (bad element) 2020-04-01T17:58:27Z Opening test XML topology 2020-04-01T17:58:27Z Deserializing XML topology :35: parser error : Opening and ending tag mismatch: badelement line 15 and nvlist </nvlist> ^ 2020-04-01T17:58:27Z topo_digraph_deserialize() failed! 2020-04-01T17:58:27Z PASS 2020-04-01T17:58:27Z digraph tests passed
In addition to verifying that the automated tests passed, I also observed the topo functions being called and their return values using the pid provider for dtrace and verified that expected codepaths were exercised as expected.
Finally, these changes have been tested in conjunction with the in-development changes for illumos#12331 (SAS Topology enumeration). The output below is from a new tool (sastopo) which will be part of the illumos#12331 changes. sastopo dumps the generated SAS topology (which is digraph-based). The combination of generating the SAS topology and then dumping it with sastopo fully exercises all of the new libtopo interfaces.
# /usr/lib/fm/fmd/sastopo -pV path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc881d5/target=5000c500adc881d4 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 0 Logical Disk: c0t5000C500ADC881D7d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc88585/target=5000c500adc88584 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 1 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 1 Logical Disk: c0t5000C500ADC88587d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc08f49/target=5000c500adc08f48 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 2 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 2 Logical Disk: c0t5000C500ADC08F4Bd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc8bd7d/target=5000c500adc8bd7c Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 3 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 3 Logical Disk: c0t5000C500ADC8BD7Fd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc7a3d9/target=5000c500adc7a3d8 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 4 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 4 Logical Disk: c0t5000C500ADC7A3DBd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000cca0496fca6d/target=5000cca0496fca6f Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 5 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 4 4 3 0 Node Type: SAS Target Location: Front Slot 5 Logical Disk: c2t5000CCA0496FCA6Dd0 Manufacturer: HGST Model: HUSMH8010BSS204 path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc0e249/target=5000c500adc0e248 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 6 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 6 Logical Disk: c0t5000C500ADC0E24Bd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc78615/target=5000c500adc78614 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 7 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 7 Logical Disk: c0t5000C500ADC78617d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adcc757d/target=5000c500adcc757c Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 8 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 8 Logical Disk: c0t5000C500ADCC757Fd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adceed1d/target=5000c500adceed1c Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 9 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 9 Logical Disk: c0t5000C500ADCEED1Fd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc79e65/target=5000c500adc79e64 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 10 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 10 Logical Disk: c0t5000C500ADC79E67d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adce5db9/target=5000c500adce5db8 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 11 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 11 Logical Disk: c0t5000C500ADCE5DBBd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc7da49/target=5000c500adc7da48 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 28 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 12 Logical Disk: c0t5000C500ADC7DA4Bd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adce5675/target=5000c500adce5674 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 29 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 13 Logical Disk: c0t5000C500ADCE5677d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc8f3bd/target=5000c500adc8f3bc Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 30 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 14 Logical Disk: c0t5000C500ADC8F3BFd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=5000c500adc70b61/target=5000c500adc70b60 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 31 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Front Slot 15 Logical Disk: c0t5000C500ADC70B63d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=500304801e84c7ff/expander=500304801e84c7ff/port=500304801e84c7ff/port=5000c500adc04681/target=5000c500adc04680 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Manufacturer: LSI Model: SAS3x28 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 3 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Rear Slot 3 Logical Disk: c0t5000C500ADC04683d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=500304801e84c7ff/expander=500304801e84c7ff/port=500304801e84c7ff/port=5000c500adc8c8d1/target=5000c500adc8c8d0 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Manufacturer: LSI Model: SAS3x28 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 4 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Rear Slot 4 Logical Disk: c0t5000C500ADC8C8D3d0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=500304801e84c7ff/expander=500304801e84c7ff/port=500304801e84c7ff/port=5000c500adc7d7a9/target=5000c500adc7d7a8 Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Manufacturer: LSI Model: SAS3x28 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 5 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Rear Slot 5 Logical Disk: c0t5000C500ADC7D7ABd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=500304801e84c7ff/expander=500304801e84c7ff/port=500304801e84c7ff/port=5000c500adcc907d/target=5000c500adcc907c Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Manufacturer: LSI Model: SAS3x28 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 6 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Rear Slot 6 Logical Disk: c0t5000C500ADCC907Fd0 Manufacturer: SEAGATE Model: ST16000NM002G path://scheme=sas/initiator=5003048023567a00/port=5003048023567a00/port=500304801861347f/expander=500304801861347f/port=500304801861347f/port=500304801e84c7ff/expander=500304801e84c7ff/port=500304801e84c7ff/port=5000c500adc0b5bd/target=5000c500adc0b5bc Node Type: SAS Initiator Location: CPU2 SLOT 2 PCI-E 3.0 X16 Manufacturer: Broadcom / LSI Model: SAS3008 PCI-Express Fusion-MPT SAS-3 Node Type: SAS Initiator Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 0 0 0 0 7 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 20 249 17 46 0 21 251 14 46 0 22 225 14 46 0 23 103 12 46 0 24 253 18 46 0 25 250 22 46 0 26 257 27 46 0 27 252 22 46 0 Node Type: SAS Expander Manufacturer: SMC Model: SC846P Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 12 0 0 0 0 13 0 0 0 0 14 0 0 0 0 15 0 0 0 0 16 0 0 0 0 17 0 0 0 0 18 0 0 0 0 19 0 0 0 0 Node Type: SAS Expander Manufacturer: LSI Model: SAS3x28 Node Type: SAS Expander Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 7 0 0 0 0 Node Type: SAS Target Port PHY Error Counters: PHY# invalid-dword running-disp-errs loss-dword-sync reset-problems 0 0 0 2 0 Node Type: SAS Target Location: Rear Slot 7 Logical Disk: c0t5000C500ADC0B5BFd0 Manufacturer: SEAGATE Model: ST16000NM002
Updated by Rob Johnston about 2 years ago
In addition to the testing noted above, I reran the test suite with UMEM_DEBUG=default and DIGRAPH_TEST_CORE=1. The latter causes the test suite to abort and drop a core before exiting. This was done to check for bad memory juju and verify that no memory leaks were being introduced by this change.
$ export UMEM_DEBUG=default
$ export DIGRAPH_TEST_CORE=1
$ /opt/os-tests/tests/libtopo/digraph-test
2020-04-03T12:49:14Z Opening libtopo
2020-04-03T12:49:14Z TEST: Deserialize directed graph topology
2020-04-03T12:49:14Z Opening test XML topology
2020-04-03T12:49:14Z Deserializing XML topology
2020-04-03T12:49:14Z topo_digraph_deserialize() succeeded
2020-04-03T12:49:14Z PASS
2020-04-03T12:49:14Z TEST: Serialize directed graph topology
2020-04-03T12:49:14Z Serializing topology to XML (/var/tmp/digraAAAh2G9ng)
2020-04-03T12:49:14Z PASS
2020-04-03T12:49:14Z Closing libtopo
2020-04-03T12:49:14Z Reopening libtopo
2020-04-03T12:49:14Z TEST: Deserialize directed graph topology (pass 2)
2020-04-03T12:49:14Z Opening test XML topology
2020-04-03T12:49:14Z Deserializing XML topology
2020-04-03T12:49:14Z topo_digraph_deserialize() succeeded
2020-04-03T12:49:14Z PASS
2020-04-03T12:49:14Z TEST: Calculating paths between vertices
2020-04-03T12:49:14Z Calculating number of paths between node 0 and node 4
2020-04-03T12:49:14Z Calculating number of paths between node 6 and node 4
2020-04-03T12:49:14Z Calculating number of paths between node 5 and node 1
2020-04-03T12:49:14Z PASS
2020-04-03T12:49:14Z Closing libtopo
2020-04-03T12:49:14Z Reopening libtopo
2020-04-03T12:49:15Z TEST: Deserialize directed graph topology (bad scheme)
2020-04-03T12:49:15Z Opening test XML topology
2020-04-03T12:49:15Z Deserializing XML topology
2020-04-03T12:49:15Z topo_digraph_deserialize() failed!
2020-04-03T12:49:15Z PASS
2020-04-03T12:49:15Z TEST: Deserialize directed graph topology (bad number)
2020-04-03T12:49:15Z Opening test XML topology
2020-04-03T12:49:15Z Deserializing XML topology
2020-04-03T12:49:15Z topo_digraph_deserialize() failed!
2020-04-03T12:49:15Z PASS
2020-04-03T12:49:15Z TEST: Deserialize directed graph topology (bad edge)
2020-04-03T12:49:15Z Opening test XML topology
2020-04-03T12:49:15Z Deserializing XML topology
2020-04-03T12:49:15Z topo_digraph_deserialize() failed!
2020-04-03T12:49:15Z PASS
2020-04-03T12:49:15Z TEST: Deserialize directed graph topology (bad element)
2020-04-03T12:49:15Z Opening test XML topology
2020-04-03T12:49:15Z Deserializing XML topology
:35: parser error : Opening and ending tag mismatch: badelement line 15 and nvlist
</nvlist>
^
2020-04-03T12:49:15Z topo_digraph_deserialize() failed!
2020-04-03T12:49:15Z PASS
2020-04-03T12:49:15Z digraph tests passed
Abort (core dumped)
$ mdb core
Loading modules: [ libc.so.1 libtopo.so.1 libumem.so.1 libnvpair.so.1 libuutil.so.1 libavl.so.1 ld.so.1 ]
::findleaks -d
findleaks: no memory leaks detected
Updated by Electric Monk about 2 years ago
- Status changed from New to Closed
- % Done changed from 0 to 100
git commit c559157643fef9f9afb0414e00a3579407ba3052
commit c559157643fef9f9afb0414e00a3579407ba3052 Author: Rob Johnston <rob.johnston@joyent.com> Date: 2020-04-03T19:03:01.000Z 12330 libtopo: add support for directed graph based topologies Portions contributed by: Kody Kantor <kody.kantor@joyent.com> Reviewed by: Robert Mustacchi <rm@fingolfin.org> Approved by: Dan McDonald <danmcd@joyent.com>