On Sun, Oct 3, 2021 at 4:33 PM TataG <tatianagaid...@gmail.com> wrote:
> Hi gRPC group members. > > I was looking how the RPC's are distributed on server side. > In grpc_bench c++ multithread example > https://github.com/LesnyRumcajs/grpc_bench/blob/master/cpp_grpc_mt_bench/main.cpp, > they have multiple threads handling RPC's and a completion queue per > thread, I assume according to performance best practices recommendations > https://grpc.io/docs/guides/performance/ > client is > https://gist.github.com/ppLorins/f30e6a2e14c3738288200b43a803b122 with > difference that Async completion threads are opened prior to sending the > data and client is sending unary generic rpc's. > When client side is sending to that specific server using 10 channels 100K > unary RPC's per channel I can see that RPC's are processed unevenly on > server side, some thread with its own completion queue got more, some got > less. As each thread is doing the same exact processing, I expected that by > the ned of processing there would be an even number of processed events. > May I ask if it is expected and why? > The CQ-based async API can't provide really perfect balancing across CQs. Some amount of imbalance between threads is expected. In general, we are trying to move away from the CQ-based async API and towards the new callback-based async API, described in https://github.com/grpc/proposal/blob/master/L67-cpp-callback-api.md. You might try that out and see if it solves this balancing problem for you, although it may be a bit of a trade-off right now, since there are still other some performance issues with the new callback-based API that will be resolved once the EventEngine migration is complete (see https://github.com/grpc/proposal/pull/245 for details; ETA for that is probably still about 6 months away). > > Another question regarding overall performance. For example I can see that > client can send data faster than server can process it. Because of that at > some point, client has to wait until it can continue sending data. No > matter if client has 1 channel and sends 100K unary requests, and if server > has 10 threads and a completion queue per thread. Multiple threads > sometimes even had worse performance than a single thread on server side. > This results in growth of RAM memory consumption on client side to very > large numbers. There are no memory leaks(direct and indirect), but even > after all RPC's are processed and all channels are destroyed, the memory > footprint doesn't go down. > May I ask for any suggestions in this regards? > It's hard to say what's happening here without a heap profile of some sort. Note that most gRPC objects are actually ref-counted internally, so even after you "destroy" them via the API, they may stick around for a little while longer waiting for final callbacks to be invoked for everything to get cleaned up. So you could try just waiting a few seconds after you destroy the channels to see if the memory usage goes down. > > I'm using generic way as I have own serialization, and unary as I was > planning to create multiple servers eventually as pods, and use load > balancing to send RPC's in round robin manner to them. > > Thank you in advance! > > > -- > You received this message because you are subscribed to the Google Groups " > grpc.io" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to grpc-io+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/grpc-io/4b165577-26b1-4496-a371-a127c9596608n%40googlegroups.com > <https://groups.google.com/d/msgid/grpc-io/4b165577-26b1-4496-a371-a127c9596608n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Mark D. Roth <r...@google.com> Software Engineer Google, Inc. -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to grpc-io+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/CAJgPXp4itFL43QcEGRgEzX_suNpd6OUv485gZ20XHTKfN-WptQ%40mail.gmail.com.