public static void IoTest(PerformanceTestRequest request) { var tester = new DiskPerformanceTester(request, Console.WriteLine); tester.DescribeTestParameters(); tester.TestDiskIO(); var result = tester.Result; var hasReads = request.OperationType == OperationType.Read || request.OperationType == OperationType.Mix; var hasWrites = request.OperationType == OperationType.Write || request.OperationType == OperationType.Mix; if (hasReads) { var sb = new StringBuilder(); sb.AppendLine(string.Format("Total read: {0}", SizeHelper.Humane(result.TotalRead))); sb.AppendLine(string.Format("Average read: {0}/s", SizeHelper.Humane(result.TotalRead / request.TimeToRunInSeconds))); sb.AppendLine("Read latency"); sb.AppendLine(string.Format("\tMin: {0:#,#.##;;0}", result.ReadLatency.Min)); sb.AppendLine(string.Format("\tMean: {0:#,#.##;;0}", result.ReadLatency.Mean)); sb.AppendLine(string.Format("\tMax: {0:#,#.##;;0}", result.ReadLatency.Max)); sb.AppendLine(string.Format("\tStdev: {0:#,#.##;;0}", result.ReadLatency.Stdev)); sb.AppendLine("Read latency percentiles"); foreach (var percentile in result.ReadLatency.Percentiles) { sb.AppendLine(string.Format("\t{0}: {1:#,#.##;;0}", percentile.Key, percentile.Value)); } sb.AppendLine(); Console.WriteLine(sb.ToString()); } if (hasWrites) { var sb = new StringBuilder(); sb.AppendLine(string.Format("Total write: {0}", SizeHelper.Humane(result.TotalWrite))); sb.AppendLine(string.Format("Average write: {0}/s", SizeHelper.Humane(result.TotalWrite / request.TimeToRunInSeconds))); sb.AppendLine("Write latency"); sb.AppendLine(string.Format("\tMin: {0:#,#.##;;0}", result.WriteLatency.Min)); sb.AppendLine(string.Format("\tMean: {0:#,#.##;;0}", result.WriteLatency.Mean)); sb.AppendLine(string.Format("\tMax: {0:#,#.##;;0}", result.WriteLatency.Max)); sb.AppendLine(string.Format("\tStdev: {0:#,#.##;;0}", result.WriteLatency.Stdev)); sb.AppendLine("Write latency percentiles"); foreach (var percentile in result.WriteLatency.Percentiles) { sb.AppendLine(string.Format("\t{0}: {1:#,#.##;;0}", percentile.Key, percentile.Value)); } sb.AppendLine(); Console.WriteLine(sb.ToString()); } }
public void TestRandomRead() { var performanceRequest = new PerformanceTestRequest { FileSize = (long)128 * 1024, OperationType = OperationType.Read, Path = Path.Combine(Path.GetTempPath(), "data.ravendb-io-test"), Sequential = false, ThreadCount = 4, TimeToRunInSeconds = 5, ChunkSize = 4 * 1024 }; var tester = new DiskPerformanceTester(performanceRequest, s => { }); tester.TestDiskIO(); var result = tester.Result; Assert.Equal(0, result.TotalWrite); Assert.True(result.TotalRead > 0); }
public void TestCanCancelPerformanceTest() { var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(5)); var performanceRequest = new PerformanceTestRequest { FileSize = (long)128 * 1024, OperationType = OperationType.Mix, Path = Path.Combine(Path.GetTempPath(), "data.ravendb-io-test"), Sequential = false, ThreadCount = 4, TimeToRunInSeconds = 30, ChunkSize = 4 * 1024 }; var tester = new DiskPerformanceTester(performanceRequest, s => { }, cts.Token); Assert.Throws <OperationCanceledException>(() => tester.TestDiskIO()); }
private static void Main(string[] args) { var performanceRequest = new PerformanceTestRequest { FileSize = (long)1024 * 1024 * 1024, OperationType = OperationType.Read, BufferingType = BufferingType.ReadAndWrite, Path = "c:\\temp\\data.ravendb-io-test", Sequential = true, ThreadCount = 4, TimeToRunInSeconds = 100, ChunkSize = 4 * 1024 }; var tester = new DiskPerformanceTester(performanceRequest, Console.WriteLine, CancellationToken.None); tester.TestDiskIO(); var r = tester.Result; Console.WriteLine(RavenJObject.FromObject(r)); Console.ReadKey(); }
public async Task <HttpResponseMessage> IoTest() { if (EnsureSystemDatabase() == false) { return(GetMessageWithString("IO Test is only possible from the system database", HttpStatusCode.BadRequest)); } var ioTestRequest = await ReadJsonObjectAsync <PerformanceTestRequest>(); if (Directory.Exists(ioTestRequest.Path) == false) { return(GetMessageWithString(string.Format("Directory {0} doesn't exist.", ioTestRequest.Path), HttpStatusCode.BadRequest)); } ioTestRequest.Path = Path.Combine(ioTestRequest.Path, DiskPerformanceTester.TemporaryFileName); Database.Documents.Delete(DiskPerformanceTester.PerformanceResultDocumentKey, null, null); var killTaskCts = new CancellationTokenSource(); var task = Task.Factory.StartNew(() => { var debugInfo = new List <string>(); var diskIo = new DiskPerformanceTester(ioTestRequest, debugInfo.Add, killTaskCts.Token); diskIo.TestDiskIO(); var diskIoRequestAndResponse = new { Request = ioTestRequest, Result = diskIo.Result, DebugMsgs = debugInfo }; Database.Documents.Put(DiskPerformanceTester.PerformanceResultDocumentKey, null, RavenJObject.FromObject(diskIoRequestAndResponse), new RavenJObject(), null); }); long id; Database.Tasks.AddTask(task, new TaskBasedOperationState(task), new TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = TaskActions.PendingTaskType.IoTest, Payload = "Disk performance test" }, out id, killTaskCts); return(GetMessageWithObject(new { OperationId = id })); /* * * * * var task = Task.Factory.StartNew(() => * { * MaintenanceActions.Restore(ravenConfiguration,restoreRequest, * msg => * { * restoreStatus.Messages.Add(msg); * DatabasesLandlord.SystemDatabase.Documents.Put(RestoreStatus.RavenRestoreStatusDocumentKey, null, * RavenJObject.FromObject(restoreStatus), new RavenJObject(), null); * }); * * if (databaseDocument == null) * return; * * databaseDocument.Settings[Constants.RavenDataDir] = documentDataDir; * if (restoreRequest.IndexesLocation != null) * databaseDocument.Settings[Constants.RavenIndexPath] = restoreRequest.IndexesLocation; * if (restoreRequest.JournalsLocation != null) * databaseDocument.Settings[Constants.RavenTxJournalPath] = restoreRequest.JournalsLocation; * databaseDocument.Id = databaseName; * DatabasesLandlord.Protect(databaseDocument); * DatabasesLandlord.SystemDatabase.Documents.Put("Raven/Databases/" + databaseName, null, RavenJObject.FromObject(databaseDocument), * new RavenJObject(), null); * * restoreStatus.Messages.Add("The new database was created"); * DatabasesLandlord.SystemDatabase.Documents.Put(RestoreStatus.RavenRestoreStatusDocumentKey, null, * RavenJObject.FromObject(restoreStatus), new RavenJObject(), null); * * Database.Documents.Delete(RestoreInProgress.RavenRestoreInProgressDocumentKey, null, null); * }, TaskCreationOptions.LongRunning); * * long id; * Database.Tasks.AddTask(task, new TaskBasedOperationState(task), new TaskActions.PendingTaskDescription * { * StartTime = SystemTime.UtcNow, * TaskType = TaskActions.PendingTaskType.RestoreDatabase, * Payload = "Restoring database " + databaseName + " from " + restoreRequest.BackupLocation * }, out id); * * * return GetMessageWithObject(new * { * OperationId = id * });*/ }