You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by Ming Liu <mi...@gmail.com> on 2020/09/01 00:05:11 UTC

Can't find any sendfile system call trace from Kafka process?

Hi Kafka dev community,
     As we know, one major reason that Kafka is fast is because it is using
sendfile() for zero copy, as what it described at
https://kafka.apache.org/documentation/#producerconfigs,



*This combination of pagecache and sendfile means that on a Kafka cluster
where the consumers are mostly caught up you will see no read activity on
the disks whatsoever as they will be serving data entirely from cache.*

    However, when I ran tracing on all my kafka brokers, I didn't get a
single sendfile system call, why is this? Does it eventually translate to
plain read/write syscalls?

sudo ./syscount -p 126806 -d 30
Tracing syscalls, printing top 10... Ctrl+C to quit.
[17:44:10]
SYSCALL          COUNT
epoll_wait        108482
write          107165
epoll_ctl         95058
futex           86716
read           86388
pread           26910
fstat           9213
getrusage          120
close            27
open             21

Re: Can't find any sendfile system call trace from Kafka process?

Posted by Haruki Okada <oc...@gmail.com>.
There are two cases that zero-copy fetch thanks to sendfile don't work.

- SSL encryption is enabled
  * Need to encrypt on Kafka process before sending to client
      -
https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/network/SslTransportLayer.java#L946
  * Unlike plaintext transport layer which directly write to socket:
      -
https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/network/PlaintextTransportLayer.java#L214
- Message down conversion happens
  * refs:
https://kafka.apache.org/documentation/#upgrade_10_performance_impact

Does your environment match above cases?

2020年9月1日(火) 9:05 Ming Liu <mi...@gmail.com>:

> Hi Kafka dev community,
>      As we know, one major reason that Kafka is fast is because it is using
> sendfile() for zero copy, as what it described at
> https://kafka.apache.org/documentation/#producerconfigs,
>
>
>
> *This combination of pagecache and sendfile means that on a Kafka cluster
> where the consumers are mostly caught up you will see no read activity on
> the disks whatsoever as they will be serving data entirely from cache.*
>
>     However, when I ran tracing on all my kafka brokers, I didn't get a
> single sendfile system call, why is this? Does it eventually translate to
> plain read/write syscalls?
>
> sudo ./syscount -p 126806 -d 30
> Tracing syscalls, printing top 10... Ctrl+C to quit.
> [17:44:10]
> SYSCALL          COUNT
> epoll_wait        108482
> write          107165
> epoll_ctl         95058
> futex           86716
> read           86388
> pread           26910
> fstat           9213
> getrusage          120
> close            27
> open             21
>


-- 
========================
Okada Haruki
ocadaruma@gmail.com
========================