public void Setup(BenchmarkContext context) { _remoteMessageThroughput = context.GetCounter(RemoteMessageCounterName); System1 = ActorSystem.Create("SystemA" + ActorSystemNameCounter.Next(), CreateActorSystemConfig("SystemA" + ActorSystemNameCounter.Current, "127.0.0.1", 0)); _echo = System1.ActorOf(Props.Create(() => new EchoActor()), "echo"); System2 = ActorSystem.Create("SystemB" + ActorSystemNameCounter.Next(), CreateActorSystemConfig("SystemB" + ActorSystemNameCounter.Current, "127.0.0.1", 0)); _receiver = System2.ActorOf( Props.Create(() => new BenchmarkActor(_remoteMessageThroughput, RemoteMessageCount, _resetEvent)), "benchmark"); var system1Address = RARP.For(System1).Provider.Transport.DefaultAddress; var system2Address = RARP.For(System2).Provider.Transport.DefaultAddress; var system1EchoActorPath = new RootActorPath(system1Address) / "user" / "echo"; var system2RemoteActorPath = new RootActorPath(system2Address) / "user" / "benchmark"; // set the timeout high here to avoid timeouts // TL;DR; - on slow machines it can take longer than 2 seconds to form the association, do the handshake, and reply back // using the in-memory transport. _remoteReceiver = System1.ActorSelection(system2RemoteActorPath).ResolveOne(TimeSpan.FromSeconds(30)).Result; _remoteEcho = System2.ActorSelection(system1EchoActorPath).ResolveOne(TimeSpan.FromSeconds(2)).Result; }
public void Setup(BenchmarkContext context) { _selectionOpCounter = context.GetCounter(ActorSelectionCounterName); System = ActorSystem.Create("MailboxThroughputSpecBase" + Counter.GetAndIncrement()); _receiver = System.ActorOf(Props.Create(() => new BenchmarkActor(_selectionOpCounter, NumberOfMessages, _resetEvent))); _receiverActorPath = _receiver.Path; _oneMessageBenchmarkProps = Props.Create(() => new BenchmarkActor(_selectionOpCounter, 1, _resetEvent)); }
public void Setup(BenchmarkContext context) { _createMailboxThroughput = context.GetCounter(CreateThroughputCounter); _mailboxes = new List<Mailbox>(MailboxCreateNumber); _unboundedMailboxType = new UnboundedMailbox(); _boundedMailboxType = new BoundedMailbox(_actorSystem.Settings, MailboxConfig); _unboundedDequeBasedMailboxType = new UnboundedDequeBasedMailbox(_actorSystem.Settings, MailboxConfig); _boundedDequeBasedMailboxType = new BoundedDequeBasedMailbox(_actorSystem.Settings, MailboxConfig); }
public void Setup(BenchmarkContext context) { _actorSystem = ActorSystem.Create("MessageDispatcher" + Counter.GetAndIncrement(), RemoteHocon); _systemAddress = RARP.For(_actorSystem).Provider.DefaultAddress; _inboundMessageDispatcherCounter = context.GetCounter(MessageDispatcherThroughputCounterName); _message = SerializedMessage.CreateBuilder().SetSerializerId(0).SetMessage(ByteString.CopyFromUtf8("foo")).Build(); _dispatcher = new DefaultMessageDispatcher(_actorSystem, RARP.For(_actorSystem).Provider, _actorSystem.Log); _targetActorRef = new BenchmarkActorRef(_inboundMessageDispatcherCounter, RARP.For(_actorSystem).Provider); }
public void Setup(BenchmarkContext context) { _counter = context.GetCounter("TestCounter"); var fixture = new Fixture(); fixture.RepeatCount = 100; _list = fixture.Create<List<string>>(); _algorithm = new Algorithm1(); }
public void SetUp(BenchmarkContext context) { _inboundThroughputCounter = context.GetCounter(InboundThroughputCounterName); _counterHandlerInbound = new CounterHandlerInbound(_inboundThroughputCounter); _outboundThroughputCounter = context.GetCounter(OutboundThroughputCounterName); _counterHandlerOutbound = new CounterHandlerOutbound(_outboundThroughputCounter); channel = new EmbeddedChannel(_counterHandlerOutbound, _counterHandlerInbound); }
public BenchmarkActor(Counter counter, long maxExpectedMessages, ManualResetEventSlim resetEvent) { _counter = counter; _maxExpectedMessages = maxExpectedMessages; _resetEvent = resetEvent; ReceiveAny(o => { _counter.Increment(); if (++_currentMessages == _maxExpectedMessages) _resetEvent.Set(); }); }
public void PerfSetUp(BenchmarkContext context) { benchmarkCounter = context.GetCounter(MessagesReceivedCounter); StartServer((data, channel) => { benchmarkCounter.Increment(); var serverReceived = ServerReceived.GetAndIncrement(); if (serverReceived >= MessageCount - 1) _resentEvent.Set(); }); StartClient(); message = new byte[MessageLength]; }
public void Setup(BenchmarkContext context) { MsgReceived = context.GetCounter("MsgReceived"); System = ActorSystem.Create("PerfSys"); Action<IActorDsl> actor = d => d.ReceiveAny((o, c) => { MsgReceived.Increment(); }); TestActor = System.ActorOf(Props.Create(() => new Act(actor)), "testactor"); var id = TestActor.Ask<ActorIdentity>(new Identify(null), TimeSpan.FromSeconds(3)).Result; Mailbox = new Mailbox(new UnboundedMessageQueue()); Mailbox.SetActor(TestActor.AsInstanceOf<RepointableActorRef>().Underlying.AsInstanceOf<ActorCell>()); }
public void Setup(BenchmarkContext context) { MsgReceived = context.GetCounter("MsgReceived"); System = ActorSystem.Create("PerfSys", Config); Action<IActorDsl> actor = d => d.ReceiveAny((o, c) => { MsgReceived.Increment(); }); TestActor = System.ActorOf(Props.Create(() => new Act(actor)).WithDispatcher("calling-thread-dispatcher"), "testactor"); // force initialization of the actor TestActor.Tell("warmup"); MsgReceived.Decrement(); }
public void SetUp(BenchmarkContext context) { ClientGroup = new MultithreadEventLoopGroup(1); ServerGroup = new MultithreadEventLoopGroup(1); WorkerGroup = new MultithreadEventLoopGroup(); var iso = Encoding.GetEncoding("ISO-8859-1"); message = iso.GetBytes("ABC"); // pre-allocate all messages foreach (var m in Enumerable.Range(0, WriteCount)) { messages[m] = Unpooled.WrappedBuffer(message); } _inboundThroughputCounter = context.GetCounter(InboundThroughputCounterName); _outboundThroughputCounter = context.GetCounter(OutboundThroughputCounterName); var counterHandler = new CounterHandlerInbound(_inboundThroughputCounter); _signal = new ManualResetEventSlimReadFinishedSignal(ResetEvent); var sb = new ServerBootstrap().Group(ServerGroup, WorkerGroup).Channel<TcpServerSocketChannel>() .ChildOption(ChannelOption.TcpNodelay, true) .ChildHandler( new ActionChannelInitializer<TcpSocketChannel>( channel => { channel.Pipeline.AddLast(GetEncoder()) .AddLast(GetDecoder()) .AddLast(counterHandler) .AddLast(new CounterHandlerOutbound(_outboundThroughputCounter)) .AddLast(new ReadFinishedHandler(_signal, WriteCount)); })); var cb = new ClientBootstrap().Group(ClientGroup) .Option(ChannelOption.TcpNodelay, true) .Channel<TcpSocketChannel>().Handler(new ActionChannelInitializer<TcpSocketChannel>( channel => { channel.Pipeline.AddLast(GetEncoder()).AddLast(GetDecoder()).AddLast(counterHandler) .AddLast(new CounterHandlerOutbound(_outboundThroughputCounter)); })); // start server _serverChannel = sb.BindAsync(TEST_ADDRESS).Result; // connect to server _clientChannel = cb.ConnectAsync(_serverChannel.LocalAddress).Result; //_clientChannel.Configuration.AutoRead = false; }
public void Setup(BenchmarkContext context) { _configurator = Configurator(); _dispatcher = _configurator.Dispatcher(); _dispatcherCounter = context.GetCounter(DispatcherCounterName); ScheduledWork = () => { _dispatcherCounter.Increment(); if (Interlocked.Increment(ref _messagesSeen) == ScheduleCount) { EventBlock.Set(); } }; Warmup(_dispatcher); }
public void Setup(BenchmarkContext context) { Sys = ActorSystem.Create("Sys"); Prereqs = new DefaultDispatcherPrerequisites(Sys.EventStream, Sys.Scheduler, Sys.Settings, Sys.Mailboxes); _configurator = Configurator(); _dispatcher = _configurator.Dispatcher(); _dispatcherCounter = context.GetCounter(DispatcherCounterName); ScheduledWork = () => { _dispatcherCounter.Increment(); if (Interlocked.Increment(ref _messagesSeen) == ScheduleCount) { EventBlock.Set(); } }; Warmup(_dispatcher); }
public void Setup(BenchmarkContext context) { MsgReceived = context.GetCounter("MsgReceived"); System = ActorSystem.Create("PerfSys", Config); int count = 0; Action<IActorDsl> actor = d => d.ReceiveAny((o, c) => { MsgReceived.Increment(); count++; if(count == ExpectedMessages) ResetEvent.Set(); }); TestActor = System.ActorOf(Props.Create(() => new Act(actor)).WithDispatcher("calling-thread-dispatcher"), "testactor"); SpinWait.SpinUntil(() => TestActor.AsInstanceOf<RepointableActorRef>().IsStarted); // force initialization of the actor for(var i = 0; i < ExpectedMessages-1;i++) TestActor.AsInstanceOf<RepointableActorRef>().Underlying.AsInstanceOf<ActorCell>().Mailbox.MessageQueue.Enqueue(TestActor, new Envelope("hit", ActorRefs.Nobody)); // queue all of the messages into the actor }
public void SetUp(BenchmarkContext context) { _scheduledOpsCounter = context.GetCounter(ScheduledOps); _jobsScheduled = context.GetCounter(ScheduledJobs); _actorSystem = ActorSystem.Create("SchedulerPerformanceSpecs"); _cancelSignal = new Cancelable(_actorSystem.Scheduler); _counterIncrement = () => _scheduledOpsCounter.Increment(); _eventLoop = () => { while (!_cancelSignal.IsCancellationRequested) { for (var i = 0; i < SchedulePerBatch; i++) { _actorSystem.Scheduler.Advanced.ScheduleRepeatedly(0, 10, _counterIncrement, _cancelSignal); _jobsScheduled.Increment(); } Thread.Sleep(40); // wait a bit, then keep going } }; }
public void SetUp(BenchmarkContext context) { ServerGroup = new MultithreadEventLoopGroup(1); WorkerGroup = new MultithreadEventLoopGroup(); var iso = Encoding.GetEncoding("ISO-8859-1"); message = Unpooled.Buffer().WriteInt(3).WriteBytes(iso.GetBytes("ABC")).ToArray(); _inboundThroughputCounter = context.GetCounter(InboundThroughputCounterName); _outboundThroughputCounter = context.GetCounter(OutboundThroughputCounterName); var counterHandler = new CounterHandlerInbound(_inboundThroughputCounter); _signal = new ManualResetEventSlimReadFinishedSignal(ResetEvent); var sb = new ServerBootstrap().Group(ServerGroup, WorkerGroup).Channel<TcpServerSocketChannel>() .ChildOption(ChannelOption.TcpNodelay, true) .ChildHandler( new ActionChannelInitializer<TcpSocketChannel>( channel => { channel.Pipeline.AddLast(GetEncoder()) .AddLast(GetDecoder()) .AddLast(counterHandler) .AddLast(new CounterHandlerOutbound(_outboundThroughputCounter)) .AddLast(new ReadFinishedHandler(_signal, WriteCount)); })); // start server _serverChannel = sb.BindAsync(TEST_ADDRESS).Result; // connect to server var address = (IPEndPoint) _serverChannel.LocalAddress; ClientSocket = new System.Net.Sockets.Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp); ClientSocket.Connect(address.Address, address.Port); Stream = new NetworkStream(ClientSocket, true); }
public void SetUp(BenchmarkContext context) { this.ServerGroup = new MultithreadEventLoopGroup(1); this.WorkerGroup = new MultithreadEventLoopGroup(); Encoding iso = Encoding.GetEncoding("ISO-8859-1"); this.message = Unpooled.Buffer().WriteInt(3).WriteBytes(iso.GetBytes("ABC")).ToArray(); this.inboundThroughputCounter = context.GetCounter(InboundThroughputCounterName); var counterHandler = new CounterHandlerInbound(this.inboundThroughputCounter); this.signal = new ManualResetEventSlimReadFinishedSignal(this.ResetEvent); // using default settings this.serverBufferAllocator = new PooledByteBufferAllocator(); ServerBootstrap sb = new ServerBootstrap() .Group(this.ServerGroup, this.WorkerGroup) .Channel<TcpServerSocketChannel>() .ChildOption(ChannelOption.Allocator, this.serverBufferAllocator) .ChildHandler(new ActionChannelInitializer<TcpSocketChannel>(channel => { channel.Pipeline .AddLast(this.GetEncoder()) .AddLast(this.GetDecoder()) .AddLast(counterHandler) .AddLast(new ReadFinishedHandler(this.signal, WriteCount)); })); // start server this.serverChannel = sb.BindAsync(TEST_ADDRESS).Result; // connect to server var address = (IPEndPoint)this.serverChannel.LocalAddress; this.ClientSocket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp); this.ClientSocket.Connect(address.Address, address.Port); this.Stream = new NetworkStream(this.ClientSocket, true); }
public ErrorCounterHandler(Counter errorCount) { _errorCount = errorCount; }
public void SetUp(BenchmarkContext context) { _fiber = CreateFiber(); _fiberThroughput = context.GetCounter(FiberThroughputCounterName); }
public CounterHandlerInbound(Counter throughput) { this.throughput = throughput; }
public void SetUp(BenchmarkContext context) { TaskScheduler.UnobservedTaskException += (sender, args) => Console.WriteLine(args.Exception); this.ClientGroup = new MultithreadEventLoopGroup(1); this.ServerGroup = new MultithreadEventLoopGroup(1); this.WorkerGroup = new MultithreadEventLoopGroup(); Encoding iso = Encoding.GetEncoding("ISO-8859-1"); this.message = iso.GetBytes("ABC"); this.inboundThroughputCounter = context.GetCounter(InboundThroughputCounterName); this.outboundThroughputCounter = context.GetCounter(OutboundThroughputCounterName); var counterHandler = new CounterHandlerInbound(this.inboundThroughputCounter); this.signal = new ManualResetEventSlimReadFinishedSignal(this.ResetEvent); // reserve up to 10mb of 16kb buffers on both client and server; we're only sending about 700k worth of messages this.serverBufferAllocator = new PooledByteBufferAllocator(); this.clientBufferAllocator = new PooledByteBufferAllocator(); Assembly assembly = typeof(TcpChannelPerfSpecs).Assembly; byte[] certificateData; using (Stream sourceStream = assembly.GetManifestResourceStream(assembly.GetManifestResourceNames()[0])) using (var tempStream = new MemoryStream()) { sourceStream.CopyTo(tempStream); certificateData = tempStream.ToArray(); } var tlsCertificate = new X509Certificate2(certificateData, "password"); string targetHost = tlsCertificate.GetNameInfo(X509NameType.DnsName, false); ServerBootstrap sb = new ServerBootstrap() .Group(this.ServerGroup, this.WorkerGroup) .Channel<TcpServerSocketChannel>() .ChildOption(ChannelOption.Allocator, this.serverBufferAllocator) .ChildHandler(new ActionChannelInitializer<TcpSocketChannel>(channel => { channel.Pipeline //.AddLast(TlsHandler.Server(tlsCertificate)) .AddLast(this.GetEncoder()) .AddLast(this.GetDecoder()) .AddLast(counterHandler) .AddLast(new CounterHandlerOutbound(this.outboundThroughputCounter)) .AddLast(new ReadFinishedHandler(this.signal, WriteCount)); })); Bootstrap cb = new Bootstrap() .Group(this.ClientGroup) .Channel<TcpSocketChannel>() .Option(ChannelOption.Allocator, this.clientBufferAllocator) .Handler(new ActionChannelInitializer<TcpSocketChannel>( channel => { channel.Pipeline //.AddLast(TlsHandler.Client(targetHost, null, (sender, certificate, chain, errors) => true)) .AddLast(this.GetEncoder()) .AddLast(this.GetDecoder()) .AddLast(counterHandler) .AddLast(new CounterHandlerOutbound(this.outboundThroughputCounter)); })); // start server this.serverChannel = sb.BindAsync(TEST_ADDRESS).Result; // connect to server this.clientChannel = cb.ConnectAsync(this.serverChannel.LocalAddress).Result; }
public BenchmarkActorRef(Counter counter, RemoteActorRefProvider provider) { _counter = counter; Provider = provider; Path = new RootActorPath(Provider.DefaultAddress) / "user" / "tempRef"; }
public void SetUp(BenchmarkContext context) { ClientGroup = new MultithreadEventLoopGroup(Environment.ProcessorCount/2); ServerGroup = new MultithreadEventLoopGroup(1); WorkerGroup = new MultithreadEventLoopGroup(Environment.ProcessorCount/2); _shutdownBenchmark = new CancellationTokenSource(); _clientChannels = new ConcurrentBag<IChannel>(); _inboundThroughputCounter = context.GetCounter(InboundThroughputCounterName); _outboundThroughputCounter = context.GetCounter(OutboundThroughputCounterName); _clientConnectedCounter = context.GetCounter(ClientConnectCounterName); _errorCounter = context.GetCounter(ErrorCounterName); _signal = new ManualResetEventSlimReadFinishedSignal(ResetEvent); var sb = new ServerBootstrap().Group(ServerGroup, WorkerGroup).Channel<TcpServerSocketChannel>() .ChildOption(ChannelOption.TcpNodelay, true) .ChildHandler(new ActionChannelInitializer<TcpSocketChannel>(channel => { channel.Pipeline.AddLast(GetEncoder()) .AddLast(GetDecoder()) .AddLast(new IntCodec(true)) .AddLast(new CounterHandlerInbound(_inboundThroughputCounter)) .AddLast(new CounterHandlerOutbound(_outboundThroughputCounter)) .AddLast(new ErrorCounterHandler(_errorCounter)); })); ClientBootstrap = new ClientBootstrap().Group(ClientGroup) .Option(ChannelOption.TcpNodelay, true) .Channel<TcpSocketChannel>().Handler(new ActionChannelInitializer<TcpSocketChannel>( channel => { channel.Pipeline.AddLast(GetEncoder()) .AddLast(GetDecoder()) .AddLast(new IntCodec(true)) .AddLast(new CounterHandlerInbound(_inboundThroughputCounter)) .AddLast(new CounterHandlerOutbound(_outboundThroughputCounter)) .AddLast(new ErrorCounterHandler(_errorCounter)); })); var token = _shutdownBenchmark.Token; _eventLoop = () => { while (!token.IsCancellationRequested) { foreach (var channel in _clientChannels) { // unrolling a loop channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.WriteAsync(ThreadLocalRandom.Current.Next()); channel.Flush(); } // sleep for a tiny bit, then get going again Thread.Sleep(40); } }; // start server _serverChannel = sb.BindAsync(TEST_ADDRESS).Result; // connect to server with 1 client initially _clientChannels.Add(ClientBootstrap.ConnectAsync(_serverChannel.LocalAddress).Result); }
public void Setup(BenchmarkContext context) { _parseThroughput = context.GetCounter(ParseThroughputCounterName); }
public void Setup(BenchmarkContext context) { _system = ActorSystem.Create("ActorMemoryFootprintSpec" + Counter.GetAndIncrement()); _createActorThroughput = context.GetCounter(CreateThroughputCounter); }
public void Setup(BenchmarkContext context) { addCounter = context.GetCounter(AddCounterName); key = 0; }
public BenchmarkActor(Counter counter, long maxExpectedMessages, ManualResetEventSlim resetEvent) { _counter = counter; _maxExpectedMessages = maxExpectedMessages; _resetEvent = resetEvent; }
public void SetUp(BenchmarkContext context) { // disable SO so we don't fill up the build log with garbage Console.SetOut(new StreamWriter(Stream.Null)); _consoleWriteThroughputCounter = context.GetCounter(ConsoleWriteThroughputCounterName); }
public void Setup(BenchmarkContext context) { this.counter = context.GetCounter(CounterName); }
public void Setup(BenchmarkContext context) { _createMailboxThroughput = context.GetCounter(CreateThroughputCounter); _mailboxes = new List<Mailbox>(MailboxCreateNumber); }