-
Notifications
You must be signed in to change notification settings - Fork 293
Description
WASM benchmarks that read test data files from disk fail with DirectoryNotFoundException because the files are not bundled into the WASM virtual filesystem. On WASM, Environment.CurrentDirectory returns /, so paths resolve to /libraries/... which don't exist in the VFS. 19 failures across all 11 partitions. Affected tests got disabled in #5114.
Error — Perf_Utf8Encoding
System.Reflection.TargetInvocationException: Arg_TargetInvocationException
---> System.IO.DirectoryNotFoundException: IO_PathNotFound_Path, /libraries/Common/EnglishAllAscii.txt
at System.IO.File.ReadAllText(String path)
at System.Text.Perf_Utf8Encoding.Setup()
at BenchmarkDotNet.Engines.Engine.Run()
// Benchmark Process 707781 has exited with code 255.
Error — XmlConfigurationProviderBenchmarks
System.Reflection.TargetInvocationException: Arg_TargetInvocationException
---> System.IO.DirectoryNotFoundException: IO_PathNotFound_Path,
/libraries/Microsoft.Extensions.Configuration.Xml/TestFiles/simple.xml
at System.IO.File.OpenRead(String path)
at Microsoft.Extensions.Configuration.Xml.XmlConfigurationProviderBenchmarks.GlobalSetup()
at BenchmarkDotNet.Engines.Engine.Run()
// Benchmark Process 709659 has exited with code 255.
Missing Files (9 total)
Perf_Utf8Encoding.Setup() → File.ReadAllText:
/libraries/Common/EnglishAllAscii.txt/libraries/Common/EnglishMostlyAscii.txt/libraries/Common/Chinese.txt/libraries/Common/Cyrillic.txt/libraries/Common/Greek.txt
XmlConfigurationProviderBenchmarks.GlobalSetup() → File.OpenRead:
/libraries/Microsoft.Extensions.Configuration.Xml/TestFiles/simple.xml/libraries/Microsoft.Extensions.Configuration.Xml/TestFiles/deep.xml/libraries/Microsoft.Extensions.Configuration.Xml/TestFiles/names.xml/libraries/Microsoft.Extensions.Configuration.Xml/TestFiles/repeated.xml
Affected Benchmarks (19 failures)
System.Text.Perf_Utf8Encoding.{GetBytes,GetByteCount,GetString}— 15 failures across inputs {EnglishAllAscii, EnglishMostlyAscii, Chinese, Cyrillic, Greek}Microsoft.Extensions.Configuration.Xml.XmlConfigurationProviderBenchmarks.Load— 4 failures across {simple.xml, deep.xml, names.xml, repeated.xml}
All 11 partitions are affected (1–4 failures each).
Environment
BenchmarkDotNet v0.16.0-custom.20260225.100, Linux Ubuntu 22.04.5 LTS
AMD EPYC 9124 3.00GHz
Wasm : .NET Core (Mono) 11.0.0-ci, Wasm AOT VectorSize=128
Engine: v8-14.3.127 (--expose_wasm --module)
- Job:
Performance micro wasm wasm v8 linux x64 perfviper net11.0 - Job ID:
925a1b8d-4fed-466f-9da4-8815e3953218
Root Cause
The test data files are not bundled into the WASM publish output. The benchmark [GlobalSetup] methods use Path.Combine(Environment.CurrentDirectory, "libraries", ...) which resolves to /libraries/... on WASM (where CWD is /), and those paths don't exist in the VFS.
Fix Options
- Use
AppContext.BaseDirectoryinstead ofEnvironment.CurrentDirectoryfor path resolution - Bundle the test data files into the WASM virtual filesystem during build
- Embed the test data as resources and extract at runtime