前言 最近看了 dpdk-dumpcap和 dpdk-pdump的实现过程。写篇文档总结下~ 把大象放在冰箱里面分为三步:打开冰箱、放进大象,关上冰箱。 网络抓包的流程也是如下: 先在数据包上执行 bpf filter,判断数据包匹配。 将匹配的数据包,发送给应用层程序。 应用层,将数据包保存到 pcap/pcapng 文件中。 dpdk-dump…
前言 在DPDK中,通常使用 dpdk-devbind Application 来 bind/unbind 设备。 在vpp中,vpp/src/plugins/dpdk/device/init.c at master · FDio/vpp 在程序启动的时候,自动bind设备。 本文,将探究下,DPDK场景下,网卡设备的bind/ubind过程。 P…
前言 有一天我死了,我希望我的数字遗产,可以再存在十年。 目前,我使用wordpress,记录文档内容。但是,wordpress 属于是有状态的服务。它必须间隔打理打理,要不然,站点可能就挂了。 我希望找一个 saas ,来记录我的文档内容。 找了一圈,我选择了 confluence cloud :https://da1234cao.atlassi…
前言 网路场景中,为了极致的压榨性能,会选用 DPDK 这类 kernal bypass 机制:DPDK and Kernel Bypass: When Microseconds Matter More Than Your Sanity - The Internet Papers 性能提升是实实在在的。我们谈论的是在现代硬件上每秒处理 1000 万…
前言 在高性能的网络转发中,比如 vpp/dpdk,通常对数据包采用批处理。批处理有很多好处:上下文的切换成本,会分摊给每一个数据包;CPU能一次性,将多个数据包所需的数据,加载到高速缓存中处理,减少了等待数据从主内存读取的次数,从而极大提升效率。 本文介绍,预取函数 __builtin_prefetch 。介绍它的使用和作用机理。 然后,做一个预…
前言 网络场景的代码,对性能,比较敏感。 在编写性能敏感的代码,还是要有所留意。 下面的内容参考自:1. Performance Optimization Guidelines — Data Plane Development Kit 25.11 Writing Efficient Code 内存 尽量不要在数据面,进行字符串的拷贝拼接。 字符串的…
前言 vpp 的线程类型,可以分为控制面线程(vpp_main),和数据面线程(vpp_wk) root@localhost ~/w/3/vpp-upstream (master)# pidof vpp 2284230 root@localhost ~/w/3/vpp-upstream (master)# pidstat -t -p 2284230…
前言 多生产者多消费者(multiple-producer,multiple-consumer) 的无锁(lock-free)环形缓冲区(ring-buffer),有其特定的使用场景。 在一些高性能场景下,锁是绝对不能使用的。不仅锁不能使用,为了避免 cache miss,每个工作线程会选择使用 per-thread data方式,进行数据读取与写…
前言 SELinux 是强制访问控制(Mandatory Access Control, MAC)的一种实现,提供了额外的安全层。SELinux 策略定义了用户和进程如何与系统中的文件进行交互。 SELinux fundamentally answers the question: May <subject> do <action> t…
前言 我们在校园或者图书馆,会连接一些公共网络。在连接后,初次访问访问网络时,浏览器会自动跳转到一个登陆页面。这背后的原理嘛,不知道。 本文,将有个类似的实现。当访问任意一个地址的 80 端口时,这个访问将被劫持,并返回一个自定义的界面。这里,是为了感受下 tproxy(transparent proxy,透明代理) 的使用。 接着,我们将从内核源…