public PerfRunner(LookupSettings settings, int clients, int runs, string query) { _query = query; _settings = settings; _clients = clients; _runs = runs; }
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); }
public PerformanceTestClient(LookupSettings settings, int runs, string query) { Settings = settings; Query = query; Runs = runs; if (Query == string.Empty) { _useRandom = true; } }
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 }; }
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 }); }
public NativeTestClientDnsQueryEx(LookupSettings settings, int runs, string query) : base(settings, runs, query) { }
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); }