8102 年捣鼓着寻思着就过去了,陆续看了网易云音乐、哔哩哔哩以及支付宝出的个人年终报告,尤其是网易云的报告,激起了漫漫回忆。从18年初一直到18年6月,这段时间一直处于持续的高压状态,期间一直循环着 yousa 的歌,一边生疏地用着调试工具调试着内核,感觉没多久前的事情,现在都感觉有点陌生了。时间冲淡了点点滴滴,再次一一回忆起来,这一年做了什么、有什么遗憾、成绩与不足、经验与教训、计划完成情况、新一年的计划....,整理归档一番还是很有必要的。那么接下来就照着下面的顺序来顺一顺。

  • 已完成或正在进行的工作
  • 吸取的教训
  • 遗憾与不足
  • 2019 年全年计划

20181130202366.png


已完成或正在进行的工作

解读 LightNVM 的源码并将它移植到 UFS 上用于原型验证

说起来这个项目的完成度并不算高,项目从 2017 年 5 月就开始前期调研,先是看论文,然后是读源码。从存档记录来看,解读的第一个版本的 LightNVM 源码还是 Linux-4.9 上的。之后分别解析了 4.10、4.12、4.13、4.14、4.16 以及 18 年九月份的 4.19。除了详细解读 LightNVM 的源码,顺便还简单的看了看 NVMe、SCSI、UFSHCD 驱动的源码,查阅了 UFS 和 SCSI 的协议文档。

在编码阶段,师兄 @李棋 负责在 Qemu 上仿真一个 UFS 设备,我则负责 host 侧,将 LightNVM 的 NVMe 驱动相关层移植到 SCSI 上,主要工作就是做一个 NVM Command 到 SCSI Command 的转换。在 SCSI 的上层创建了一个转换层,同时修改了部分 SCSI 和 UFSHCD 的代码,用于检测 UFS 设备对 Open-Channel 的支持以及当支持时加载 LightNVM 模块。

之后又分析了 Femu 上关于 Qemu 的 NVMe 仿真扩展的实现。在当期 Qemu 版本实现的 NVMe 中,并没有去模拟设备读写时延等特点,所有请求都是直接操作完内存后,就返回操作结果,Femu 则模拟了读、写、GC 等操作导致的时延。就这样到了四月五月,该项目结束。

块层 FIOS 调度器的实现

大概是在五月份,我正在归档 LightNVM 那个项目的文档和源码,导师发来一篇论文,并让我想想能不能在上面作文章,于是这个 FIOS 调度器的项目就开始了。同样的,先做前期调研,包括论文精度、块层源码分析、CFQ 调度器的源码分析等。这次分析源码就感觉顺手的多,最后实现了三个版本:基于 CFQ 修改得到 FIOS1、基于 CFQ 的删减版本修改得到 FIOS2、从头实现一个 FIOS3。其实是先有 FIOS1,然后发现很烂,于是精简了原生的 CFQ 变成了 FIOS2,然后发现 CFQ 存在很多对 SSD 而言无用的操作,比如计算寻道时间等,于是 FIOS3 就出来了。最后在两块 SSD 上跑 trace,还跑坏了一块。

帮助一家私募构建程序化交易系统

这个事情还得从 18 年春季说起,因为有两门课程涉及到数据处理,正巧贸易战打响,手上正好有以前抓取的股票和期货数据,于是就用这个数据进行一波数据挖掘分析,可能是题材比较新颖,给同学们留下了比较深刻的印象。7 月底接到一个电话联系我,希望能够帮助一家私募开发程序化交易系统。女朋友是金融那边的,所以从本科开始耳濡目染顺便系统地去学习过一波金融学相关学科,于是自信心蜜汁爆棚,开始飘了。

  • 低估了开发难度
  • 暑期不是很忙,只有一个 FIOS 的实现需要做
  • 对计算机与金融的交叉领域比较感兴趣,想知道业内都在忙什么
  • 赚点外快填肚子

基于以上四点,便以兼职实习的身份接手了这个项目,开始全权负责开发工作。内盘基于 CTP 接口,外盘基于 Esunny 接口,界面用 Qt 构建程序化交易系统。起先的 deadline 定在 9 月初,而最后完成的时间在 11 月。

OPTSP:开源期货程序化交易系统

暑期开始的程序化交易系统开发,加了很多 CTP 和 Esunny 的开发群,发现几乎发言的都是非计算机从业人员,他们的开发周期非常长,通常以年计,于是便萌生出了这个项目。将交易接口封装,并提供一个丰富的显示界面,策略开发者可以采取三种方式添加交易策略:

  • 直接在源码中继承并实现策略接口
  • 将策略实现为 dll 插件并加载到交易系统中
  • 用任意语言实现策略接口并通过 socket 与 OPTSP 进行数据交互

此外 OPTSP 还应该提供 tick 数据的同步,目前的想法是参考 IPFS 设计一套分布式去中心化的同步方案。如此一来交易者就可以集中精力研发策略,并能够快速的使用 Python 或其他熟悉的语言进行模拟或实盘交易,追求更高性能的交易者还可以实现成 dll 以插件的方式加载到 OPTSP 中。


吸取的教训

  • 在实现一个项目前,应该花时间做好设计,按照软件工程的规范写各个阶段的报告,最后再根据设计进行编程实现;
  • 在有设计文档的前提下,再去正确合理地评估工作量,可能实际上的工作量要比看完需求书后脑海里估计的工作量大得多;
  • 如果内心排斥做某件事情,但是又必须做时,不能拖,先去做十分钟,沉浸进去后,排斥感就会少很多很多;
  • 坚持写作,坚持写周报,精确地记录一周所做的事情、遇到的问题、解决问题的思路;
  • 减少刷知乎、逛论坛的时间,提高工作效率,若有必要,关闭微信和 TIM 的图标闪烁;
  • 要经常进行数据的冗余备份;
  • 鸡蛋不要放到一个篮子里,要经常关注科技和金融领域的资讯;
  • 注意身体,尤其是颈椎。

遗憾与不足

一年里头总会有那么两个时间段,短则一周长则一个月,无法专注下来做事情,在已经过去的 18 年,也有两个这样的时期。考虑着不切实际的事情,患得患失,又想要把握所有东西,做不到自然就会消沉。就是这种想要求得最优解的想法,反而让自己陷入计算不出结果的窘境;适当放弃些东西,才能以退为进。

18 年的第一个遗憾,应该是没有去考驾照。早在 17 年春,过完春节后返校,就早早的去报了驾校,并且一鼓作气走到了科二;之后要准备考研复试,所以就搁浅了。复试完后,早早的就进了导师的课题组,鼓足了干劲到处乱拱。这样一拖就拖到了现在,科二仍然没有过。暑假那段时间本来有空闲时间,却忙别的去了。接下来只会更加忙,大概这辈子都拿不到驾照了。

18 年的第二个遗憾,遗憾的我都不知道咋写了......


2019 年全年计划

专业内容

  • ↺ 分布式存储相关论文解读
  • ☐ IPFS 深入调研及源码解析
  • ☐ IPFS 及 FileCoin 节点部署
  • ☐ CEPH 理论及源码解析
  • ↺ 开题报告及毕设论文项目

开源项目

  • ☐ OPTSP 期货程序化交易项目
  • ☐ Phil.Engine 游戏引擎
  • ☐ Lisp 方言编译器
  • √ 基于 Initial 的 typecho 主题个人向修改
  • √ typecho 功能个人向重构与添加

基础复习与编程练习

  • ☐ 编程语言语法基础与语言特性学习

    • ↺ Go 语言学习
    • √ PHP 语言学习
    • ☐ Lisp 语言学习
    • ☐ Haskell 语言学习
    • ☐ OpenGL 学习
  • ☐ 源码分析练习

    • ☐ Linux 源码分析训练
    • ☐ NVMe 源码解读
    • ☐ glibc / kernel / gpg 随机数源码分析
    • ☐ glibc / slab / jemalloc 内存管理源码分析
  • ☐ 基础理论知识学习

    • ↺ Linux 内核理论知识
    • ☐ Linux 驱动开发学习
    • ☐ 机器学习算法基础与应用练习
    • ☐ 数据挖掘算法基础与应用练习
  • ☐ 基础理论知识复习

    • ↺ 算法与数据结构基础
    • ☐ 操作系统基础
    • ☐ 计算机网络基础
    • ☐ 体系结构与组成原理
  • ☐ 造轮工艺

    • ↺ C-like 编译器
    • ☐ Docker 容器
    • ☐ 游戏引擎
    • ☐ 内存管理器
    • ☐ 静态服务器程序
    • ☐ 代理程序
  • ☐ KGDB 与 GDB 工具学习
  • √ 练习盲打
  • ↺ LeetCode 刷题

人文社科与生活

  • ↺ 英语六级
  • ☐ 日语 N2
  • ☐ 年度报表解读分析
  • ↺ 驾照
  • ☐ 经济学金融工程理论

    • ↺ 微观/宏观/会计学原理/货币银行学/公司金融/投资学
  • ☐ 量化模型与策略
  • ⊠ 期从/证从
  • ⊠ 素描

(完)