Life is tough, update arbitrarily.

Hello World Sticky

About Hello World

  • Hello World往往作为很多项目的初始示例程序,我个人把Hello World视为程序员对待“最初”的哲学,所以把它作为这个博客的第一篇博文的标题,用于给这个博客开个头(终于赶在过年前写出来了)。 Read more

VXLAN Tunnel TSO

Overview

overlay网络提供了租户网络东西向连通的能力,但引入了报文封装的代价。常见的网络设备的MTU通常为1500,当虚拟机发送的报文完成overlay封装后的报文长度超过overlay网络的MTU时,就需要将封装后的报文分片后发送。

以VXLAN为例,一个需要分片的VXLAN巨帧将按照MTU被分成若干小于MTU的VXLAN报文,这部分工作传统都是由软件实现的。

通常来说,TSO是一个大多数网卡都支持的卸载功能,可以将TCP报文分段工作卸载到网卡进行。随着技术发展,一些网卡甚至可以支持隧道TSO,将上述隧道TCP巨帧的分段工作offload到网卡实现。

Read more

Introduce of librte_ikcp

Overview

KCP^1是一个纯算法实现的ARQ协议,而librte_ikcp^2是我实现的一个基于KCPDPDK接口风格的封装库。

开发这个封装库的动机源于产品需求。我们的平台是基于DPDK实现的用户态转发面,是不包含协议栈的。一个需求需要确保数据跨节点传输的可靠性,原始实现中使用了UDP进行数据传输,但无法确保其可靠性。

为了解决这个问题,研究了下基于UDP的可靠传输实现,发现大多数的实现都是基于Linux协议栈,在socket层上进行的封装,如UDT^3,这类实现在我们的应用场景不是很适用。后面发现了KCP,它自身实现了ARQ,对报文/消息的输入输出,提供了回调接口,其本身只关注自身状态维护,不关心数据收发的具体实现,可以是UDP socket,也可以是基于DPDK收发包接口的更上一层封装。很显然,这样的实现方式,利于在DPDK应用中实现UDP的可靠传输。

Read more

Instance lock of shell script

Overview

有时候使用shell实现的业务逻辑中,需要确保单实例运行,避免并发执行影响原有逻辑。

虽然shell理论上不太适合特别重的、复杂的业务,不过需要实例锁的情况还是存在的,有需求就要有对应的实现。

Read more

Record of learning AF_XDP

Preface

近年eBPF技术大火,在网络方向上最火的大概就是cilium和XDP了,前者是一个前景非常广阔的CNI,后者是内核里基于eBPF的一个包处理框架。

关于eBPF或XDP,网上有很多介绍文章,这里不会去详细介绍其基础原理,只记录下学习过程中遇到的问题以及对应代码。

Read more

Linux kernel checksum calculation and skb->ip_summed

Background

最近在看内核相关的checksum代码,起因是往虚拟机virtio-net发包时,想通过VIRTIO_NET_HDR_F_DATA_VALID这个flag减少GuestOS的校验和计算开销。关于这个flag,以及virtio_net_hdr这个结构体相关的内容,值得单独说明,所以在这里只是简单提一下。

最初的疑问是VIRTIO_NET_HDR_F_DATA_VALID到底对应几层校验和?

从其定义(DPDK 19.11)可以看到:

Read more

Travels of Martzki: Travel in Gansu and Qinghai in 2020

在2020年的9月,我参加了公司组织的旅行团,目的地是青海和甘肃,开启了第一次的西北之旅。

首先说下旅行本身,由于是跟团游,甚至是跟公司的团,所以行程上面没有什么可自由安排的余地,也没法把青甘大环线上的所有景点都游览一遍。虽然目的地是青海甘肃,但实际上6天行程,最后只有2天在青海,加上一路的奔波,其实体验上来说还是非常辛苦的。

Read more
  • Copyrights © 2021-2023 Martzki
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信