CMU-15-445——P2 目标是实现B+树。 B+树的操作参考B+ Tree Visualization | B+ Tree Animation (dichchankinh.com)进行可视化操作。B+树存在很多实现方式,本文仅说说我自己的实现。 插入叶子结点插入与分裂 从根节点开始,找到KV插入的目标叶子结点。 如果该叶子结点满了,则在增加一个新结点放到右边,将左边结点中的一半移动到右边(右边偏多)。并以右边第一个结点作 2022-11-29
CMU-15-445——P1 实现Buffer Pool Manager。其中使用了Extendible Hashing数据结构以及改进版LRU-K置换算法。 Extendible Hashing先简单介绍两个常见的hash实现 Linear Probe Hashing用环形array slots来存储 增:hash出位置,然后添加,如果已存在,则找下一个最近的slot 查or改:与增相似,先hash出位置,然后比较存储的ke 2022-11-14
CMU-15-445——P0 本身是实现一个Trie树,本身难度不大,主要是很久没写C++了,重拾之后,发现了很多有意思的东西。 什么是lvalue和rvalue?lvalue就是能取到地址的变量。而rvalue是临时变量。例如i是lvalue,而99是rvalue: 123456789101112131415#include <iostream>void f(int& i) { std::cou 2022-11-12
6.824 一个多月没写博客了。是因为入了大名鼎鼎的巨坑——6.824分布式系统的lab。整整一个月爆肝,现在终于写完了,开心。目前Lab4-ShardKv测试了5000次,但也不保证bug free。 我个人的时间分布 (不太准确,中间有的时间可能摸鱼了,比如中秋节) Lab1-MapReduce:2天左右(8月28通过) Lab2-Raft:共16天 2A:3天左右(8月31通过) 2B: 2022-09-29
Golang中的channel与sync.Mutex 一个现象假设我们有一个任务,包括两个goroutine: writer:负责每秒给counter加一 reader:负责每秒打印counter的值 如果用lock的话 1234567891011121314151617181920212223242526272829type Controller struct { cnt int mu sync.Mutex}func (c 2022-08-30
利用Scheduling Framework实现一个简单的gang调度器 写在前面,本项目gang-scheduler面向此项目中的cosheduler造轮子,如果只是想使用gang调度器,推荐阅读原项目;如果想了解如何自定义调度器,可以看看本项目,其改用ConfigMap而没有用CRD来管理PodGroup,也省略了一些优化,是原项目的简陋版,仅方便入门学习。 动机在上一篇文章中,我们写了一个简单的MPI Operator,其可以根据MPIJob任务需求生成Pod来进 2022-08-14
使用kubebuilder编写自己的MPI Operator 上次篇文章总结了MPI Operator需要做的事情,以及手动部署的实践。我们既然都可以手动部署出worker了,干脆再进一步,将该过程用代码实现,写一个MPI Operator。Github 动机目前的MPI Operator还存在哪些不足? 代码较多。大概4000+行,本身属于kubeflow子项目,存在较多kubeflow依赖。不过该Operator的核心功能并不复杂。 缺少对于缺失Pod 2022-07-27 uncategorized
MPI Operator原理分析 MPI Operator是由kubeflow社区开发的,首先可以看看他们给的proposal文档https://github.com/kubeflow/community/blob/master/proposals/mpi-operator-proposal.md 之前我们使用过它来将模型训练任务部署到K8S中。这次我想来仔细看看它的实现原理。 回顾上次使用MPIJob是新建的CRD,用来描述MP 2022-07-23 uncategorized
Elastic Cloud on Kubernetes (ECK) 最终目的是:将K8S的Pod产生的日志收集到Elastic Search中,从而能通过搜索关键词快速定位问题。 部署ES和Kibana参考https://www.elastic.co/guide/en/cloud-on-k8s/2.1/k8s-overview.html 先部署CRD,和Operator,用于操作cluster。 之后通过自己定义cluster,创建EScluster,Kibana 2022-07-08 uncategorized
Horovod on Kubernetes 上一篇文章将Horovod封装到Docker image中,本文将进一步将其部署到Kubernetes集群上进行多机多GPU分布式训练。借助的工具为MPI-Operator,https://github.com/kubeflow/mpi-operator 我们已经有horovod镜像了,部署到K8S上不是小菜一碟吗?然而没有那么简单,中间还有一些要注意的点。 简单尝试如果仅用kubectl来部署, 2022-07-07 uncategorized