EX-10319: Added lnetctl global show#130
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #130 +/- ##
==========================================
- Coverage 94.57% 94.28% -0.30%
==========================================
Files 46 46
Lines 6107 6214 +107
Branches 6107 6214 +107
==========================================
+ Hits 5776 5859 +83
- Misses 256 270 +14
- Partials 75 85 +10
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
| Branch | paljain/add_lustre_global_show |
| Testbed | ci-runner |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result nanoseconds (ns) (Result Δ%) | Lower Boundary nanoseconds (ns) (Limit %) | Upper Boundary nanoseconds (ns) (Limit %) |
|---|---|---|---|---|
| parse_benchmarks/combine_performance | 📈 view plot 🚷 view threshold | 128,390,000.00 ns(-47.06%)Baseline: 242,510,050.00 ns | -677,085,841.16 ns (-527.37%) | 1,162,105,941.16 ns (11.05%) |
|
| Branch | paljain/add_lustre_global_show |
| Testbed | ci-runner |
⚠️ WARNING: No Threshold found!Without a Threshold, no Alerts will ever be generated.
- L1 Hit Rate (hits (%))
- DLmr (misses (reads))
- D1 Miss Rate (misses (%))
- LLi Miss Rate (misses (%))
- D1mr (misses (reads))
- LLd Miss Rate (misses (%))
- RAM Hits (hits)
- Total read+write (reads/writes)
- D1mw (misses (writes))
- I1 Miss Rate (misses (%))
- LL Hits (hits)
- L1 Hits (hits)
- Dr (reads)
- Dw (writes)
- DLmw (misses (writes))
- RAM Hit Rate (hits (%))
- Estimated Cycles (cycles)
- ILmr (misses (reads))
- LL Miss Rate (misses (%))
- LL Hit Rate (hits (%))
- I1mr (misses (reads))
Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the--ci-only-thresholdsflag.
Click to view all benchmark results
| Benchmark | D1 Miss Rate | misses (%) | D1mr | misses (reads) x 1e3 | D1mw | misses (writes) x 1e3 | DLmr | misses (reads) | DLmw | misses (writes) x 1e3 | Dr | reads x 1e6 | Dw | writes x 1e6 | Estimated Cycles | cycles x 1e6 | I1 Miss Rate | misses (%) | I1mr | misses (reads) x 1e3 | ILmr | misses (reads) | Instructions | Benchmark Result instructions x 1e6 (Result Δ%) | Lower Boundary instructions x 1e6 (Limit %) | Upper Boundary instructions x 1e6 (Limit %) | L1 Hit Rate | hits (%) | L1 Hits | hits x 1e6 | LL Hit Rate | hits (%) | LL Hits | hits x 1e3 | LL Miss Rate | misses (%) | LLd Miss Rate | misses (%) | LLi Miss Rate | misses (%) | RAM Hit Rate | hits (%) | RAM Hits | hits x 1e3 | Total read+write | reads/writes x 1e6 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lustre_metrics::memory_benches::bench_encode_lustre_metrics with_setup:generate_records() | 📈 view plot | 0.92 % | 📈 view plot | 24.97 reads x 1e3 | 📈 view plot | 8.95 writes x 1e3 | 📈 view plot | 122.00 reads | 📈 view plot | 6.48 writes x 1e3 | 📈 view plot | 2.47 x 1e6 | 📈 view plot | 1.23 x 1e6 | 📈 view plot | 14.82 x 1e6 | 📈 view plot | 0.01 % | 📈 view plot | 1.08 reads x 1e3 | 📈 view plot | 922.00 reads | 📈 view plot 🚷 view threshold | 10.76 x 1e6(-18.83%)Baseline: 13.26 x 1e6 | 2.53 x 1e6 (23.49%) | 23.99 x 1e6 (44.86%) | 📈 view plot | 99.76 % | 📈 view plot | 14.42 x 1e6 | 📈 view plot | 0.19 % | 📈 view plot | 27.48 x 1e3 | 📈 view plot | 0.05 % | 📈 view plot | 0.18 % | 📈 view plot | 0.01 % | 📈 view plot | 0.05 % | 📈 view plot | 7.52 x 1e3 | 📈 view plot | 14.46 x 1e6 |
ec28f23 to
f044e7a
Compare
f044e7a to
3433c6b
Compare
23d92a0 to
bf45465
Compare
|
Looks pretty straight forward to me. Just lets check codecoverage |
d3b478c to
c726217
Compare
All the uncovered lines can only be covered when |
I don't understand. Why don't we do it then? |
c726217 to
93ec562
Compare
|
@breuhan Is this acceptable now? |
@breuhan any comments ? |
Add health_value metrics for each inteface. Add health_sensitiviy metrics from 'lnetctl global show'. Co-authored-by: Feng Lei <flei@ddn.com>
93ec562 to
9e4b388
Compare
| struct LnetGlobalShow { | ||
| global: Option<LNetGlobal>, | ||
| } | ||
|
|
| let y: LnetGlobalShow = yaml_serde::from_slice(xs)?; | ||
|
|
||
| Ok(y.global | ||
| .map(|x| build_lnetctl_global_show(&x)) | ||
| .unwrap_or_default()) | ||
| } |
There was a problem hiding this comment.
| let y: LnetGlobalShow = yaml_serde::from_slice(xs)?; | |
| Ok(y.global | |
| .map(|x| build_lnetctl_global_show(&x)) | |
| .unwrap_or_default()) | |
| } | |
| let y: Option<LNetGlobal> = yaml_serde::from_slice(xs)?; | |
| Ok(y.map(|x| build_lnetctl_global_show(&x)).unwrap_or_default()) | |
| } |
| fn get_lnetctl_global_show_output() -> Result<Vec<u8>, LustreCollectorError> { | ||
| let r = Command::new("lnetctl").arg("global").arg("show").output()?; | ||
|
|
||
| Ok(r.stdout) |
There was a problem hiding this comment.
We completely ignore failure here. I am not saying this has to be done here but the whole project has this issue.

Fixes: EX-10319
This pull request extends the Lustre collector and exporter to support parsing and reporting the LNet global health sensitivity and per-network health values. It introduces new parsing functions, updates data structures, and integrates the new metrics into the exporter output, enabling more comprehensive health monitoring.
LNet health metrics support:
health_valuefor each network interface inLNetStats, updating the enum and parser logic to include this metric. [1] [2] [3] [4]lnetctl global showoutput, including a newLNetGlobalstruct and associated parser, to extract and report thehealth_sensitivityvalue. [1] [2] [3] [4]Integration and threading:
lnetctl global showoutput, parse it, and append its records to the final result. [1] [2] [3]Exporter enhancements:
lnetctl global showoutput and included a new metric family forhealth_value. [1] [2] [3]Testing and snapshots:
health_valueandhealth_sensitivityfrom both net and global outputs. [1] [2] [3] [4] [5] [6] [7] [8]These changes collectively provide improved visibility into LNet health, both at the interface and global levels, and ensure the new metrics are accessible via the exporter and collector.
Example output of
lustre_collector:Example of output from
lustrefs-exporter: