I'm not sure a new transport for gRPC would change anything. gRPC currently uses HTTP (HTTP2 I believe), and there's no reason for HTTP to be the culprit here.
Regards Antoine. Le 24/04/2020 à 20:48, Micah Kornfield a écrit : > A couple of questions: > 1. For same node transport would doing something with Plasma be a > reasonable approach? > 2. What are the advantages/disadvantages of creating a new transport for > gRPC [1] vs building an entirely new backend of flight? > > Thanks, > Micah > > [1] https://github.com/grpc/grpc/issues/7931 > > On Fri, Apr 24, 2020 at 11:37 AM David Li <li.david...@gmail.com> wrote: > >> Having alternative backends for Flight has been a goal from the start, >> hence why gRPC is wrapped and generally not exposed to the user. I >> would be interested in collaborating on an HTTP/1 backend that is >> accessible from the browser (or via an alternative transport meeting >> the same requirements, e.g. WebSockets). >> >> In terms of tuning gRPC, taking a performance profile would be useful. >> I remember there are some TODOs on the C++ side about copies that >> sometimes occur due to gRPC that we don't quite understand yet. I >> spent quite a bit of time a while ago trying to tune gRPC, but like >> Antoine, couldn't find any easy wins. >> >> Best, >> David >> >> On 4/24/20, Antoine Pitrou <anto...@python.org> wrote: >>> >>> Hi Jiajia, >>> >>> I see. I think there are two possible avenues to try and improve this: >>> >>> * better use gRPC in the hope of achieving higher performance. This >>> doesn't seem to be easy, though. I've already tried to change some of >>> the parameters listed here, but didn't get any benefits: >>> https://grpc.github.io/grpc/cpp/group__grpc__arg__keys.html >>> >>> (perhaps there are other, lower-level APIs that we should use? I don't >>> know) >>> >>> * take the time to design and start implementing another I/O backend for >>> Flight. gRPC is just one possible backend, but the Flight remote API is >>> simple enough that we could envision other backends (for example a HTTP >>> REST-like API). If you opt for this, I would strongly suggest start the >>> discussion on the mailing-list in order to coordinate with other >>> developers. >>> >>> Best regards >>> >>> Antoine. >>> >>> >>> Le 24/04/2020 à 19:16, Li, Jiajia a écrit : >>>> Hi Antoine, >>>> >>>>> The question, though, is: do you *need* those higher speeds on >> localhost? >>>>> In which context are you considering Flight? >>>> >>>> We want to send large data(in cache) to the data analytic application(in >>>> local). >>>> >>>> Thanks, >>>> Jiajia >>>> >>>> -----Original Message----- >>>> From: Antoine Pitrou <anto...@python.org> >>>> Sent: Saturday, April 25, 2020 1:01 AM >>>> To: dev@arrow.apache.org >>>> Subject: Re: Question regarding Arrow Flight Throughput >>>> >>>> >>>> Hi Jiajia, >>>> >>>> It's true one should be able to reach higher speeds. For example, I can >>>> reach more than 7 GB/s on a simple TCP connection, in pure Python, using >>>> only two threads: >>>> https://gist.github.com/pitrou/6cdf7bf6ce7a35f4073a7820a891f78e >>>> >>>> The question, though, is: do you *need* those higher speeds on >> localhost? >>>> In which context are you considering Flight? >>>> >>>> Regards >>>> >>>> Antoine. >>>> >>>> >>>> Le 24/04/2020 à 18:52, Li, Jiajia a écrit : >>>>> Hi Antoine, >>>>> >>>>> I think here 5 GB/s is in localhost. As localhost does not depend on >>>>> network speed and I've checked the CPU is not the bottleneck when >> running >>>>> benchmark, I think flight can get a higher throughput. >>>>> >>>>> Thanks, >>>>> Jiajia >>>>> >>>>> -----Original Message----- >>>>> From: Antoine Pitrou <anto...@python.org> >>>>> Sent: Friday, April 24, 2020 5:47 PM >>>>> To: dev@arrow.apache.org >>>>> Subject: Re: Question regarding Arrow Flight Throughput >>>>> >>>>> >>>>> The problem with gRPC is that it was designed with relatively small >>>>> requests and payloads in mind. We're using it for a large data >>>>> application which it wasn't optimized for. Also, its threading model >> is >>>>> inscrutable (yielding those weird benchmark results). >>>>> >>>>> However, 5 GB/s is indeed very good if between different machines. >>>>> >>>>> Regards >>>>> >>>>> Antoine. >>>>> >>>>> >>>>> Le 24/04/2020 à 05:15, Wes McKinney a écrit : >>>>>> On Thu, Apr 23, 2020 at 10:02 PM Wes McKinney <wesmck...@gmail.com> >>>>>> wrote: >>>>>>> >>>>>>> hi Jiajia, >>>>>>> >>>>>>> See my TODO here >>>>>>> >>>>>>> https://github.com/apache/arrow/blob/master/cpp/src/arrow/flight/fli >>>>>>> g >>>>>>> ht_benchmark.cc#L182 >>>>>>> >>>>>>> My guess is that if you want to get faster throughput with multiple >>>>>>> cores, you need to run more than one server and serve on different >>>>>>> ports rather than having all threads go to the same server through >>>>>>> the same port. I don't think we've made any manycore scalability >>>>>>> claims, though. >>>>>>> >>>>>>> I tried to run this myself but I can't get the benchmark executable >>>>>>> to run on my machine right now -- this seems to be a regression. >>>>>>> >>>>>>> https://issues.apache.org/jira/browse/ARROW-8578 >>>>>> >>>>>> This turned out to be a false alarm and went away after a reboot. >>>>>> >>>>>> On my laptop a single thread is faster than multiple threads making >>>>>> requests to a sole server, so this supports the hypothesis that >>>>>> concurrent requests on the same port does not increase throughput. >>>>>> >>>>>> $ ./release/arrow-flight-benchmark -num_threads 1 >>>>>> Speed: 5131.73 MB/s >>>>>> >>>>>> $ ./release/arrow-flight-benchmark -num_threads 16 >>>>>> Speed: 4258.58 MB/s >>>>>> >>>>>> I'd suggest improving the benchmark executable to spawn multiple >>>>>> servers as the next step to study multicore throughput. That said >>>>>> with the above being ~40gbps already it's unclear how higher >>>>>> throughput can go realistically. >>>>>> >>>>>> >>>>>>> >>>>>>> - Wes >>>>>>> >>>>>>> On Thu, Apr 23, 2020 at 8:17 PM Li, Jiajia <jiajia...@intel.com> >>>>>>> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> I have some doubts about arrow flight throughput. In this >>>>>>>> article(https://www.dremio.com/understanding-apache-arrow-flight/), >>>>>>>> it said "High efficiency. Flight is designed to work without any >>>>>>>> serialization or deserialization of records, and with zero memory >>>>>>>> copies, achieving over 20 Gbps per core." And in the other article >>>>>>>> (https://arrow.apache.org/blog/2019/10/13/introducing-arrow-flight/ >> ), >>>>>>>> it said "As far as absolute speed, in our C++ data throughput >>>>>>>> benchmarks, we are seeing end-to-end TCP throughput in excess of >>>>>>>> 2-3GB/s on localhost without TLS enabled. This benchmark shows a >>>>>>>> transfer of ~12 gigabytes of data in about 4 seconds:" >>>>>>>> >>>>>>>> Here 20 Gbps /8 = 2.5GB/s, does it mean if we test benchmark in a >>>>>>>> server with two cores, the throughput will be 5 GB/s? But I have >> run >>>>>>>> the arrow-flight-benchmark, my server with 40 cores, but the result >> is >>>>>>>> " Speed: 2420.82 MB/s" . >>>>>>>> >>>>>>>> So what should I do to increase the throughput? Please correct me >> if I >>>>>>>> am wrong. Thank you in advance! >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Jiajia >>>>>>>> >>>>>>>> >>>>>>>> >>> >> >