Esempio n. 1
0
 public PerfRunner(LookupSettings settings, int clients, int runs, string query)
 {
     _query    = query;
     _settings = settings;
     _clients  = clients;
     _runs     = runs;
 }
Esempio n. 2
0
        protected override async Task <int> Execute()
        {
            _clients = ClientsArg.HasValue() ? int.Parse(ClientsArg.Value()) : 10;
            _runtime = RuntimeArg.HasValue() ? int.Parse(RuntimeArg.Value()) <= 1 ? 5 : int.Parse(RuntimeArg.Value()) : 5;
            _query   = string.IsNullOrWhiteSpace(QueryArg.Value) ? string.Empty : QueryArg.Value;
            _runSync = SyncArg.HasValue();
            _lookup  = GetDnsLookup();
            _lookup.EnableAuditTrail = false;
            _running  = true;
            _settings = GetLookupSettings();

            Console.WriteLine($"; <<>> Starting perf run with {_clients} clients running for {_runtime} seconds <<>>");
            Console.WriteLine($"; ({_settings.Endpoints.Length} Servers, caching:{_settings.UseCache}, minttl:{_settings.MinTTL.TotalMilliseconds})");
            _spinner = new Spiner();
            _spinner.Start();

            var sw = Stopwatch.StartNew();

            var timeoutTask = Task.Delay(_runtime * 1000).ContinueWith((t) =>
            {
                _running = false;
            });

            var tasks = new List <Task>();

            tasks.Add(timeoutTask);
            for (var clientIndex = 0; clientIndex < _clients; clientIndex++)
            {
                tasks.Add(ExcecuteRun());
            }

            tasks.Add(CollectPrint());

            await Task.WhenAny(tasks.ToArray());

            double elapsedSeconds = sw.ElapsedMilliseconds / 1000d;

            // results
            _spinner.Stop();

            Console.WriteLine(string.Join("-", Enumerable.Repeat("-", 50)));
            Console.WriteLine($";; results:\t\t");
            Console.WriteLine(string.Join("-", Enumerable.Repeat("-", 50)));
            Console.WriteLine($";; run for {elapsedSeconds}sec {_clients} clients.");

            var successPercent = _errors == 0 ? 100 : _success == 0 ? 0 : (100 - ((double)_errors / (_success) * 100));

            Console.WriteLine($";; {_errors:N0} errors {_success:N0} ok {successPercent:N2}% success.");

            var execPerSec = _allExcecutions / elapsedSeconds;
            var avgExec    = _allAvgExec / _runtime;

            Console.WriteLine($";; {execPerSec:N2} queries per second.");

            Console.WriteLine($";;Log: clients created: {StaticLog.CreatedClients} arraysAllocated: {StaticLog.ByteArrayAllocations} arraysReleased: {StaticLog.ByteArrayReleases} queries: {StaticLog.ResolveQueryCount} queryTries: {StaticLog.ResolveQueryTries}");
            return(0);
        }
Esempio n. 3
0
 public PerformanceTestClient(LookupSettings settings, int runs, string query)
 {
     Settings = settings;
     Query    = query;
     Runs     = runs;
     if (Query == string.Empty)
     {
         _useRandom = true;
     }
 }
Esempio n. 4
0
 public ManagedTestClient(LookupSettings settings, int runs, string query)
     : base(settings, runs, query)
 {
     _lookup = new LookupClient(settings.Endpoints)
     {
         Recursion           = settings.Recursion,
         Retries             = settings.Retries,
         Timeout             = settings.Timeout,
         UseCache            = settings.UseCache,
         MimimumCacheTimeout = settings.MinTTL
     };
 }
Esempio n. 5
0
        public LookupClient GetDnsLookup(LookupSettings props = null)
        {
            var settings = props ?? GetLookupSettings();

            return(new LookupClient(settings.Endpoints)
            {
                Recursion = settings.Recursion,
                Retries = settings.Retries,
                Timeout = settings.Timeout,
                MinimumCacheTimeout = settings.MinTTL,
                UseCache = settings.UseCache,
                UseTcpFallback = !settings.NoTcp,
                UseTcpOnly = settings.TcpOnly
            });
        }
Esempio n. 6
0
 public NativeTestClientDnsQueryEx(LookupSettings settings, int runs, string query)
     : base(settings, runs, query)
 {
 }
Esempio n. 7
0
        protected override async Task <int> Execute()
        {
            _clients = ClientsArg.HasValue() ? int.Parse(ClientsArg.Value()) : 10;
            _runtime = RuntimeArg.HasValue() ? int.Parse(RuntimeArg.Value()) <= 1 ? 5 : int.Parse(RuntimeArg.Value()) : 5;
            _runSync = SyncArg.HasValue();
            _lookup  = GetDnsLookup();
            _lookup.EnableAuditTrail = true;
            _running  = true;
            _settings = GetLookupSettings();

            Console.WriteLine($"; <<>> Starting random run with {_clients} clients running for {_runtime} seconds <<>>");
            Console.WriteLine($"; ({_settings.Endpoints.Length} Servers, caching:{_settings.UseCache}, minttl:{_settings.MinTTL.TotalMilliseconds})");
            _spinner = new Spiner();
            _spinner.Start();

            var sw = Stopwatch.StartNew();

            var timeoutTask = Task.Delay(_runtime * 1000).ContinueWith((t) =>
            {
                _running = false;
            });

            var tasks = new List <Task>
            {
                timeoutTask
            };

            for (var clientIndex = 0; clientIndex < _clients; clientIndex++)
            {
                tasks.Add(ExcecuteRun());
            }

            tasks.Add(CollectPrint());

            await Task.WhenAny(tasks.ToArray());

            double elapsedSeconds = sw.ElapsedMilliseconds / 1000d;

            // results
            _spinner.Stop();

            Console.WriteLine(string.Join("-", Enumerable.Repeat("-", 50)));
            Console.WriteLine($";; results:\t\t");
            Console.WriteLine(string.Join("-", Enumerable.Repeat("-", 50)));
            Console.WriteLine($";; run for {elapsedSeconds}sec {_clients} clients.");

            //var successPercent = _errors == 0 ? 100 : _success == 0 ? 0 : (100 - (double)_success / (_errors * (double)_success));

            var successPercent = _errors == 0 ? 100 : _success == 0 ? 0 : (100 - ((double)_errors / (_success) * 100));

            Console.WriteLine($";; {_errors:N0} errors {_success:N0} ok {successPercent:N2}% success.");
            foreach (var code in _errorsPerCode.Keys)
            {
                Console.WriteLine($"{code,30}:\t {_errorsPerCode[code]}");
            }

            var execPerSec = _allExcecutions / elapsedSeconds;

            Console.WriteLine($";; {execPerSec:N2} queries per second.");
            return(0);
        }