使用Linux内核的ftrace跟踪eBPF问题

好久没写文章了,最近忙于各种事情,再加上过年放假学习,计划文章队列排的老长了。在此,新年第一篇文章,就先祝一下大家新年快乐哈~ eBPF香是香,但是竟然还有内核不支持?博主最近遇到了这么个情况,eBPF程序死活无法加载,始终报出Invalid argument的错误,为了解决这个问题,博主我花了好多天时间排查,跟踪了Linux内核的调用链,最后发现,问题竟然是…(实在想不到好的开头了) ...

2022-02-15

贴贴地气——解决Go语言没有原生RCU一致性原语的问题

众所周知,Go语言里没有原生的RCU一致性原语,这在一些特定场景下,会造成蛮大的性能问题。为了解决这个问题,我们来贴贴地气,在符合适用场景需要的条件下,使用简单粗暴的手段解决问题。 前言 之所以需要RCU,其实是来自于Bridge中FDB(Forwarding Database)场景的一个需要。 ...

2021-12-12

重新定义“家用”路由器——500R不到捡华三商用垃圾(含方案与参考配置)

500元不到买台华三的商用机,28个千兆口,轻松拉满300M宽带,又可以起BGP起VRF,香就完事了。 注意 本文不打广告,仍然以技术为主。要是打广告博主就不会去捡垃圾了 前言 其实博主我跟MT(MikroTik,以下简称MT)家的设备和软件(RouterOS,以下简称ROS,注意不是机器人操作系统)还挺有渊源,印象里好像是从初三就开始用MT家的ROS了,到现在差不多也有接近9年了,然而,ROS才从那时的5.26更新到现在的6.48,期待已久的ROS 7.0现在连Testing阶段都还没到,是真的磨叽。在这9年的时间里,ROS与Linux的结合,算是让我相当清晰得搞明白了Linux的数据面和各种hook点的功能以及潜在的bug(因为ROS就是基于Linux),慢慢也让我开始决定抛弃这玩意,走上自研网络设备的路线。从一开始借用Linux的系统协议栈,到后来DPDK PMD数据面,再到现在eBPF XDP轻量数据面,快进一步到智能网卡和FPGA,无一不是为了更好地把这玩意替换掉,满足更多场景需要。 ...

2021-11-29

重构——让XDP为轻量SDN数据面再加速

上一篇文章我们一块来看了eBPF XDP的性能之路和场景,文中对于Ring也进行了简单的描述,但是真正当我重构起来那个包时,这么多的Ring究竟在内存中的哪个位置?哪些数据之间又是重叠的?本篇文章,我们就来顺腾摸瓜,看看这玩意更低层级是什么样子的。 ...

2021-11-14

解读eBPF XDP性能之路:它如何向着DPDK看齐?它在实际中又能带来多大效益?

相信使用过Linux的AF_PACKET类型socket的朋友都知道,性能不是特别好,而且似乎引入了一个新的问题——用户态程序要处理所有来的报文(可能也能绑定socket,博主我没有尝试过),这应该是相当拉胯了。使用eBPF XDP处理完美解决所有问题,还附带了UMEM共享内存,省掉了不少CPU时钟,不仅能解决云原生场景下的一些性能和潜在问题,还能顺带做个SD-WAN,能不香吗?(手动狗头 ...

2021-11-07

非国行的Android不能使用国行的Watch4?不指望三星,自力更生完美解决

前几天博主我入手了三星的Galaxy Watch4,起初是在一家淘宝店买了港行的,无奈老板迟迟找不到货,想着有那么多年玩机的经验,搞个国行的应该也能有解决办法,就上了国行。没想到,这水,有点深。虽说最终解决了问题,但是前前后后搞了许久,要不是为了一个圆形的表盘,我就直接退货了。 ...

2021-10-10

Windows上还能跑容器跑K8S?这是不是有点不科学

众所周知,Linux下有多种类型的namespace,它们共同实现了容器这一最终形态,进而向上交付出了Kubernetes这样一个精品。那么当Kubernetes运行在Windows上时,它所依靠的技术发生了什么变化?作为一个f**k Windows的忠实用户来说,起初看到Windows还能Kubernetes,让我大跌眼镜,甚至一度觉得这很不Kubernetes,毕竟以往Windows的稳定性、系统设计等已经给我留下了深刻的、极差的印象。这篇文章,我们一块来看看Windows,到底是怎么Hold住Kubernetes的,真的能好好Hold住吗? ...

2021-09-11

从WordPress再到Hugo,我搞了些啥?

雪糕博客建站6年来,来来回回搬站可谓搬了无数次。WordPress、Typecho、Hexo,几乎市面上成熟一些的博客系统都被换了一遍,这次,我们来换个Hugo看看(逃 当你看到这篇文章时,即代表雪糕博客已经完成了新一轮的全站迁移工作了,从原本的WordPress迁移到了Hugo。换了一个崭新的面貌,换了一个崭新的交互体验早些时候的文章在迁移过程中,多多少少可能受到了点改动,也可能会有了些错误,这也无可避免了,只能慢慢发现再去改正了。后续的文章,就要向着新博客看齐辣 ...

2021-09-08

初探DPDK——环境准备与编写第一个简易的NAT程序

博主早期使用Golang+TAP/TUN实现了对数据包L2/L3级别的操作,但是很显然这么做也会有很大的问题——用户程序的数据包发出到TAP/TUN,还要再复制到用户态程序处理,然后通过用户态程序的套接字再从主网卡发出,这样一来既延长了数据路径,又带来了多次的用户态内核态间的数据拷贝,整体上造成的指令数不容小觑。DPDK则可以完全解决这个问题,本篇文章则为对DPDK的一个开端,在完成开发环境准备的同时,博主我稍微修改了l2fwd例程,使得其能够实现一个简易的NAT操作(不能用的那种),感受一下DPDK的魅力~ ...

2021-08-25

Golang代码补全和远程调试可以兼得!Projector+GoLand,真香

既可以拥有GoLand代码补全的能力,又可以在Windows上体验到原生的Linux编程调试过程,当开发环境和终端设备能够解耦开的时候,工程随行就成为了可能,开发效率再度+++++到底是什么东西能有这么香?我们来看看~ ...

2021-07-24