Skip to content

HV: verify VirtioFS DAX end-to-end (mmap → page fault → hv_vm_map) #253

Closed

Description

@AprilNEA

Problem

docs/virtio-improvements-plan.md Phase 4 explicitly flags: "End-to-end DAX test... unverified at the integration level. No test covers the full path: guest mmap() → FUSE_SETUPMAPPING → hv_vm_map → guest page fault → host file read."

DAX is the primary performance differentiator for VirtioFS on HV. Without end-to-end verification, container image layer reads and build workloads may silently fall back to the copy-through path, erasing the win over VZ.

Related landings (why we think it should work now)

  • 106a6ca — fixed per-share DAX mapper base IPA collision. All VirtioFS shares previously mapped into share 0's window; now each share gets its own HvDaxMapper with correct base_ipa.
  • ABX-342 (Done) — DAX window munmap'd on shutdown / error.
  • ABX-328 (Done) — DAX mapper bounds / overlap check on window_offset.

Remaining unverified:

  • ABX-329 (Backlog) — DAX remove_mapping ignores length parameter.
  • End-to-end path has never been exercised in a test.

Scope

  1. Write a guest-side program that mmap()s a file from a VirtioFS share, reads a byte, checks it matches the host-side content.
  2. Confirm the host observes a FUSE_SETUPMAPPING request for the read region.
  3. Confirm hv_vm_map() is called with the right GPA → host VA → length.
  4. Confirm the guest page fault is serviced without a FUSE_READ round trip (observe via FUSE request count).
  5. Test remove_mapping on unmap; confirm subsequent access re-establishes mapping.

Acceptance

  • Test runs in CI with the HV E2E infrastructure (sibling sub-issue).
  • Measured round-trip reduction: DAX read path is ≥10x faster than the FUSE_READ path for the same content.
  • ABX-329 fixed or explicitly deferred with a test demonstrating the failure mode.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions