public ICompiledApplication Build(IApplicationCompiler compiler) { var applicationConfig = new CounterBenchmarkConfiguration() { NumberGeneratorProcesses = 4, NumberGenerators = 4, NumberCounterProcesses = 4, NumberCounters = 4, Duration = TimeSpan.FromSeconds(10), Cooldown = TimeSpan.FromSeconds(5), Rate = 4, Implementation = CounterImplementation.UpdateBased, }; //var applicationConfig = new CounterBenchmarkConfiguration() //{ // NumberGeneratorProcesses = 4, // NumberGenerators = 1000, // NumberCounterProcesses = 4, // NumberCounters = 1000, // NumberRequests = 5000, // Stagger = TimeSpan.FromSeconds(1), // Implementation = CounterImplementation.UpdateBased, //}; //var applicationConfig = new CounterBenchmarkConfiguration() //{ // NumberGeneratorProcesses = 10, // NumberGenerators = 20000, // NumberCounterProcesses = 10, // NumberCounters = 10, // NumberRequests = 400000, // Stagger = TimeSpan.FromSeconds(1), // Implementation = CounterImplementation.UpdateBased, //}; var runtimeLoggingConfig = new ReactiveMachine.LoggingConfiguration() { ReceiveLogLevel = LogLevel.Debug, SendLogLevel = LogLevel.Debug, }; var telemetryConfig = new ReactiveMachine.TelemetryBlobWriter.Configuration() { CollectHostEvents = true, CollectApplicationEvents = true, CollectThroughput = true, //CollectApplicationEvents = (System.Diagnostics.Debugger.IsAttached || applicationConfig.IsFixedRateExperiment), //CollectThroughput = (System.Diagnostics.Debugger.IsAttached || applicationConfig.IsLoadLoopsExperiment), }; compiler .SetConfiguration(applicationConfig) .SetConfiguration(telemetryConfig) .SetConfiguration(runtimeLoggingConfig) .AddService <CounterBenchmarkService>(); return(compiler.Compile(applicationConfig.NumberCounterProcesses + applicationConfig.NumberGeneratorProcesses)); }
static void Main(string[] args) { Console.WriteLine("Building Application..."); var appConfig = new CounterBenchmarkConfiguration() { NumberGeneratorProcesses = 4, NumberGenerators = 4, NumberCounterProcesses = 4, NumberCounters = 4, Duration = TimeSpan.FromSeconds(10), Cooldown = TimeSpan.FromSeconds(5), Rate = 4, Implementation = CounterImplementation.UpdateBased, }; //var appConfig = new CounterBenchmarkConfiguration() //{ // NumberGeneratorProcesses = 2, // NumberGenerators = 1000, // NumberCounterProcesses = 2, // NumberCounters = 1000, // NumberRequests = 5000, // Stagger = TimeSpan.FromSeconds(1), // Implementation = CounterImplementation.UpdateBased, //}; //var appConfig = new CounterBenchmarkConfiguration() //{ // NumberGeneratorProcesses = 1, // NumberGenerators = 10000, // NumberCounterProcesses = 1, // NumberCounters = 1, // NumberRequests = 200000, // Stagger = TimeSpan.FromSeconds(1), // Implementation = CounterImplementation.UpdateBased, //}; var hostConfig = new EmulatorHost.Configuration() { MultiThreaded = true, RoundTripMessages = true, RoundTripProcessStateEvery = int.MaxValue, DeliverStaleExternalsOneOutOf = 1, ConsoleLogLevel = LogLevel.Information, FileLogLevel = Debugger.IsAttached ? LogLevel.Trace : LogLevel.None, LocalLogDirectory = "C:\\logs\\", ApplicationLogLevel = LogLevel.Trace, // log through runtime HostLogLevel = LogLevel.Trace, RuntimeLogLevel = LogLevel.Trace }; var telemetryConfig = new ReactiveMachine.TelemetryBlobWriter.Configuration() { CollectHostEvents = false, CollectApplicationEvents = (System.Diagnostics.Debugger.IsAttached || appConfig.IsFixedRateExperiment), CollectThroughput = (System.Diagnostics.Debugger.IsAttached || appConfig.IsLoadLoopsExperiment), }; var application = new ApplicationCompiler() .SetConfiguration(appConfig) .SetConfiguration(telemetryConfig) .SetConfiguration(hostConfig) .AddService <CounterBenchmarkService>() .Compile(appConfig.NumberCounterProcesses + appConfig.NumberGeneratorProcesses); var experimentAndHost = "counter/emulator/"; var localOrCloudDeployment = Environment.GetEnvironmentVariable("REACTIVE_MACHINE_DIR") == null ? "cloud" : "local"; var deploymentTimestamp = DateTime.UtcNow; var deploymentId = string.Format("{1}{2}/{0:o}", deploymentTimestamp, experimentAndHost, localOrCloudDeployment); var emulator = new EmulatorHost.Emulator(deploymentId, deploymentTimestamp); Console.WriteLine("Starting Host..."); emulator.Run(application); Console.WriteLine("Done (hit enter to terminate)..."); Console.ReadLine(); emulator.Shutdown(); }