-
Notifications
You must be signed in to change notification settings - Fork 6
Description
В данном примере (вывод dotnet'а) результаты Single-thread results - CSV
All results - уже нет, так как разделитель меняется с , на ;, что не соответствует ожиданиям библиотек парсинга
Присутствует непонятный Units results полностью идентичный Single-thread Units results, но при этом отсутствует All Units results
- Отсутствует документация по выхлопу - непонятно чем отличается
Units resultsот обычных. - Тест nodejs не сохраняет вывод в файл, поэтому его приходится прогонять через sed (чтобы убрать спецсимволы для цветовых последовательностей) и через tee писать в файл
- В тесте js поле Runtime и Operating System перепутано местами (Operating System v18.7.0, Runtime linux x64)
- Не во всех тестах присутствует
All results - Тест dotnet6 периодически падает (непонятно по какой логике) со следующим стек-трейсом:
Unhandled exception. System.AggregateException: One or more errors occurred. (Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'chunkLength'))
---> System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'chunkLength')
at System.Text.StringBuilder.ToString()
at EntityFX.NetBenchmark.Core.Generic.MemoryBenchmarkBase`1.BenchRandomMemory() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/MemoryBenchmarkBase.cs:line 71
at EntityFX.NetBenchmark.Core.Generic.ParallelMemoryBenchmark.<BenchImplementation>b__1_1(Int32 a) in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/ParallelMemoryBenchmark.cs:line 18
at EntityFX.NetBenchmark.Core.Generic.BenchmarkBase`1.<>c__DisplayClass7_1`2.<BenchInParallel>b__2() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/BenchmarkBase.cs:line 104
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.WaitAllCore(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.WaitAll(Task[] tasks)
at EntityFX.NetBenchmark.Core.Generic.BenchmarkBase`1.BenchInParallel[TBench,TBenchResult](Func`1 buildFunc, Func`2 benchFunc, Action`2 setBenchResultFunc) in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/BenchmarkBase.cs:line 102
at EntityFX.NetBenchmark.Core.Generic.ParallelMemoryBenchmark.BenchImplementation() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/ParallelMemoryBenchmark.cs:line 16
at EntityFX.NetBenchmark.Core.Generic.BenchmarkBase`1.Bench() in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchamarks.Core/Generic/BenchmarkBase.cs:line 44
at EntityFX.NetBenchmark.MainClass.Main(String[] args) in /Users/civil/src/EntityFX-Bench/src/dotnet/EntityFX.NetBenchmark/Program.cs:line 105
Воспроизводится на нескольких системах, так что проблема с железом крайне маловероятна (но во всех случаях рантайм 6.0.401)
В плане тестов, мое предложение сделать в КАЖДОМ тесте вывод в отдельный файл results.json структуры вида (далее идет псевдо-json):
{
"metadata": {
"Runtime": "language runtime information",
"OS": "Os information"
....
},
"tests": [
"TEST_NAME": {
"IsMultiThreaded": "bool",
"Result": "float64",
"LowerIsBetter": "bool"
},
....
]
}Чтобы при парсинге была доступна базовая информация. Также, если Units варианты чем-то принципиально отличаются, возможно стоит добавить формулу конвертации в json одним из полей в описании теста.
Как минимум в части используемых языков есть стандартная библиотека для конвертации структур в json.
