Skip to content

Latest commit

 

History

History
198 lines (149 loc) · 11.5 KB

README.md

File metadata and controls

198 lines (149 loc) · 11.5 KB

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

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

在线调试考核简介

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

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

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

注意:

考核期间,助教不会有任何提示,且结束后也不会进行BUG解答,如果出现则视为助教违规。
学员也禁止在考核期间和考核结束之后,以任何形式咨询助教考核相关BUG,如果出现则视为学员违规。

学员需确保自己提交的代码为能够正确运行所有测试程序的代码,申请考核后学员将不能再提交新版代码

  • 建议使用git工具检查是否所有更新都已经 commit 并 push 到远程仓库

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

考核前自检

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

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

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

离线调试练习

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

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

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

准备考核脚本(本仓库)

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

cd ysyx-workbench
git clone [email protected]: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运行PAL通过的截图以及time.txt, 截图名:ysyx学号-nemu, ysyx学号-npc, time.txt标明nemu和npc分别从开始运行PAL至满足考核正确性要求(见后续小节“正确性判定”)所需时间,精确到分,如果所需时间过长,请自行优化以提升通过考核的机会。
  • nemu运行截图要求一半屏幕是libminiSDL部分代码,一半是运行过程;npc截图要求一半屏幕是difftest部分代码,另一半是运行过程。
  • 关闭所有的trace和波形

考核环境自测

首先请在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中运行仙剑,若否,请自行排查问题。
请注意,使用绝对路径会导致你的项目无法在助教的环境中正确运行,
请先自行修改,否则助教不会开展后续考核流程。
请对自己的环境负责,如3位及以上助教均无法跑通,学员需听取助教的修改建议, 如不听取, 则需遵守考核冷静期,后续再次申请。
此外,上述过程会使用exam_defconfig的配置来编译NEMU,
你可以在自测时打开menuconfig查看并按需调整你的配置。

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

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

软件版本约束

为避免助教和学员因软件版本不一致出现bug, 现对考核使用软件版本做出如下约束:

llvm version: 11/12
verilator version: 5.008

填写考核申请表

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

考核前准备

  1. 助教将通过考核环境自测小节中的操作,检查学生提交的代码是否符合要求
    • 若不符合要求,则在考核申请表中反馈,要求学生进行整改
    • 若学生提交的代码、git log、学习记录三者不一致,助教有权不予安排考核;若三者严重不一致,助教有权向项目组建议将该学生加入失信名单,项目组将仔细评估
  2. 学员应在提交考核申请之前,做到以下几点
    • 若使用虚拟机,请将配置修改为大于等于4G内存+40G磁盘空间

正式版考核冷静期

冷静期试用阶段结束, 从2023/3/1开始, 进入正式执行阶段. 随着一生一芯报名人数逐渐增加, 流片的同学人数也逐渐增加, 但助教人数有限, 望大家珍稀每次考核机会, 严格执行考核冷静期安排. 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次考核
    • 某学生在第t+5周参加完第5次考核,则他最早可在第t+9周参加第6次考核
    • 考核次数>5次,均需在4周后参加考核
  2. 助教在代码仓库中注入3个错误,涵盖软件、硬件和环境(包括构建脚本和仿真环境等), 但不会在仙剑、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. 助教每周安排线上调试考核(每人45分钟),每次考核一名监考人(注入bug的助教与监考人不一致)
  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. 学生需要解决3个bug, 并在NEMU和NPC中完成指定操作(见下一小节“正确性判定”)。若在指定时间内完成所有指定操作,视为考核通过;
  10. 学生运行成功时,助教需要检查环境变量的值是否指向考核环境(即注入错误的项目); 若学生无意在环境变量指向原项目的情况下(如重新打开了终端但未运行source exam-init.sh)成功运行, 助教应提醒学生,此次成功运行将不作为考核通过的依据;
  11. 在考核过程中,若学生提前退出腾讯会议(误操作或由网络问题等原因导致),助教应终止该次考核,考核结果视为无效,并重新安排一次新的考核;若学生连续两次考核均出现提前退出腾讯会议的情况,将视为学生参加完一次考核且结果为不通过;
  12. 考核结束时,学生退出腾讯会议,助教停止录屏。

正确性判定

请依次进行如下操作:

  1. 注释navy-apps/apps/pal/repo/src/main.c的第471和第472行,跳过SOFTSTAR商标动画和群山飞鹤动画
  2. 手动通过“旧的回忆”选择并读取指定的4号存档
  3. 进入存档后触发战斗,分别控制我方任意2名角色普通攻击任意敌人
  4. 看到我方角色第2次攻击敌人时的伤害数字后视为正确

考核后

  1. 助教对考核情况进行综合评价后,在3天内将考核结果告知学生
  2. 学生通过考核后,助教将该学生添加至后端小组的白名单,学生可开展SoC对接工作
  3. 若学生未通过考核,可再次申请考核,但前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周
  4. 参与考核的学员禁止泄露考题和考试细节,否则视为违规,警告一次。
    已经参与过考核的同学,如果被人询问考试细节,必须向助教汇报,记询问者行为不端,警告一次。

最终解释权

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