RXE中的定时器 1. RDMA_RXE中结构体的定义和初始化 每个 rxe_qp 包含两个重传定时器,一个重传定时器用于指示未收到对端ACK:retrans_timer,另一个重传计时器指示收到了一个 RNR NAK (收到对端receiver 未准备好的NAK包后,同样要定时重传):rnrnak_timer RNR NAK 可参考IB Spec 1.3 Sec. 9.7.5.2.8 RNR NAK 123 2022-10-15 #RDMA #libRXE #Soft-ROCE
RDMA-RoCEv2 ibv_reg_mr 分析 1. 用户程序调用 IBVerbs 用户调用的ibv_reg_mr中包含四个参数,如下所示 12struct ibv_mr *ibv_reg_mr(struct ibv_pd *pd, void *addr, size_t length, enum ibv_access_flags acces https://www.rdmamojo.com/ 2022-08-25 #RDMA #libRXE #Soft-ROCE #libibverbs
RDMA Stack实现分析 希望通过这篇文章来梳理 libibverbs提供的用户态Verbs API是如何进行设备操作/数据通信的,以Soft-RXE实现为例。 基于kernel: 5.19-rc1 基于rdma-core: v34.0 RDMA Stack的内核支持 参考:https://www.kernel.org/doc/html/latest/translations/zh_CN/infin 2022-07-04 #RDMA #libRXE #Soft-ROCE #libibverbs
体验rust-for-linux 编译x86 kernel + 构建文件系统 Rust依赖安装 参考:Rust for linux: Quick Start 使用用cargo/rustup安装rustc + rust-src + bindgen 安装LLVM-14 参考https://apt.llvm.org/ bash -c "$(wget -O - https://apt.llvm.org/llvm.sh 2022-06-16 #Rust #kernel #Rust-for-linux
RDMA入门简介 本文是对 OFA Training 第一部分的总结。 这是一份很好的学习RDMA的入门材料,从原理讲起,更容易理解。 关键术语1. RDMA – Remote Direct Memory Acces一种应用程序之间的通信机制 Remote:说明通信双方处于远端 Direct:说明通信不需要“更高权限者”的参与 Memory:说明数据需要从应用A的虚拟地址转移到应用B的虚拟地址 2. Verb 2022-05-27 #RDMA #OFA
Rust标准库涉及的Trait 本篇文章是对下面文章的阅读笔记,不保证可靠性,希望大家还是以Rust标准库源码/英文原文为准 Tour of Rust’s Standard Library Traits 本文亦参考了下面这篇文章,但该文章排版有混乱的地方Tour of Rust’s Standard Library Traits中译 Trait基础1. Self指代实现的类型1234567891011121314151 2022-05-18 #Rust
CS144-Lab4实验笔记 实验简介这个实验主要完成TCP Endpoint的功能,一个TCP端点包含一个TCPSender,和一个TCPReceiver。进行TCP连接的时候,通常是一个TCP端点A向另一个TCP端点B发送“连接建立”请求,经过三次握手后TCP连接建立。之后两个端点间可以相互传送数据。每当一端要发送的字节流到达EOF的时候,向对端发送一个“连接关闭”请求,最后当两个端点均已经发送连接关闭的请求,并且都接到了 2022-05-18 #CS144 #TCP/IP #Networking
CS144-Lab3实验笔记 实验简介Lab3这个实验主要完成的是TCP发送端的功能。应用程序写入字节流到socket,TCP Sender负责将本端的字节流发送到对端。 具体地说,TCP Sender负责: 根据对端的“接受窗口大小 + 期望收到的下一个字节”,来构造要发送的TCP报文头部和数据。 如果超出规定的时间后仍未收到一个已发送报文的应答,则需要重传这个报文。 要实现的功能有:1. 如何构造要发送的TCP头 2022-05-18 #CS144 #TCP/IP #Networking
CS144-Lab2实验笔记 实验简介这个实验主要完成的是,TCP接受端应该如何工作,才能正确地将TCP Payload交付给socket的问题。 CS144 Lab实现的是这个场景:NIC从链路上收到MAC数据包,交给kernel;kernel解析MAC头后,将这个包传给虚拟的tun设备。CS144 Lab中的其他辅助函数从tun设备中读取IP包,拆包后将完整TCP报文交给tcp_receiver/tcp_sender 这两 2022-05-18 #CS144 #TCP/IP #Networking
CS144-Lab1实验笔记 实验简介Lab0中完成了有序字节流的写入和读出,这个实验需要完成乱序字节流的重组、写入和读出。也就是说,Lab1实验手册中的这幅图,蓝色和绿色部分我们已经在Lab0中完成了,我们在Lab1中只需要完成红色部分的重组即可。 思路(这个思路有很大的性能优化空间) 使用map存储乱序字节流,key=(起始下标,结束下标),均从0开始,value=(字符串),pair<int,int>作为 2022-05-18 #CS144 #TCP/IP #Networking
CS144-实验环境搭建和Lab0 实验环境 这次打算用 Jetbrains Gateway进行远程开发。按照 CS144 README 进行远端Clion的配置。注意环境变量和编译时传给cmake的宏的设置。 安装TcpDump,最好从Github的源码编译安装,5.0版本后的tcpdump可以保存pcap文件中同时输出到标准输出流中。 实验0使用TCPsocket和一个webserver(对端监听80端口)进行通信,类似于cu 2022-05-18 #CS144 #TCP/IP #Networking
Tmux配置与美化 本文介绍了我目前使用的Tmux配置。一来是目前的配置用着还算舒服,写此文安利一下;二来也记录一下键位映射,以做备忘。 我的Tmux配置目录 Oh-My-Tmux目前我用的配置是基于Oh-My-Tmux项目改造的。在这个项目上我进行了一些配色的改变(原生的黑白红是在欣赏不起来),最终效果如下图1所示,环境为Windows Terminal + WSL2 + Tmux 3.0a 安装 配置文件的安装这 2021-07-19 #tmux #dotConfig #折腾
[MIT-6.S081/Fall2020] 实验笔记零 Lab0: Preparation 写在前面的话为了更好地理解RISC-V指令集,也为了熟悉QEMU,所以选择刷一遍MIT-6.S081的实验。希望不仅仅以做Lab为目的,同时也精读几篇OS领域经典文章。 可能好多人都卡在环境准备上,但后来我发现:趁早动手做实验,比准备环境更重要~ 环境搭建参考 6.S081 官方的配置教程:Tools 本人用的环境是基于Qemu(KVM)上的Ubuntu 20.04。 首先安装RISC-V工具链 2021-06-22 #MIT #Open Course #6.S081 #OS #Lab
使用Github Actions自动部署Hexo博客 介绍本文将介绍如何利用Github Actions功能自动部署博客。这样本地就不需要安装Node.js以及Hexo包,写完文档直接push到远程仓库,由Github Actions自动部署到博客网站上。由于本网站现阶段托管于github.io,因此我目前的需求是,推送博客文章的更改后,生成对应的静态网页,最后将静态网页内容自动推送到 username.github.io 这个仓库中。 必要的准备测 2021-06-21 #CI #Github #Hexo