碎碎念

我在完成OS课程的Homework3时,本以为是很简单的配置,但不知是否因为本机环境太杂乱,还是遇到了一些小问题。由于立下了这个学期开始一定要坚持写一些东西、以免被AI支配的Flag,所以把这些不足为道的经验分享给大家,希望能帮助到遇到同样问题的同学。

STEP1 Docker下载及安装

如果你是Windows或Mac,可以直接从Docker官网下载适用于Windows或Mac的Docker Desktop安装包。按照向导完成安装即可。如果是Linux,相信你可以跳过此步。
建议参考网上的教程安装以及检验,不再赘述。之后的步骤记得保证Docker处于运行状态。

STEP2 插件安装

无论是VScode还是Cursor,都可以直接在扩展处搜索安装此插件。至此,准备工作就完成了。
2025-09-23T15:24:41.png

STEP3 使用Dockerfile构建环境

这一步就容易出问题了。按照老师的步骤进行,你可能会遇到:

  1. "Docker not found" 错误
    如果在执行reopen in container时遇到类似于“Docker not found”的错误提示,首先检查Docker是否正确安装并运行。Windows或Mac可以直接查看任务栏Docker Desktop是否正常工作;Linux环境可以通过以下命令检查Docker状态:
    sudo systemctl status docker

    如果Docker没有启动,请尝试启动它:

    sudo systemctl start docker

    如果还是无法找到Docker,检查VScode的插件是否正确安装,并确保VScode的设置中Docker路径配置正确,可以尝试重启。

  2. "无法连接到远程开发容器" 错误
    此错误一般出现在输入"reopen in container"创建容器之后,同时控制台可能输出以下错误信息(节选):
type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root --include-configuration --include-merged-configuration
[2025-09-23T11:37:12.076Z] Exit code 1

遇到此错误时,可以尝试以下解决方案:

解决方法

  1. 进入 lmbench 文件夹下的 .devcontainer 文件夹。
  2. 打开 Dockerfile 文件,并将内容替换为以下配置:
# 使用 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04

# 安装ca-certificates以解决证书验证问题
RUN apt-get update && apt-get install -y ca-certificates

# 如果BFSU镜像有问题,可以将镜像源替换为官方Ubuntu镜像
# COPY sources.list /etc/apt/sources.list

# 更新包列表并安装wget
RUN apt-get update && apt-get install -y wget

# 添加LLVM的GPG密钥
RUN wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc

# 更新包列表
RUN apt-get update

# 安装必要的软件包和工具链
RUN apt-get update && apt-get install -y \
    make \
    git \
    gcc \
    clang \
    clangd \
    gdb && \
    rm -rf /var/lib/apt/lists/*

# 设置默认的工作目录
WORKDIR /workspace/lmbench

此问题一般是证书验证问题或网络问题导致的,通常更换Dockerfile的内容后即可正常下载镜像创建容器了。如果仍有网络问题,可以尝试使用特殊方法,或是自行搜索教程,更换其它源。

STEP4 编译评测

经过前面的配置,现在的VScode已经处于Linux环境中,接下来是进行编译和评测的步骤。

编译 lmbench

  1. lmbench 目录下,使用以下命令来编译 lmbench

     make results
  2. 执行 make results 后,你会看到一系列提示,要求你设置一些测试选项。通常情况下,可以直接按回车键使用默认设置即可,无需更改。

注意

  • 在编译过程中,你可能会遇到一些路径问题,错误信息类似如下:

      ../scripts/results: 30: cannot create ../../results//b36cd28369b4.1: Directory nonexistent
      Mailing results
      ../scripts/results: 37: mail: not found
      make[1]: Leaving directory '/workspaces/lmbench/src'

    其中 mail: not found 是因为测试完成后,脚本试图自动发送邮件通知,但由于没有配置邮件系统,所以可以忽略这个错误。

    另外,Directory nonexistent 表示结果目录不存在,这是因为在编译过程中,脚本期望将测试结果保存到特定的子目录中,但该目录没有正确创建。

解决方案

  • 对于 Directory nonexistent 错误,可以通过创建软链接来解决:

    cd /workspaces
    ln -sf lmbench/results results

    然后运行:

    cd /workspaces/lmbench
    make rerun

    这将会把缺失的目录链接到正确的位置,从而不优雅地解决路径问题。

  1. 编译完成后,你会在 results 文件夹下看到一个以标识符(如 b36cd28369b4.1)命名的文件。但实际上,它的正确路径应该在一个同名的文件夹下。由于之前的路径错误,这个文件没有存放在正确的文件夹中,导致 getlist 脚本期望的结果文件路径不正确。

解决方法(选择一种,不可同时使用)

  1. 创建一个同名的文件夹,将文件放入该文件夹中。
    2025-09-23T16:25:24.png

  2. results 文件夹下创建一个名为 LIST 的文件,在其中输入该标识符(如 b36cd28369b4.1):

     echo "b36cd28369b4.1" > /path/to/results/LIST

    2025-09-23T16:26:12.png
    然后,重新运行 make see 命令:

     make see

    此时,你应该能够看到正确的 summary.out 文件,文件内容会更加易读。

关于 percent.out 内容缺失的情况

percent.out 文件是统计百分比的。里面没有正确的内容,是因为 lmbench 的版本存在不兼容的问题。这个问题可以忽略,因为你只需要查看 summary.out 文件的内容即可。

总结

以上方法没有根本性的解决路径问题,但是也已经让这个评测可用了,所以我也懒得继续折腾 。默认情况下运行还是比较慢的,得等一会。
运行输出

后记

以上记录的坑与解决方案,都是我在mac环境下完成OS课程Homework3时个人踩到的。它们带有很强的主观性,仅供遇到类似问题的同学参考,也希望能给你节省一些排查环境的时间。
这些小问题虽然看起来不算严重,但实际操作中却常常耗费一些时间。写下来既是给自己做个备忘,也希望能给后来者一点帮助。如有疏漏,欢迎讨论指正。
之后如果有时间,我也会继续更新一些零散的笔记或日常心得。

最后修改:2025 年 09 月 24 日
如果觉得我的文章对你有用,请随意赞赏