- 博客(147)
- 收藏
- 关注
原创 RDMA介绍及其在NCCL中的使用
如果通过ibv_modify_qp修改qp时ibv_qp_init_attr.sq_sig_all设置为1,则每个wr都会生成CQE,如果为0,则根据wr.send_flags决定,如果设置了IBV_SEND_SIGNALED则此wr生成CQE,最后通过ibv_poll_cq获取CQE,CQE中包含wr完成情况。没使能AR时,数据传输过程中,丢失其中一个分片,接收端根据报文中的PSN判断有乱序,回复NAK,指示哪个分片丢失(BTH头中的PSN),发送端收到NAK报文,重传分片及其后面所有报文。
2025-05-17 11:25:02
910
原创 coredns源码分析
CoreDNS是使用go语言编写的快速灵活的DNS服务,采用链式插件模式,每个插件实现独立的功能,底层协议可以是tcp/udp,也可以是TLS,gRPC等。默认监听所有ip地址,可使用bind插件指定监听指定地址。
2025-05-05 18:32:27
993
原创 deepseek模型权重和官方推理
模型权重目录中model.safetensors.index.json保存每层模型中权重存放的文件,参考deepseek-r1模型权重:https://huggingface.co/deepseek-ai/DeepSeek-R1/tree/main从此文件可知,deepseek-r1模型有58个MOE层,每层MOE包含一个门控,255个专家和1个共享专家。查看专家权重。
2025-05-05 18:32:17
333
原创 nvshmem介绍及其在deepep中的使用
集群中参与nvshmem操作的每个进程认为是一个PE(processing element),每个PE分配唯一ID。PE之间可通过对称内存进行通信和数据共享,对称内存通过nvshmem_malloc进行分配,使用其他api分配的内存都是私有的。官方文档:https://docs.nvidia.com/nvshmem/api/introduction.html。
2025-05-05 18:17:35
1232
10
原创 k8s informer机制分析
下面为流程概述(为controller-manager进程源码为例),首先创建SharedInformerFactory,再启动控制器,其中会创建所需的sharedIndexInformer,最后启动SharedInformerFactory,也就是遍历SharedInformerFactory的informers map启动所有的sharedIndexInformer。a. 创建 SharedInformerFactory。
2025-05-01 10:18:05
881
原创 k8s之udp丢包问题
此问题复现条件:a. 多线程或者多进程,并且运行在不同的cpu上。只有不同cpu上的线程/进程才会真正并发执行,在链接跟踪表查找时才有可能出现冲突。b. 相同的五元组。后来上网查了下,这个问题在18年就被发现了,可以参考下此问题的root cause和如何fix虽然fix了,但是计数insert_failed依然会增长,只不过不会丢包而已。而且网上有如下两个说法a. 只有udp才会出现此问题,tcp不会出现。
2025-05-01 10:17:02
1188
原创 k8s mellanox网卡使用dpdk驱动问题总结
本文主要总结一下在k8s环境中,mellanox网卡使用dpdk driver可能会遇到的问题及解决办法。其他厂家的网卡,比如intel的x710等,如果想在k8s中,使用dpdk driver,/sys目录是必须挂载的,因为dpdk启动过程会读取这个目录下的文件。但是对于mellanox网卡来说,它是比较特殊的,在使用dpdk driver时,也必须绑定在kernel driver mlx5_core上面。如果挂载了 /sys 目录到pod中,就会报如下的错误。
2025-05-01 10:16:25
594
原创 dpdk mellanox网卡 多线程hang住的问题
对于mellanox网卡,使用dpdk driver时,在多线程场景下,如果这几个线程分别获取link状态,或者统计计数,或者设置mtu等,就会出现线程被堵塞的问题,下面使用dpdk的example l2fwd复现此问题,并分析原因。
2025-05-01 10:15:30
404
原创 k8s conntrack 表项超时导致tcp长连接中断
综上可知,此问题出现主要是因为conntrack表项超时被删除,但是应用是不知道的,下次client发送数据时(ack报文),需要重新查找iptables规则转换目的ip,但是不一定会使用上次的pod id,如果是新的pod ip,对于监听此pod ip的server来说,收到的新连接的报文是ack报文,被认为是不合法的报文,所以才会给client回复rst消息。
2025-05-01 10:14:31
984
原创 k8s kube-proxy ipvs
默认情况下,kube-proxy使用iptables实现service ip到后端pod的转换,可以参考之前写的这篇,分析了iptables规则。也可以使用ipvs来实现,今天搞一下后者,在现有k8s环境上修改下kube-proxy的配置即可。
2025-05-01 10:13:14
1003
原创 Kubernetes api-server 安全访问机制
引用: https://blog.csdn.net/qianghaohao/article/details/100012855kube-apiserver 是 k8s 整个集群的入口,是一个 REST API 服务,提供的 API 实现了 Kubernetes 各类资源对象(如 Pod,RC,Service 等)的增、删、改、查,API Server 也是集群内各个功能模块之间交互和通信的枢纽,是整个集群的总线和数据中心。image.png由此可见 API Server 的重要性了,我们用 kubectl、
2025-05-01 10:07:58
949
原创 k8s之user account
user account是在集群外部访问apiserver时使用的用户,比如kubectl命令就是作为kubernetes-admin用户来执行的,其中~/.kube/config指定了用户的证书,以便和apiserver互相认证。当然对于user account来说,是有多种认证方式的,,但是默认使能是x509客户端证书方式。因为x509客户端证书认证采用双向认证,所以开始之前先通过此简单了解下https双向认证的原理和流程一、Http。
2025-05-01 10:06:46
647
原创 k8s之service account
service account是k8s为pod内部的进程访问apiserver创建的一种用户。其实在pod外部也可以通过sa的token和证书访问apiserver,不过在pod外部一般都是采用client 证书的方式。创建一个namespace,就会自动生成名字为 default 的 service account。当然我们也可以再创建额外的sa。
2025-05-01 10:05:45
585
原创 k8s之multus cni
通常情况下在k8s中,一个pod只有一个接口,用于集群网络中pod和pod通信,而multus定义了一种crd(Kubernetes Network Custom Resource Definition)-NetworkAttachmentDefinition,可用来定义其他网络接口,使pod可以生成多个接口。如下图,eth0为默认的集群网络中的接口,net0和net1是自定义的其他接口。image.png。
2025-05-01 10:04:39
493
原创 k8s之ovs-cni
必须在安装了multus的k8s环境上,因为要使用multus创建的crd资源network-attachment-definitions来定义ovs配置。k8s环境如下在三个节点上执行如下命令,安装openvswitch,如果要实现跨host的pod通信,可以将host上的对外通信的网卡加到网桥上。
2025-05-01 10:03:35
580
原创 k8s cni
skel为cni提供了统一的框架,解析下面六个环境变量和标准输入内容(每个cni插件的配置文件)然后创建cmdArgs比如host-device插件,调用PluginMain时,提供了四个命令分别对应的函数和版本信息cmdAdd, cmdCheck, cmdDel, version.All,如果skel解析环境变量和校验成功后,根据CNI_COMMAND指定的cmd调用相应的函数。
2025-05-01 10:02:21
122
原创 k8s之calico网络
在一个物理server上安装三个VM,VM操作系统如下:calico安装wgetcalico客户端命令工具-calicoctl,可用来查看,修改calico配置。
2025-05-01 09:58:07
989
原创 双机H100部署满血DeepseekSeek-R1-671B
本文记录一下双机8卡H100 GPU服务器上部署满血版DeepseekSeek-R1的流程及遇到过问题。
2025-03-22 15:54:31
597
原创 pytorch 分布式通信进程组
本文学习一下pytorch中的分布式通信进程组,先看一下api参数,再写个例子验证一下,并说明遇到的其中一个坑。
2025-03-22 14:46:03
891
原创 pytorch如何使用自定义NCCL
本文详细介绍了如何通过命令和源码安装 PyTorch,并演示了在源码编译时如何使用自定义的 NCCL 动态库和静态库
2025-02-22 11:02:07
627
原创 cilium ebpf helper函数bpf_redirect/peer/neigh
设置接口索引和flags,如果flags为BPF_F_INGRESS,则将skb->dev设置为ifindex指定的dev,并将报文enqueue_to_backlog到cpu队列,下次软中断再处理报文,就像报文从ifindex指定的接口接收。如果不指定BPF_F_INGRESS,则执行dev_queue_xmit将报文从ifindex指定的接口发送出去。上面三个bpf helper函数实现很简单,只是设置flag和接口索引,并没有真正执行报文重定向的处理,但都会返回 TC_ACT_REDIRECT。
2023-08-12 15:20:19
1143
原创 cilium host-routing模式流程分析
本文分析cilium host routing模式下的报文路径和涉及到的ebpf源码分析。
2023-08-12 09:47:58
881
1
原创 cilium native-routing模式流程分析
本文分析cilium native routing模式下的报文路径和涉及到的ebpf源码分析。实验环境在vxlan模式下修改参数后而来。native routing和vxlan模式的区别主要是跨节点通信时,vxlan模式需要封装,native routing模式需要根据目的ip查找路由表转发到其他节点。
2023-08-06 11:10:11
702
原创 cilium vxlan模式流程分析
本文分析cilium vxlan模式下的报文路径和涉及到的ebpf源码分析。实验环境先通过kubeadm安装k8s,再通过cilium binary安装cilium cni,默认是vxlan模式的。
2023-08-02 19:52:02
638
原创 cilium ipam机制源码分析
cilium作为k8s cni插件,提供了ipam的机制,可用来给pod分配ip地址,具体配置可参考,其中Kubernetes Host Scope表示每个node的cidr由k8s来分配,node上每个pod的ip由cilium-agent来分配;Cluster Scope为默认的ipam方式,每个node的cidr由cilium-operator来分配,并更新到ciliumnode crd中,node上每个pod的ip仍然由cilium-agent来分配,其他几种模式为云厂商提供的。
2023-04-16 18:15:37
759
原创 kubelet PLEG实现分析
kubelet的主要作用是确保pod状态和podspec保持一致,这里的pod状态包括pod中的container状态,个数等,为了达到这个目的,kubelet需要从多个来源watch pod spec的变化,并周期从container runtime获取最新的container状态。比如创建了包括三个container的pod,当其中一个container异常退出时,kubelet能通过PLEG及时发现此事件并重建container。
2023-01-20 21:00:00
1218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人