Skip to content

Fix disk detection after LVM striping and update database workload profiles#674

Merged
ericavella merged 10 commits intomainfrom
users/evellanoweth/adopt-stripe-disks
Apr 24, 2026
Merged

Fix disk detection after LVM striping and update database workload profiles#674
ericavella merged 10 commits intomainfrom
users/evellanoweth/adopt-stripe-disks

Conversation

@ericavella
Copy link
Copy Markdown
Contributor

Summary

Fixes raid0 disk detection failures in MySQL and PostgreSQL server configuration components, and updates database workload profiles for improved validation.

Key Changes

Bug Fix: Disk detection after LVM striping

After StripeDisks creates an LVM striped volume from NVMe disks, lshw no longer reports the logical volume device. This caused MySqlServerConfiguration and PostgreSQLServerConfiguration to fail with Expected disks not found.

Fix: Added a /proc/mounts fallback that reads the mount table to find the raid0 mount point when lshw-based disk discovery fails. Also changed both components to search all disks (not just filtered disks) for raid0 access paths.

Profile Updates

  • PostgreSQL Sysbench TPCC/OLTP: Removed unsupported CreateTables and DistributeDatabase dependency steps
  • HammerDB TPCC: Tuned WarehouseCount from memory-based to {LogicalCoreCount} * 10
  • HammerDB TPCH: Reduced ScaleFactor from 10 to 1

Other

  • Fixed HammerDBExecutor.cs async method without await warning
  • Added .github/copilot-instructions.md

Validation

All workloads validated on Azure VMs in both single-node and client/server configurations:

Workload Config VM Sizes Result
PG Sysbench TPCC Single E8ds_v6 2,075 TPS
PG Sysbench OLTP Single E8ds_v6 5,027 TPS
PG HammerDB TPCC Single E8ds_v6 3,137 NOPM
PG HammerDB TPCH Single E8ds_v6 16 query sets
MySQL Sysbench OLTP Client/Server D32s_v5 + E32ds_v6 4,434 TPS
MySQL Sysbench TPCC Client/Server D32s_v5 + E32ds_v6 2,761 TPS
PG Sysbench TPCC Client/Server D32s_v5 + E32ds_v6 3,126 TPS
PG Sysbench OLTP Client/Server D32s_v5 + E32ds_v6 5,575 TPS
PG HammerDB TPCC Client/Server D32s_v5 + E32ds_v6 633,687 NOPM
PG HammerDB TPCH Client/Server D32s_v5 + E32ds_v6 geo mean ~0.56s
PG Sysbench TPCC Client/Server D8s_v5 + E8ds_v6 648 TPS

Erica Vellanoweth and others added 8 commits March 20, 2026 09:50
…ofiles

- Add /proc/mounts fallback for raid0 path discovery in MySqlServerConfiguration
  and PostgreSQLServerConfiguration. After StripeDisks creates an LVM volume,
  lshw no longer reports the logical volume, causing 'Expected disks not found'.
  The fallback reads /proc/mounts to find the raid0 mount point.

- Search all disks (not just filtered) for raid0 access paths in both
  MySQL and PostgreSQL server configuration components.

- Remove unsupported CreateTables and DistributeDatabase dependency steps
  from PostgreSQL Sysbench TPCC and OLTP profiles.

- Tune HammerDB TPCC WarehouseCount to LogicalCoreCount * 10 and
  TPCH ScaleFactor to 1 for faster validation runs.

- Fix HammerDBExecutor async method missing await warning.

- Add copilot-instructions.md for repository development guidance.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…lution

Add two new DiskFilter types to DiskFilters:
- Logical: matches LVM device mapper disks (/dev/dm-*, /dev/mapper/*)
- AccessPath: matches disks by volume access path substring

Add /dev/dm and /dev/mapper to valid Linux device path prefixes so
LVM logical volumes are no longer silently dropped by the prefix filter.

Simplify MySqlServerConfiguration and PostgreSQLServerConfiguration:
- Default DiskFilter changed to 'Logical' (was 'osdisk:false&sizegreaterthan:256g')
- Remove /proc/mounts parsing and multi-tier raid0 search logic
- Clean fallback: Logical filter -> OsDisk:false&BiggestSize physical disk

Update MySQL profiles to use DiskFilter: Logical on MySQLServerConfiguration
steps. PostgreSQL profiles use the new default. StripeDisks steps unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
lshw does not report LVM logical volumes (/dev/dm-*, /dev/mapper/*),
so the Logical disk filter returns empty after StripeDisks creates an
LVM volume. Added FindLvmMountPathAsync to both MySqlServerConfiguration
and PostgreSQLServerConfiguration that reads /proc/mounts to find any
mount backed by an LVM device, returning the mount path (e.g. mnt_raid0).

Fallback chain is now:
1. Logical filter (works if lshw ever reports LVM devices)
2. /proc/mounts LVM device check (handles real-world lshw limitation)
3. Physical disk BiggestSize fallback (unmounted single disk scenario)

Verified on Azure VMs:
- E8ds_v6 (1 disk, single-disk LVM) -> mnt_raid0 found via /proc/mounts
- E16ds_v6 (2 disks, striped LVM)   -> mnt_raid0 found via /proc/mounts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: erica vellanoweth <37354999+ericavella@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@nchapagain001 nchapagain001 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ignore.

Comment thread .github/copilot-instructions.md
Erica Vellanoweth and others added 2 commits April 24, 2026 11:10
@ericavella ericavella merged commit d949dba into main Apr 24, 2026
5 checks passed
@ericavella ericavella deleted the users/evellanoweth/adopt-stripe-disks branch April 24, 2026 18:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants