当前位置: 首页 > news >正文

MIT 6.5840 (Spring, 2024) 通关指南——入门篇

MIT 6.5840 (Spring, 2024) – Startup

👨‍💻 Charles​

🔗 实验手册:6.5840 Home Page: Spring 2024

文章目录

  • MIT 6.5840 (Spring, 2024) -- Startup
    • about test
    • about debug

今年学习了久仰大名的 MIT 6.5840 (Spring, 2024) (原 6.824),收获颇多,写几篇 note 记录一下各个 lab 的 受虐 实现过程。本篇会介绍一些开始实验前的准备工作。

考虑到这门课的难度,准备尝试这个 lab 的同学想必已经有了一定计算机基础,因此假设基础配置已经完成(代码编辑器,go 语言环境等)——你可以先检查是否配好了:

  • Linux 环境(虚拟机 or WSL)
  • go 语言环境
  • 代码编辑器(vscode 等)
  • Git

about test

6.5840 的各个 lab 都配备了非常多的测试样例,通过 go test 进行测试,即:

go test -run name_of_the_test

然而,在后期的分布式实验中,有些错误并不是每次测试都能遇到 (即 corner case) ,可能你跑几百甚至上千次才出现一两次——如果手动一次次的 go test 会累死😵。因此,就像本课助教 Jose Javier(亦是著名的 The Missing Semester of Your CS Education 的作者之一)说的,我们需要一个脚本来:

  • 执行 N 次某组测试
  • 保存测试失败时的日志以供后续检查
  • 并行跑测试以提升效率

为此,助教写了个 python 脚本方便我们跑测试,具体设计详见 Debugging by Pretty Printing 。我用的是一个网上大佬修改后的版本:Utility for running MIT 6.824 lab test in parallel and saving failed logs ,实测可用。具体地,你需要:

  1. 将这个 dstest.py 放到每个 lab 对应的 test_test.go 的相同路径下

  2. 安装对应 python package (主要是 typer)

    我用 conda 配置的环境,但是运行的时候出现报错:

    TypeError: TyperArgument.make_metavar() takes 1 positional argument but 2 were given
    

    后来发现是 conda installtyperclick 包版本不兼容,因此先:

    conda remove click typer
    

    然后:

    pip install click==8.1.3 typer==0.8.0
    

    就可以了。

  3. 添加执行权限:

    chmod +x dstest.py
    
  4. 运行:

    ./dstest.py --help
    

    正常情况下即可输出使用说明:

    在这里插入图片描述

实验手册 会告诉你每个 lab 各部分的测试该怎么跑,以内容最多的 lab3 为例,其 Part B 有很多测试点:

lab3b-test-intro

每个 lab 的具体测试点都可以在对应文件夹里面的 test_test.go 中找到。例如:
请添加图片描述

因此,当你卡在某(几)个测试点的时候,不妨来这里看看具体测试流程是什么(看不懂可以直接扔给 AI,它包看得懂的)。然后,结合上面的测试脚本,可以方便地针对某些测试点多次测试(这对于检查跑几十次才会遇到的 corner case 很有用),例如:
dstest_demo

./dstest.py 的可选参数可以通过 ./dstest.py --help 了解,上文亦有展示。比如,上图采用了:

  • -p 4 :4 个并行 worker,并发地跑测试
  • -n 50 :每个测试跑 50 次
  • -r :开启数据竞争检查

添加 -o <folder_path> 可以设置保存出错测试日志的文件夹:
dstest_demo2

💡 后面的分布式相关实验涉及大量并发,因此每个 lab 测试的时候都要记得用 -race 检查有无数据竞争:

  • go test -race xxx
  • ./dstest.py -r xxx

about debug

在后续的 lab 中,盯着日志找出错原因的时间很可能会远远大于写代码的时间,因此我觉得从一开始就确定(你自己看得懂、看得清楚的)日志形式蛮重要的。默认代码中的日志打印方式为:

import "log"// Debugging
const Debug = truefunc DPrintf(format string, a ...interface{}) {if Debug {log.Printf(format, a...)}
}

使用效果为:

func main() {n := 101DPrintf("this is a log output, %d", n)	
}>>> 2025/08/24 21:45:55 this is a log output, 101

如果按照助教的 Debugging by Pretty Printing 来,你的日志会是这样的:
colorful-log

确实 酷炫 清晰不少。但是具体还是看自己需求,我自己是仅仅加了根线和微秒级时间戳:

func DPrintf(format string, a ...interface{}) {if Debug {log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)log.Println(strings.Repeat("-", 100))log.Printf(format, a...)}
}

使用效果为:
my-log-demo

其中 R[x_y] 表示节点 x ,它当前 term 为 y 。对我而言这种形式就够用了。

http://www.dtcms.com/a/348232.html

相关文章:

  • 项目学习总结(4)
  • Java内存泄漏详解:检测、分析与预防策略
  • 大语言模型的自动驾驶 LMDrive/DriveVLM-Dual
  • 电动车运行原理与最新人工智能驾驶技术在电动车上的应用展望:从基础动力系统到L5级完全自动驾驶的技术深度解析
  • EndNote 2025 Mac 文献管理工具
  • Multitouch for mac 触控板手势增强软件
  • Multi-output Classification and Multi-label Classification|多输出分类和多标签分类
  • 跨语言文化的统一语义真理:存在性、形式化及其对自然语言处理(NLP)深层语义分析的影响
  • 什么是大模型的指令跟随
  • Preprocessing Model in MPC 3 - 基于同态加密的协议 - Over Fields 有限域
  • Python 列表:定义、操作、推导式与嵌套
  • 西门子 SCL 简单案例
  • 计算机视觉学习路线:从入门到进阶的完整指南
  • 最近遇到的几个JVM问题
  • java学习 + 一个向前端传流顺序不一致的一个解决思路
  • c++ 常用接口设计
  • C#_依赖注入(DI)
  • vulnhub-billu_b0x靶机渗透
  • HPA 数据库实用指南:解决科研文章逻辑衔接难题的实操教程
  • 05 线性代数【动手学深度学习v2】
  • 构建wezzer平台!
  • VirtualBox 中安装 Ubuntu 22.04
  • daily notes[5]
  • 计算机视觉与自然语言处理技术体系概述
  • 深度学习之第一课深度学习的入门
  • Go语言IDE安装与配置(VSCode)
  • VSCode远程开发实战:SSH连接服务器详解(附仙宫云平台示例)
  • Linux综合练习(dns,dhcp,nfs,web)
  • Spring Boot 中 @Controller与 @RestController的区别及 404 错误解析
  • 【嵌入式汇编基础】-数据处理指令(二)