Skip to content

OSCPU/ysyx-exam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

在线调试考核简介

助教将会每次在你提交的代码仓库中随机注入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 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运行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. 参与考核的学员禁止泄露考题和考试细节,否则视为违规,警告一次。
    已经参与过考核的同学,如果被人询问考试细节,必须向助教汇报,记询问者行为不端,警告一次。

最终解释权

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages