2022年10月

legacy 体系:

SysVinit :
初始化脚本位于 /etc/init.d/,初始化脚本需要支持 start, stop, status 等命令
使用 service 命令运行初始化脚本
SysVinit 只启动一次,在之后不跟踪单个服务

新体系:

systemd 用于代替 SysVinit ,在初始化结束时, systemd 仍然作为守护进程运行。
使用 systemctlsystemd 交互,运行服务。

sudo systemctl enable [service] 开机启动服务
sudo systemctl disable [service] 不开机启动服务
sudo systemctl start [service]
sudo systemctl stop [service]
sudo systemctl restart [service]

systemd

systemd 是 boot 阶段第一个运行的 userspace 程序,在 kernel 初始化硬件后马上获得控制
systemd 通过 unit configuration file 管理资源
unit 包括 .service, .mount, .device 等文件
unit 保存在 /etc/systemd/system, /lib/systemd/system 等目录
/etc/systemd/system 优先级最高
通过 systemctl 与 systemd 交互
systemd 与 systemctl 之间通过 D-Bus 交互

journald 收集和管理 systemd 的 log
通过 journalctl 查询 log

发表于 sosp2003,经典系统工作 GFS

GFS 包括单个 master 节点。若干 chunkserver,被多个 client 同时访问

将文件分为大小固定的 chunk,每个 chunk 有一个全局唯一的 64位,由 master 在 chunk 创建时分配。
chunkserver 在本地以 linux 文件存储 chunk。每个 chunk 默认存储三个副本。

nvcc 编译过程

nvcc 编译分为两个阶段
首先将 .cu 编译为面向 虚拟架构 的 .ptx 代码 (stage1)
然后将 .ptx 编译为面向 实际架构 的 二进制代码 (stage2)

- 阅读剩余部分 -

cupti : CUDA profiling tools interface
搭建面向 CUDA 应用的 profiling 和 tracing 工具

CUDA dynamic parallelism : CDP

CUPTI 提供四种 API :

  • activity api
  • callback api
  • event api
  • metric api

CUPTI 在第一次调用 CUPTI 函数时懒惰初始化
cuptiSubscribe() : 最先调用,防止多个 CUPTI client 互相干扰

目前理解:CUPTI 分为 用户端 和 服务端, 服务端记录 CUDA 设备和 CPU 上产生的事件 CUpti_Activity,储存在 用户端提供的 Activity Buffer 上
CUPTI 不保证 activity 在 activity buffer 中的顺序
用户端 调用 cuptiActivityFlushPeriodcuptiActivityFlushAll

CUPTI 创建一个 worker thread,以减少对 application thread 的干扰

activate api

activate record : 记录事件,使用基类 CUpti_Activity
activity buffer : 将 activity record 从 CUPTI 转移到 client
使用 cuptiActivityEnable cuptiActivityEnableContext 初始化
activity kind

这是一个大坑,早晚要来填。。。

PCI BAR : base address register