Skip to main content

MIT-6.824-Lab-1

时隔半年,我终于重新开始 MIT6.824 课程的学习。本周末主要计划是 Map Reduce 文章阅读和环境配置。

1. 课程学习资料

2. 环境配置

2022 版安装文档 6.824 Go (mit.edu) 指出 Windows 端的 WSL 似乎存在问题,但为了方便我打算先尝试 VSCode+WSL2 的方案。

在 Windows 平台安装 Ubuntu 22.04 LTS 版本,一些配置参考 WSL 安装 Oh My Zsh ,遇到的新问题如下:

Go 的安装参考 Download and install - The Go Programming Language

uname -a
# install
rm -rf /usr/local/go
wget -qO- https://go.dev/dl/go1.18.3.linux-amd64.tar.gz | sudo tar xz -C /usr/local
sudo apt-get install build-essential
# ~/.zshrc
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
# test
go version

参考 VsCode Go 插件配置最佳实践指南 - 知乎 (zhihu.com) ,在 VSCode 中安装官方插件,调试 6.824 程序需要进一步修改 launch.json 文件。

3. Paper Reading

Execution Overview

  • coordinater(master) 需要保存任务状态、追踪任务执行者
  • 3.3 节提供了关于容错的设计,如何保证原子性

待补充……

4. Getting started

拉取 6.824 代码后,IDE 提示多个错误,大多数是由 Go 语言限制同一包内不应存在同名函数导致的。

4.1 串行版本的运行

6.824 课程代码提供了一个简单的串行 Map Reduce 实现,使用如下命令运行:

go build -race -buildmode=plugin ../mrapps/wc.go
go run -race mrsequential.go wc.so pg*.txt

4.2 串行版本的调试

为了在 VSCode 中调试 Go 程序,首先需要在「运行和调试」中配置 launch.json 中的调试配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "debugAdapter": "dlv-dap",
            "name": "mrsequential",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/src/main/mrsequential.go",
            "args": [
                "wc.so",
                "pg-grimm.txt",
                "pg-frankenstein.txt"
            ],
            "buildFlags": "-race"
        }
    ]
}

args 中输入调试时的参数,需要注意的是,之前编译的 .so 共享库不能在调试模式下正常运行,参考 go - Failed in error “plugin was built with a different version of package” while debugging - Stack Overflow ,插件应与主应用程序使用相同的标志编译,需要在编译时开启 -gcflags="all=-N -l" 选项,对该插件的所有包关闭编译器优化、取消内联,以支持断点调试。

而关于整体实验的调试方法论,可以参看 Lab guidance (mit.edu)

5. Your Job

感觉我的 Go 语法太不扎实了,下周再写……