Example #1
0
        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));
        }
Example #2
0
        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();
        }