• 邵亚方
    置顶
    2020-10-11
    课后作业答案: - 请问 tcpdump 在解析内核缓冲区里的数据时,为什么使用 PACKET_MMAP 这种方式?你了解这种方式吗?这样做的好处是什么? 评论区有同学已经回答的很好了, “PACKET_MMAP减少了系统调用,不用recvmsg就可以读取到捕获的报文,相比原始套接字+recvfrom的方式,减少了一次拷贝和一次系统调用。”
    
    9
  • 那时刻
    2020-09-24
    请问老师Wireshark和tcpdump在实现原理上,是否也是监控网卡以内的行为?

    作者回复: wireshark跟tcpdump原理是一致的,都是在网卡软中断里抓包的,自然就无法抓取网卡里的错误,所以通常情况下都需要在两端同时抓包来比较。理解工具的原理要比会用工具更加重要。

    
    5
  • stackWarn
    2020-09-24
    1.感谢作者的总结,请教下ss命令或者读proc文件会进行加锁吗?如果会是否影响性能。proc下的meminfo会 2.bpf的性能好和tcpdump的性能差,如何理解。是否 3.后续会出实际的tracepoint或者stap之类的实际案件排查吗?

    作者回复: 1.会有锁,而且可能还会关中断,这可能会引起业务网络抖动,我们后面课程里有这方面的案例。 2. ebpf通常情况下性能损耗要小一些,因为他在内核里会进行处理,省去了很多无谓的流程开销,或者说它更有针对性,针对某个特定点来追踪,那么这个点之外的逻辑就不会受影响;而tcpdump一是处理流程长,更耗时,二是它不具有针对性,分析面广,这就导致它的开销大。 3. 这类案例的分析会更偏内核实现,比如借助tracepoint来观察内存申请细节,从tracepoint可以观察到gfp_nofs为什么会引起compact fail,然而这类案例对应用开发者或者运维人员太难了,因为很少有人知道gfs_nofs是什么,甚至很多内核开发者都不清楚. 所以这个课程里我会有意的忽略这些内核实现细节,降低内核的门槛,让更多的人更容易了解内核。不过在加餐篇里会有这方面的一些案例,因为我们这门课还是有内核开发者来看的。

    共 2 条评论
    3
  • stackWarn
    2020-09-24
    PACKET_MMAP减少了系统调用,不用recvmsg就可以读取到捕获的报文,相比原始套接字+recvfrom的方式,减少了一次拷贝和一次系统调用。
    共 1 条评论
    9