2024年2月29日

摘要: 如何使用 perf 分析 splice 中 pipe 的容量变化 这个文章为了填上一篇文章的坑的,跟踪内核函数本来是准备使用 ebpf 的,但是涉及到了低内核版本,只能使用 kprobe 了。 恰好,在搜索东西的时候又看到了 perf,可以使用 perf probe 来完成对内核函数的跟踪,使用相对 阅读全文
posted @ 2024-02-29 19:21 小胖西瓜 阅读(76) 评论(0) 推荐(3) 编辑

2024年2月26日

摘要: 记一次 splice 导致 io.Copy 阻塞的排查过程 简而言之,net.TCPConn 的 ReadFrom 零拷贝实现 splice 在 1.21.0 - 1.21.4 删除了 SPLICE_F_NONBLOCK 参数,导致在 CentOS7.9(内核版本 3.10.0.0) 上 splic 阅读全文
posted @ 2024-02-26 12:26 小胖西瓜 阅读(157) 评论(0) 推荐(2) 编辑

2024年2月22日

摘要: 使用 cmux/smux 对 TCP 进行复用 只写一下如何使用,不对实现进行大量描述,两个库的代码都比较精炼,花一会看一下就行。 cmux 对端口进行复用,单端口可以建立不同协议的连接(本质都是 TCP),如 TCP/TLS/HTTP/gRPC 或自定义协议 smux 对TCP连接复用,单TCP连 阅读全文
posted @ 2024-02-22 18:10 小胖西瓜 阅读(147) 评论(0) 推荐(1) 编辑

2024年2月21日

摘要: 如何在 libevent 中读取超过 4096 字节的数据 bufferevent 是 libevent 中相对高层的封装,较 event 使用起来方便很多。 之前有一个需求,需要从服务端读取数据进行操作,为了防止数据过大,在 bufferevent 的 read_callback 中循环调用 bu 阅读全文
posted @ 2024-02-21 18:31 小胖西瓜 阅读(161) 评论(0) 推荐(3) 编辑

2024年2月7日

摘要: 如何基于 spdlog 在编译期提供类 logrus 的日志接口 实现见 Github,代码简单,只有一个头文件。 前提 几年前看到戈君在知乎上的一篇文章,关于打印日志的一些经验总结; 实践下来很受用,在 golang 里结构化日志和 logrus 非常契合,最常见的使用方式如下。 logrus.W 阅读全文
posted @ 2024-02-07 16:23 小胖西瓜 阅读(100) 评论(0) 推荐(1) 编辑

2024年1月23日

摘要: 2023 的一些技术总结 今年主要发力的两个板块 对网络的探索 对业务代码优化的思考 对网络的探索 整个过程围绕着一个主题 “如何在一个机器内构建一个虚拟 VXLAN/VLAN 网络”。 netns netns 是其中最关键的技术,使用非常简单,主要用来解决隔离问题 VXLAN 的不同 VNI 的相 阅读全文
posted @ 2024-01-23 23:24 小胖西瓜 阅读(498) 评论(0) 推荐(5) 编辑

2022年11月28日

摘要: 环境 实现机器为VMWare的虚拟机,操作系统为 Debian-11(无桌面版本),内核版本为 5.10.0,指令集为 AMD64(i7 9700K),编译器为 GCC-10. 代码 Lab 的代码克隆自 https://pdos.csail.mit.edu/6.828/2018/jos.git Q 阅读全文
posted @ 2022-11-28 11:35 小胖西瓜 阅读(260) 评论(0) 推荐(1) 编辑

2022年3月26日

摘要: #重构代码的一些想法 最近需要新写一个业务模块,这个业务模块和两年前自己写的一个业务功能高度类似,就想着能不能拿过来改改就行。这个业务模块使用 golang 实现的,是我写的第一个 golang 代码。 以上为背景,但是代码拿过来后发现通用性太差,虽然业务有相似的地方,但是小改达不到自己的期望,于是 阅读全文
posted @ 2022-03-26 21:59 小胖西瓜 阅读(91) 评论(0) 推荐(0) 编辑

2022年3月5日

摘要: std::vector 源码分析 从源码视角观察 STL 设计,代码实现为 libstdc++(GCC 4.8.5). 由于只关注 vector 的实现,并且 vector 实现几乎全部在头文件中,可以用一个这样的方法里获取比较清爽的源码 // main.cpp #include <vector> 阅读全文
posted @ 2022-03-05 18:02 小胖西瓜 阅读(816) 评论(0) 推荐(1) 编辑

2021年6月28日

摘要: rust漫游 - 写时拷贝 Cow<'_, B> Cow 是一个写时复制功能的智能指针,在数据需要修改或者所有权发生变化时使用,多用于读多写少的场景。 pub enum Cow<'a, B: ?Sized + 'a> where B: ToOwned, { /// Borrowed data. Bo 阅读全文
posted @ 2021-06-28 19:06 小胖西瓜 阅读(1132) 评论(0) 推荐(1) 编辑

导航