C++ and Python are wrappers of C core. So they should have behaved 
similarly after entering C core functions. 

Have you tried gdb to find out who called `grpc_slice_malloc()` here? If 
the memory size is the same among different runs, you can add a line to 
check if the run-time parameter is 3905 and set a breakpoint there. Then 
you will see the stacktrace.

On Thursday, August 15, 2019 at 10:16:40 PM UTC-7, xia rui wrote:
>
> Hello, everyone.
> I am trying to trace the request sending of gRPC.
>
> In grpc-cpp, when I start to send a request, the client first malloc a 
> buffer, then swap data to it. The tracing log is:
>
> E0816 12:59:37.909413170    6205 slice.cc:309]               
> *grpc_slice_malloc() 
> call grpc_slice_malloc_large(), length: 2605*
> E0816 12:59:37.909489871    6205 call.cc:1519]              
>  call_start_batch() start
> E0816 12:59:37.909508644    6205 call.cc:1637]              
>  call_start_batch(): GRPC_OP_SEND_MESSAGE
> E0816 12:59:37.909518989    6205 byte_stream.cc:42]          *init 
> SliceBufferByteStream()*
> E0816 12:59:37.909527288    6205 slice_buffer.cc:208]        
> *grpc_slice_buffer_swap() 
> start*
> E0816 12:59:37.909535026    6205 slice_buffer.cc:209]        a info: 
> length: 2605, capacity, 8
> E0816 12:59:37.909601320    6205 slice_buffer.cc:215]        b info: 
> length: 0, capacity, 8
>
> (1) gprc_slice_malloc() first create new space for send_message
> (2) GRPC_OP_SEND_MESSAGE operation create SliceBufferByteStream
> (3) SliceBufferByteStream call grpc_slice_buffer_swap() to swap memory 
> into its data.
>
>
> In grpc-python, when I start to send a request, the client invoked 
> grpc_slice_from_copied_buffer() to copy the payload of the request. The 
> tracing log is:
>
> in operation.pyx.pxi, call grpc_slice_from_copied_buffer(), length: 3905
> E0816 13:07:32.242668044    7720 slice.cc:216]               
> *grpc_slice_from_copied_buffer(), 
> length: 3905*
> E0816 13:07:32.242682086    7720 slice.cc:309]               
> *grpc_slice_malloc() 
> call grpc_slice_malloc_large(), length: 3905*
> E0816 13:07:32.242703140    7720 call.cc:1519]              
>  call_start_batch() start
> E0816 13:07:32.242719473    7720 call.cc:1637]              
>  call_start_batch(): GRPC_OP_SEND_MESSAGE
> E0816 13:07:32.242732400    7720 byte_stream.cc:42]          *init 
> SliceBufferByteStream()*
> E0816 13:07:32.242744987    7720 slice_buffer.cc:208]        
> *grpc_slice_buffer_swap() 
> start*
> E0816 13:07:32.242758298    7720 slice_buffer.cc:209]        a info: 
> length: 3905, capacity, 8
> E0816 13:07:32.242856925    7720 slice_buffer.cc:215]        b info: 
> length: 0, capacity, 8
>
> Here, I find that the public API grpc_slice_from_copied_buffer() is called 
> to copy the payload.
>
>
> I am trying to find the function who invokes "grpc_slice_malloc()" to 
> create a vacant memory for request payload but failed.
>
> I want to know if I miss the *grpc_slice_from_copied_buffer()* in 
> grpc-cpp?
>
> Best wishes,
> Xia Rui
>
>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/8c0d49f0-79ba-4fb7-abb9-71e4a2d6d84d%40googlegroups.com.

Reply via email to