爱锋贝

 找回密码
 立即注册

只需一步,快速开始

扫一扫,极速登录

开启左侧

盘点CMU SCS计较机学院的硬核系统课

[复制链接]
发表于 2023-4-10 22:31:46 | 显示全部楼层 |阅读模式

一键注册,加入手机圈

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
开篇

工夫如梭, 白马过隙. 在北美著名技校的两年读研工夫很快就要曩昔. 临结业前夜, 想要来记录盘点一下本人上的SCS计较机学院下的15-XXX开首的硬核系统课, 为后来者供给一些先容和看法. 两年下来, 虽然本人也委曲算是本科CS科班身世, 可是本科的课程和在CMU这里感受难度上天地之别, 也算是回炉重造"转码"了.
实在项目一初步的时辰我选的是Analytics机械进修标的目标, 但学了一学期结果断决议半路跳车去学System系统标的目标. 原本三学期就可以结业了, 愣是为了把System Track想上的课上完多在匹村带了一学期. 做决议的时辰实在心里也有过挣扎: 真的有需要学这些课吗? 究竟现在的北美市场找工作只要会做Leetcode就行, 剩下就是看命和命运.
但也许是由于年轻, 我的不雅概念也许是错的. 我总还是感觉有些工具只要在黉舍里才能静下心来学踏实了, 未来才能在技术的门路上走得顺遂走得久远. 未来要工作20年, 30年, 在此之前多花一学期的时候踏实根抵应当还是不亏的. 希望如此吧!
15-513 Introduction to Computer Systems

版本: Spring 2022
传送门: Introduction to Computer Systems
性质: 公然课
编程说话: C
小我评分: ★★★★★
课业压力: ★★★★☆

这门课即是网上无人不知无人不晓的计较机系统入门神课, CSAPP这本书的配套课程. 在知乎上我看到过好多同学自学CSAPP并做这门课配套的lab, 以及对一些lab的详解, 进修氛围很是浓厚.
课程的内容主如果针对现在计较机系统的一个比力普遍, 但点到为止的先容. 其中的一些焦点概念包含:

  • 字节码的底层暗示
  • 汇编说话的了解
  • x86架构的指令履行
  • 内存机关与计划
  • 硬件缓存与战略
  • 虚拟内存的架构实现
  • 信号、中断、异常
  • 根抵收集通讯
  • 根抵并发编程
Labs主如果以C说话为主, 都是单人project, 其中attack labbomb lab是人眼分析解读汇编并写输出.

  • data lab是热身lab, 熟悉一下各类位运算的小tricks
  • cache lab是写一个in-memory cache
  • malloc lab是在一个虚拟出来的heap上分派打点内存, 需要由简到难慢慢实现implicit list, explicit list 和 segregate list 外加一些mini-block打点的优化. 是一切lab里代码量上最多的一个, 大要得有1500-2000行左右最初.
  • shell lab是要实现一个terminal, 能支撑前端/后端运转指令. 这个lab是小我感觉最诡异的一个, 由于自己对signal信号不是很了解, 做的时辰有点懵懂, 犯了好多race condition的错. 但实在做完后吧, 还是感受对signal信号有点心里发怵, 敬而远之.
  • proxy lab是要实现一个座落于client和server中心的收集代理层来停止缓存, 加速效力器的响应时候. 这个lab实在是比力轻松的, 由于底层套接字socket都被供给的starter code封装好了, 很洪流平上调包就完事儿了.
整体而言, 小我感觉这是来CMU凡是学计较机相关的专业, 绝对值得一上的神级根抵课. 很多时候感受, 上和没上过这个课是一个"有无底子系统常识素养"的分水岭.
15-619 Cloud Computing

版本: Spring 2022
传送门: CMU 15-619 Spring 2020 Home Page
性质: 封锁课
编程说话: Java & Python
小我评分: ★★☆☆☆
课业压力: ★★★★★

这门课是15学分的云计较导论, 实在对他的评价是比力冲突的. 一方面来说, 这课给我带来了在CMU最狠的熬夜的一学期, 做team project的时辰经常是一周和队友一路熬大夜: 午时12点在自习室调集, 坐牢坐到第二天早上4、5点太阳出来了再分隔回家睡觉. 这样的日子一周能有两三天 (要夸一下我的两个队友都是仙人队友, 一路干活绝不轻率都尽心尽力). 另一方面来说, 这门课的team project真的是很是踏实, 是那种可以写在简历上和口试官好好吹嘘一番的有深度的感受. 但实在现在感受, 课上很多搞设置的那些常识又忘记的差不多了, 能够今后重新需要的时辰可以快一点的pick up.
先说一下每两周一个的单人individual project:

  • AutoScaling: 让你用Amazon AWS的Java或Python API集来监考你的cluster的workload, 假如高了就要加机械, 假如低了就要减机械, 最初按照满足的requests数目和VM的时候总和来算分. 中规中矩的一个project, 代码量却是很多, 需要认真的阅读Amazon AWS的API手册
  • Web Tier: 这个project主如果让我们熟悉Web的分歧tier的机关和利用Helm来操纵K8S cluster. 终极是需要为了容灾的斟酌, 把效力器同时安插在Microsoft Azure和Google GCP的云上, 并分流. 还是比力让人开眼界的
  • Database: 这个project是让我们练习分歧的database. 从一般的relational的MySQL初步, 然后是NoSQL的HBase, 最初是GraphSQL. 感受还是比力风趣的, 工作量中等
  • Large-Scale Processing: 这个project是让人用Spark做一个PageRank的算法. 要求用Scala完成. 很是的简单, 代码加起来不跨越50行就能做获得. 之前从没用过Scala, 稍微看了一会儿入门手册, 函数式编程却是让人感受有点意义.
  • Kafka/Samza: 这个project是让人操纵流式Streaming数据的. 具体的是说有一个打车软件, 你需要实时婚配乘客和司机并更新大师的位置. 纯调Apache Kafka和Samza的包, 题目不是很大, 还算挺成心机的.
  • Machine Learning: 没做. 只需要完成6个projects里的5个, 由于我前5个都做了, 这个间接跳过没做.
再来说说噩梦般team project:
三人组队. 这个project一共分三个阶段, 会先让你写出3个microservices然后优化他们的暗示, 安插在AWS上用分歧的设置和容器. 在阶段二和阶段三的时辰分袂有一小时的live test来横向比力一切team的暗示来排名, 排名高的有extra bonus points. 这个team project大部分时候都在试错, 由于从零初步安插一个Service会需要履历各类百般奇异的题目: Docker build不起来, build了但跑不了, load balancer连不上网, load balancer出格慢, database连不上, database disk I/O太高被AWS卡住了, etc. 每一步都是血与泪与熬大夜的履历经验所得. 很多时辰很是气人的是, 在piazza上假如你去提问问助教题目, 助教要末是不答复你, 要末是答复得牛头分歧毛病马嘴, 大概干脆谜语人说不能告诉你要本人去向置. 很多时辰真的是看了piazza感受生气得就地要脑淤血昏曩昔了.
幸亏在三人一路熬了一学期尽力下, 最初我们的team project还算是成功, 在二阶段和三阶段都分袂拿下了全班前三的成就 (实在发现前几名底子上满是同届的MCDS的同学, 由于这是必修课).
整体来说, 我感觉这个课实在是比力综合的, 并不是很上来大师一来CMU就间接上. 我有传闻此外学院转码的同学一来就选这门课, 说是由于这门课是online的所以没有SCS名额限制才能选的上. 我感觉这个是比力误区的, 一上来就上这个课会让你的一学期生活很是悲凉和倍受冲击, 我感觉大可不必. 假如是为了了解一下云计较方面的常识, 我感觉上本科版本课号的15-419就可以, 由于本科版本不需要做team project, 那样的话体验还是会更不错的.

盘点CMU SCS计较机学院的硬核系统课-1.jpg

阶段三的终极排名, 我们组叫ThreeCobblers, 寓意三个臭皮匠顶一个诸葛亮

15-645 Database Systems

版本: Fall 2022
传送门: CMU 15-445/645 :: Intro to Database Systems (Fall 2022)
性质: 公然课
编程说话: C++
小我评分: ★★★★★
课业压力: ★★★☆☆

这也是一节著名火爆的数据课标的目标的公然课, 网上也有很多人自学做labs. 之前写过一篇关于这门课的文章, 可以移步:
整体而言是很是好评的这节课.
lectures来说, 教授Andy他是真的懂数据库的, 讲得很是清楚, 课上还经常会间接terminal翻开mysql, sqlserverpostgres初步demo做演示. 焦点内容包含:

  • 数据存储形式与紧缩
  • 哈希索引和B+数索引
  • 并发打点算法
  • 排序、调集、Join的分歧算法
  • Two-Phase Locking
  • Timestamp Locking
  • MVCC
  • 故障规复
  • 散布式数据库简介
labs来说, 这节课BusTub的labs自成一体, 单人projects, 拔取4个比力重要的compoents让同学实现. 我上的这个学期分袂是:

  • P1 (缓冲池 Buffer Pool Manager): 为了更好的打点磁盘页和内存页之间的映照同步, 要务实现可扩大哈希表(Extensible HashTable)LRU-K置换算法
  • P2 (B+ Tree Index B+树索引): 为了更快地检索和遍历数据表中的大量数据, 要务实现了一个支撑并发的B+树索引迭代器
  • P3 (查询履行 Query Execution): 为支撑SQL查询(最新版的BusTub增加了根抵SQL语句的Parse和Query Planning), 要务实现了顺序扫描,索引扫描,插入,删除,投影,过滤,嵌套循环join,索引join,哈希join,聚合,排序,limit,top-N等焦点履行功用
  • P4 (并发事务打点 Lock Manager): 为了打点并发事务, 要务实现资本锁打点器来按照分歧的事务授与/阻塞资本锁哀告.它支撑READ_UNCOMMITED,READ_COMMITTEDREPEATABLE_READ作为事务隔离级别和分层的资本锁
小我感受, 从难度来说P2 > P1 = P4 > P3. 不晓得为什么, CMU很少课是用C++的, 要末是C要末就是Python. 所以这节课还可以练习一下Modern C++, 感受还挺珍贵的. labs都是在gradescope上自动评分的, 可以无穷次提交. 而且TA的回答题目很是到位和敏捷, 赐与很大的辅佐 (和上面15619组成了明显的对照). 而且数据库这个概念自己, 在实操中就非经常用,所以我感觉在众多15-XXX系统课里是属于优先级比力高需要上的.
此外, 这节课的gradescope有个排行榜, 一学期下来累计在排行榜上排名高的, Andy会发一件BusTub短袖衣服. 穿着这衣服在CMU校园里逛的时辰可神气了!

盘点CMU SCS计较机学院的硬核系统课-2.jpg
15-641 Computer Network

版本: Fall 2022
传送门: Networking and the Internet, Fall 2022
性质: 封锁课
编程说话: C
小我评分: ★★★☆☆
课业压力: ★★★☆☆

计较机收集也算得上是计较机教育系统里很是根抵的课程了. 在本科阶段我没选上计较机收集的选修课, 所以心里不竭有点遗憾念道着这门课, 来CMU强行拉着我的队友总算圆梦了. 这门课人数挺少的, 在一个小课堂里上大要30,40小我, 并不算是一门热门的SCS系统课.
教授Justine Sherry's Homepage 比力的滑稽滑稽, 很典型的美国白人女孩儿气概, 上课还会给大师带糖吃. 课程的内容实在还比力分离, 大要2~3节lectures就能讲完一个话题. 焦点概念有:

  • 链路层: Routing算法(Distance Vector, Linked State Routing, SDN)
  • 收集层: IP Routing, Ipv4/6, Subnetting, BGP算法, Gao-Rexford条件
  • 传输层: UDP, TCP(三次握手四次挥手, 阻塞调控)
  • DNS, CDN, 视频传输的BBA算法
  • TLS, 对称与非对称性加密传输, 安好认证
  • 收集虚拟化
这节课一共有3个双人组队labs的, 实在内容自己还算比力的风趣solid, 唯一不敷的地方就是自动评分的gradescope经常有bugs, 比如它卡时候卡的很是紧, 你一个包非得在1秒到2秒之间到, 你0.8秒和2.2秒都算你错, 而且gradescope掩掉了stdout所以你并不晓得究竟是那里出了题目, 究竟是代码crash了还是只是纯真的和他的要求不符等. 具体的3个labs内容包含:

  • mixnet安好夹杂源路由:为了在收集合实现安好通讯,Mixnet实现了链路层(Linker Layer)的报文路由的加密,重定向夹杂, 以避免收集合的窃听者. 从天生树协议(Spanning Tree Protocol)来构建收集拓扑, 并用Dijkstra最短路子加上夹杂路由来传包
  • TCP Protocol: 间接了当, 请实现个TCP协议. 使得可以在两头用户之间建立双向有序牢靠的数据传输, 是收集模子机关中传输层的一个协议. 要点包含:三次握手四次挥手(SYN/FIN),数据块排序重组(stream reassembl),流量控制(滑动窗口),重发机制(指数抵偿),状态转换(有限状态自动机), 等
  • Http: 分袂实现HTTP server和client. 效力器端剖析和考证HTTP哀告, 并支撑GET,HEAD,POST方式且能I/O复用同时效力多个客户端. 客户端会按照依靠关系构建图, 并为单个客户端实现流水线多哀告和并行毗连, 以获得更好的性能
这节课实在在一切SCS系统课里, 并算不上是优先级出格高的课. 大部分人的工作中, 对计较机收集有个大致的了解实在就可以了, 很多细节最多只能算是如虎添翼的good to know.
但我小我somehow很是喜好这些计较机收集的话题内容. 在十仲春份结课后的圣诞节, 我决议把这节课的labs的内容合起来规整一下做成一个本人的项目 -- 一个轻量的C++收集库. 延续更新中, 现在github已经汇集了100颗星星✨. 我在知乎也有直播这个项目标进度, 希望有爱好的同学可以关注并star一下我的Turtle.
15-640 Distributed System

版本: Spring 2023
传送门: Distributed Systems
性质: 封锁课
编程说话: Java为主
小我评分: ★★★
课业压力: ★★☆☆

这门640散布式系统应当是很多来CMU上课的同学的心中梦课了. 它有两个版本, 春季很潮水是用Go来做labs, 春季比力复古是C(1个project)和Java(3个projects).
教授Satya 资历很是老, 是上个世纪80,90年月主导编写CMU的andrew file system的主力军. 他的lectures气概是那种, 一节课80分钟只讲了10页PPT但却让你听的津津有味的范例. 我小我感觉这类气概挺不错, 把要讲的工具都讲的很清楚, 虽然也有此外同学感觉讲的太慢了. 不外能够是由于上过很多系统课了的话, 并没有感觉在这门课里学到很多新工具, 大多时辰都更像是一种温习. 焦点概念包含:

  • 散布式系统的历史与演进
  • 收集通讯的不稳定性对散布式系统带来的应战
  • RPC与实现
  • 缓存和Prefetching的重要性
  • 散布式系统中各类毛病的能够性与防御
  • 系统扩容
  • 散布式共鸣协议: Two-Phase Commit, Quorum, Paxos
  • 散布式系统的安好
一共有4个单人project, 前两个代码量稍微大一些, 前面两个好做一些. 内容分袂是:

  • (C) 文件rpc远程进程挪用: 用TCP Socket实现rpc call来"重载"一系列底子的如open, write, read, lseek, close等system call使得这些指令被传输到远程机械上履行并打包返回. 效力端可以并发地处置对分歧文件停止操纵的多个客户端, 并往返序列化/反序列化参数和毛病码. 比力踏实和tedious的一个project, 让人深化的大白写rpc的stub是何等的省事, 所以在现实生活中应当尽能够去调现成的rpc的包
  • (Java) 散布式文件缓存代理: 多个客户端可以毗连到一个当地代理; 多个当地代理可以毗连到一其中心效力器. 文件缓存供给翻开文件时会话语义的分歧性(session-semantics consistency),并利用Check-On-Use方式保证缓存的新奇度
  • (Java) 自扩容与缩容: 这是我小我感觉比力无聊的一个project. 它用Process来模仿VM, 然后会不竭的给你的Server发哀告, server需要按照当前的流量决议能否需要扩容大概缩容. 和15619的第一个project很是的类似. 但有点搞笑的是, starter code里给了一些library 是 java class的形式, 可是用现代IDE比如IntelliJ翻开后, 可以间接反编译读到一些重要变量的值, 比如一个request需要多久履行, 前后端process所需要用时等等, 间接就能很简单的计较出需要几多的VM了. 我很狐疑教师能否是以为给大师一个Java class而不给源码大师就看不到这些值了
  • (Java) 散布式事务-两阶段提交: 这个就是比力典型的Two-Phase Commit的实现. 在阶段一中, 主节点向每个介入节点提失事务, 希望获得分歧赞成. 在汇集完一切介入者节点的投票后, 主节点做出终极决议(提交Commit或中断Abort)并进入第二阶段, 将该决议分发给每个介入节点. 为了应对各类能够的故障, 主节点和介入节点都利用预写式日志(Write-Ahead Logging)来实现状态持久化息争体规复. 整体比力的直不雅观, 很快就能写完. 感受autolab的test case实在是不太全的, 稍微处置一下failure case就能过, 但我实在心里晓得某个角落里估量代码还有些小题目
整体而言, 这节课还是比力值得一上的, 特别是在假如你只能选很有限的SCS系统课的限制下, 这门课由于比力包容万象, 优先级应当比力高. 但也能感遭到课上有些同学的根抵比力亏弱, 应当是没上过15513就来上了这门课. 我是比力喜幸亏piazza上回答题目标, 但有些同学的题目实在是有点可笑让人忍俊不由, 没法回答.
15-618 Parallel Computer Architecture and Programming

版本: Spring 2023
传送门: 15-418/15-618: Parallel Computer Architecture and Programming, Spring 2023
性质: 封锁课
编程说话: C++
小我评分: ★★★☆☆
课业压力: ★★★★☆

这门课我感觉能够是SCS 15-XXX课里对硬件讲得最多的一门课了. 在本科阶段的时辰就上过一门并行计较的, 那时对那些机械机关啥的学的迷含混糊, 在这门课里总算是都学大白了. 但这门课的workload有点大: 首先它每周要上3节lectures,  一节课可以讲上100页PPT, 快得像开飞机.  lectures上70%学期, 2次考试. 然后放你4周时候做一个final project.
课程的焦点概念很是的多和踏实, 包含:

  • 分歧的并行编程模子概述
  • GPU架构与CUDA编程
  • 同享内存并行 OpenMP, Clik
  • 进程间通讯并行 MPI
  • 调剂scheduling和locaity
  • 硬件缓存分歧性(cache coherence)的架构与实行
  • Interconnect的分歧硬件修建方式
  • 内存分歧性模子(memory consistency)
  • 邃密锁与lock-free无锁编程
  • 事务性内存(transactional memory)
  • 深度进修中的并交应用
全部学期有4个双人组队的projects:

  • ISPC: 用Intel的ispc指令集来写vectorization向量化的代码来加速计较
  • CUDA: 用CUDA来编写GPU的法式来处置一个图像处置的题目
  • OpenMP: 用同享内存的并行编程的方式来加速典型物理模仿题目N-body-simulation
  • MPI: 用进程间通讯的方式来加速同一个N-body-simulation题目
虽然我在上面轻描谈写的描写了这4个projects, 实在他们都是有很大的workload的. 首先, 每个projects都对应一种分歧的并行编程模子说话, 要写一个正确的版本已经需要花必定的功夫了, 而且每个projects的要求都很是高, 经常需要用perf和gprof去认真profile法式每一步的耗时和瓶颈在在那里, 要优化到很是极限的地刚刚能拿满分. 这点我实在不是出格喜好, 很多时辰实在只要1种特定的优化算法可以到达要求的性能, 你不竭的迭代优化提升都很是有限, 直到你终极想到了那种特别的优化算法后一会儿就柳暗花了然. 但做出来后确切是很是有成就感: 终极优化的版本能够比你写出来第一个正确的版本要快上千倍, 都是你和队友一点一点优化出来的.
学期末有个为期4周的组队final project, 任何和并行计较相关的话题都可以, 时候实在还是挺严重的没法做太大的project. 我和队友现在正在施工中, 筹算做一个线程自力行列、带工作盗取功用的threadpool来获得更好的workload balance.有爱好的话可以延续关注
整体来说, 这门课比力的底层low-level, 对硬件感爱好的同学能够会感觉很是风趣, 不感爱好的同学能够碰都不会碰. 在选课优先级上应当也不算是出格的高, 即不是出格热门的课. 对底层优化有爱好的同学可以应战一下.
遗憾

最遗憾的就是没偶然候和精神, 也许也没有胆子, 去上15-610 Operating System Design and Implementation. 这课终极的功效是你写一个操纵系统, 然后load进一个光盘里可以在一个老旧的电脑上跑起来. 在朋友圈我有看到过成功高低来的同学拍的视频, 在教授的办公室里阿谁老旧的电脑上把本人写的操纵系统跑起来的成就感.
但我没有充足的时候去上了, 假如上这门课的话能够一学期啥此外事儿都不用干了. 我们项目里有根抵很不错的同学曾应战上这个课, 最初都是期中后drop了这门课由于workload太大了, 没能完成.
立个flag: 今后得了空, 必定得把MIT那门公然课的阿谁OS lab给他写出来, 实现一下我想要本人写操纵系统的小目标.
结语

两年的工夫, 我感觉值了. 村里真的很死板无聊, "幸亏"CMU作业够多让人一路忙碌着没余暇下来.
比来假如空了的话应当会继续修修补补我的Turtle项目, 把Timer按时器做完后, 争取能在6月前第一版定型扫尾.
有爱好的小伙伴可以关注我的github: https://github.com/YukunJ 求粉求星星

-----------------------------
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-10 23:35:39 | 显示全部楼层
[欣喜]居然没上15410
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 00:40:45 | 显示全部楼层
妈的 本科时代刷到就行了[生气][生气]
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 02:18:05 | 显示全部楼层
[笑哭]气力不答应啊
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 03:41:32 | 显示全部楼层
[害臊]现在看看也不晚的!
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 05:02:51 | 显示全部楼层
恋慕可以承受这么良好的教育[赞]
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 06:24:21 | 显示全部楼层
看完受益很多,感激!
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 08:17:28 | 显示全部楼层
作者是美本吗[斟酌]
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 09:24:48 | 显示全部楼层
是滴. 看我主页~[爱]
精选高品质二手iPhone,上爱锋贝APP
发表于 2023-4-11 10:31:03 | 显示全部楼层
带我走吧 [大哭][大哭][大哭][大哭]
精选高品质二手iPhone,上爱锋贝APP
您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

QQ|Archiver|手机版|小黑屋|爱锋贝 ( 粤ICP备16041312号|网站地图

GMT+8, 2024-5-3 11:32

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表