Example #1
0
        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());
            }
        }
Example #2
0
        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);
        }
Example #3
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());
        }
Example #4
0
        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();
        }
Example #5
0
        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
             *          });*/
        }