dzwduan / ysyx-exam

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

第五期“一生一芯”在线调试考核流程

本仓库用于“一生一芯”线上调试的考核。

在线调试考核简介

助教将会在你提交的代码仓库中随机注入3个错误:

  • 软件、硬件和环境(包括构建脚本和仿真环境等)各1个
  • 但不会在仙剑、libc、spike等没有要求学生进行开发的代码中注入错误,也不会在Chisel代码中注入花哨的Scala语法糖

你需要在30分钟内排除这些错误,助教将从你调试的过程中观察你的能力是否达到了“一生一芯”的预期。

为了参加考核,你需要进行如下准备工作。

考核前自检

你需要对即将提交的代码进行自我检查,以确认提交的代码达到了“一生一芯”的学习要求。 具体地,你需要确认:

  • NEMU中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
  • AM中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
  • Nanos-lite中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
  • Navy-apps中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
  • NPC中的代码是你独立编写的,没有参考任何已有代码
  • 在NEMU中可成功运行仙剑奇侠传
  • 在NPC中可成功运行仙剑奇侠传
  • NPC中已经实现了总线、Cache、乘除法器和流水线,并且它们均在仿真过程中正确工作
    • 一个不包含Cache的单周期处理器也可以成功运行仙剑奇侠传,但如果你明知道处理器未达到“一生一芯”的学习要求却仍然申请考核,将可能被视为“骗取流片机会”而列入失信名单

如果你提交的代码中包含不属于独立编写的部分,请你自觉删除它们并重新独立完成。 这样做一方面是要求大家遵守学术诚信,另一方面也是帮助你为考核做好充分的准备。

离线调试练习

我们提供了一个半自动化的bug注入工具供大家进行调试练习。

欢迎大家完善这个工具(正则表达式编程):工具可以注入的bug越多,大家就可以得到越真实的训练。

注意:上述工具注入的bug类型与在线调试考核的题目类型无直接联系

准备考核脚本(本仓库)

在上传你的仓库进行考核之前,请进行如下操作:

cd ysyx-workbench
git clone git@github.com:oscpu/ysyx-exam.git
rm -r ysyx-exam/.git
git add ysyx-exam
git commit -m "add exam file"

注意:请遵从指示执行考核脚本,不要在ysyx-workbench中随意执行该脚本, 否则可能会对项目造成非预期的修改。

上传你的仓库

  • 请你将ysyx-workbench上传到一个公开的仓库,仓库增加doc文件夹上传nemu和npc运行通过的截图, 截图名:ysyx学号-nemu, ysyx学号-npc。
  • nemu运行截图要求一半屏幕是libminiSDL部分代码,一半是运行过程;npc截图要求一半屏幕是difftest部分代码,另一半是运行过程。

考核环境自测

首先请在linux环境下新建user命名为ysyx, 然后clone自己上传的repo并进行环境自测。 请检查如下路径是否存在,考核脚本将会直接从如下路径拷贝相关文件到考核环境中:

  • $NAVY_HOME/apps/pal/repo/
  • $NAVY_HOME/apps/bird/repo/
  • $NAVY_HOME/libs/libc/
  • $NEMU_HOME/tools/spike-diff/repo/
  • $NEMU_HOME/../am-kernels/

通过以下操作进行考核环境的自测,避免在考核时遇到环境配置相关的问题而花费额外的时间:

mkdir ~/exam-test
cd ~/exam-test
git clone 上一步上传仓库的URL ysyx-exam
cd ysyx-exam/ysyx-exam
source exam-init.sh # 此操作将会在当前shell中临时更新NEMU_HOME, AM_HOME, NAVY_HOME, NPC_HOME四个环境变量
cd nanos-lite
make ARCH=riscv64-nemu update
make ARCH=riscv64-nemu run
make ARCH=riscv64-npc run
exit # 退出当前shell, 避免继续使用考核环境中的环境变量

请检查上述过程是否能编译并在NEMU和NPC中运行仙剑,若否,请自行排查问题。 请注意,使用绝对路径会导致你的项目无法在助教的环境中正确运行, 请先自行修改,否则助教不会开展后续考核流程。 此外,上述过程会使用exam_defconfig的配置来编译NEMU, 你可以在自测时打开menuconfig查看并按需调整你的配置。

排查问题后,你需要更新上述仓库,然后重新进行自测。

自测成功后,可删除~/exam-test目录。

软件版本约束

为了便于考核的bug注入, 避免助教和学员因软件版本不一致出现的error等干。

需要对考核使用的软件版本做如下约束:

llvm version: 11/12

verilator version: 4.210

填写考核申请表

学生完成上述流程后,填写模拟考核申请表正式考核申请表,模拟考核无时间限制,正式考核需要等待助教安排考核时间。

考核前准备

  1. 助教将通过考核环境自测小节中的操作,检查学生提交的代码是否符合要求
    • 若不符合要求,则在考核申请表中反馈,要求学生进行整改
    • 若学生提交的代码、git log、学习记录三者不一致,助教有权不予安排考核;若三者严重不一致,助教有权向项目组建议将该学生加入失信名单,项目组将仔细评估

正式版考核冷静期

冷静期试用阶段结束, 从2023/3/1开始, 进入正式执行阶段.
随着一生一芯报名人数逐渐增加, 流片的同学人数也逐渐增加, 但助教人数有限, 望大家珍稀每次考核机会, 严格执行考核冷静期安排

  1. 助教安排考核时间时,应注意同一名学生在多次申请考核时,前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周
    • 某学生在第t周参加完第1次考核,则他最早可在第t+1周参加第2次考核
    • 某学生在第t+1周参加完第2次考核,则他最早可在第t+2周参加第3次考核
    • 某学生在第t+2周参加完第3次考核,则他最早可在第t+4周参加第4次考核
    • 某学生在第t+4周参加完第4次考核,则他最早可在第t+6周参加第5次考核
  2. 助教在代码仓库中注入3个错误,涵盖软件、硬件和环境(包括构建脚本和仿真环境等), 确认注入错误后NEMU和NPC皆无法成功运行仙剑,并填写bug记录表(不公开), 但不会在仙剑、libc、spike等学生没有进行直接开发的代码中注入错误, 也不会在Chisel代码中注入花哨的Scala语法糖
  3. 助教通过git init重新创建工程,从而去掉git diff的记录
  4. 助教将注入错误的工程通过以下方式进行加密打包,并记录解压秘钥:
    base64 /dev/random | head -c 16  #此命令将会生成一个随机字符串作为秘钥
    tar cj ysyx-workbench | openssl aes256 -k 秘钥 > exam.tar.bz2
  5. 助教在考核前1天内将压缩包发送给学生,但不告知其秘钥

考核流程

  1. 助教每周安排线上调试考核(每人30分钟),每两名助教监考一位学生(负责注入错误的助教必须参加)
  2. 安排后,助教通知学生参加考核的时间和腾讯会议号码
  3. 学生考核开始时,助教需要
    • 要求学生共享屏幕(整个桌面)并打开摄像头
    • 确认学生身份,必要时可要求学生出示相关证件
    • 若上述两点未满足(如学生端无法打开摄像头),助教应取消该次考核
  4. 助教强调考核纪律,提醒考核时间等
  5. 助教将解压秘钥告知学生,学生通过以下命对压缩包进行解压,并进行考核环境的初始化:
    mkdir ~/exam-test
    mv 压缩包路径 ~/exam-test
    cd ~/exam-test
    cat exam.tar.bz2 | openssl aes256 -d -k 秘钥 | tar xvjf -
    cd ysyx-exam/ysyx-workbench
    source exam-init.sh # 此操作将会在当前shell中临时更新NEMU_HOME, AM_HOME, NAVY_HOME, NPC_HOME四个环境变量
  6. 学生开始调试,助教录屏并开始计时
  7. 在考核过程中,学生严禁使用diff等工具通过对比注入错误前后的项目来观察代码的差异,一经发现将按作弊处理
  8. 助教观察学生调试的过程,两名助教分别对学生进行评价,评价内容包括学生对项目细节的理解是否深入,对工具的掌握是否熟悉,调试方法是否清晰科学
  9. 学生运行成功时,助教需要检查环境变量的值是否指向考核环境(即注入错误的项目); 若学生无意在环境变量指向原项目的情况下(如重新打开了终端但未运行source exam-init.sh)成功运行, 助教应提醒学生,此次成功运行将不作为考核通过的依据
  10. 在考核过程中,若学生提前退出腾讯会议(误操作或由网络问题等原因导致),助教应终止该次考核,考核结果视为无效,并重新安排一次新的考核;若学生连续两次考核均出现提前退出腾讯会议的情况,将视为学生参加完一次考核且结果为不通过
  11. 考核结束时,学生退出腾讯会议,助教停止录屏
  12. 助教整理评价表(不公开),评价表中应包含日期、学生姓名、学校、年级、专业、学号、两名助教姓名和相应评价

考核后

  1. 助教对考核情况进行综合评价后,在3天内将考核结果告知学生
  2. 学生通过考核后,助教将该学生添加至后端小组的白名单,学生可开展SoC对接工作
  3. 若学生未通过考核,可再次申请考核,但前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周

最终解释权

考核结果的最终解释权归“一生一芯”项目组所有。

About


Languages

Language:Shell 100.0%