Xen 与 KVM 的 hyprvisor 讲解
虚拟机主要包括四个方面的模拟, cpu, 内存, 中断, io
虚拟机模拟的原理最重要的就是陷入 (trapping) 模拟, 也就是当虚拟机执行一些敏感指令时会陷入kvm, 由kvm负责模拟, 完成后返回客户机
当前主流 (2025) 的虚拟化发展趋势是 Xen -> KVM
Xen 虚拟化基本原理
是一个直接运行在计算机硬件之上的用以替代操作系统的软件层, 它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS)
Xen对虚拟机的虚拟化分为两大类, 半虚拟化 (Para virtualization, PV) 和完全虚拟化 (Hardware VirtualMachine, HV);
半虚拟化 PV
允许虚拟机操作系统感知到 自己运行在Xen Hypervisor上而不是直接运行在硬件上, 同时也可以识别出其他运行在相同环境中的客户虚拟机
为了调用系统管理程序(Xen Hypervisor), 要有选择地修改操作系统, 然而却不需要修改操作系统上运行的应用程序
完全虚拟化 HV
又称"硬件虚拟化", 简称HVM, 是指运行在虚拟环境上的虚拟机在 ...
5. sed 指令
Overview
sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
Usage
1sed [-hnV][-e <script>][-f <script file>][text file]
Arguments
-e<script> / --expression=<script> : 直接在命令行中指定要执行的脚本 (script, not file) 来处理文本文件
-f<script file> / --file=<script file> : 从指定的脚本文件中读取 sed 脚本
-n / --quiet / --silent : 抑制默认输出行为,只输出经过处理的行
Action
a 新增,a 的后面可以接字符串,内容会出现在当前的下一行
c 替换,c 的后面可以接字符串,内容会替换 n_1 到 n_2 之间的所有行
d 删除,删除当前行, 不接任何字符串
i 插入,i 的后面可以接字符串,内容会出现在当前的上一行
p 打印,打印当前行, 不接任何字符串,通常和 -n 选项一起 ...
4. awk 指令
语法
1awk options 'pattern {action}' file
options 选项, 用于控制 awk 的行为
-F 指定输入字段的分隔符, 默认是空格m 可以指定不同于默认分隔符的字段分隔符
-v <key>=<value> 定义局部变量, 可以在脚本中使用
-f <file> 从指定文件中读取 awk 脚本, 允许将脚本存储在文件中而不是命令行
pattern 模式, 用于匹配输入数据的模式, 如果省略则对所有行进行操作
就是 regex 匹配语法
{action} 选在匹配到模式的行上执行的动作, 如果省略则打印整行
打印操作, 纯字符串打印是 print, 打印对应变量是 printf "%10d", var, 10 表示宽度
对于变量支持 += 等 c 语言运算符, 也可以有 for/if 等语句遵循 C 语言语法
内建变量 (可以直接用也可以手动改变)
$0 当前行的全部内容
ERRNO 上一个系统调用的错误信息
FS ...
3. 正则表达式
浙江信息技术高考的时候有一个概念, 在 excel 中可以通过 ? 来匹配一个字符, * 来匹配多个字符;正则表达式拥有比 ?和 * 更强大的功能, 能够匹配更复杂的字符串模式;
简介
正则表达式具有几类字符类型
元字符
元字符具有特殊的含义, 例如 \d 匹配任意数字字符, \w 匹配任意字母数字字符, . 匹配任意字符(除了换行符)等
量词
* 匹配前一个字符零次或多次
+ 匹配前一个字符一次或多次
? 匹配前一个字符零次或一次
{n} 匹配前一个字符恰好 n 次
{n,} 匹配前一个字符至少 n 次
{n,m} 匹配前一个字符至少 n 次, 不超过 m 次
字符类
[ ] 匹配括号内任意一个字符, 例如 [abc] 匹配 a, b, c 中的任意一个字符
[^ ] 匹配不在括号内的任意一个字符, 例如 [^abc] 匹配除 a, b, c 以外的任意一个字符
边界匹配
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配单词边界
\B 匹配非单词边界
分组和捕获
( ) 用于分组, 可以将多个字符组合在一 ...
4. Process Control
进程空间的组件 Components
kernel 空间的组件大致如下:
process address space map
process 的当前 status
process execution priority
当前 process 使用的 memory/cpu 的量
当前 process 打开的文件和 network port
process signal mask (record of which signals are blocked)
owner of the process
PID: process ID number
每个进程都有一个 kernel 赋予的 唯一 id
pid 是按照从小到大的顺序一一分配的
PPID: parent PID
unix 系统创建一个新的进程的时候并不是直接运行一个指定的 program, 而是分为两步
一个已有的进程必须 clone 自身来获得一个新的 process
新的进程执行新的 program
PPID 就是子进程指向父进程的
这个 ppid 大多是用来解决一些未识别的 进程的来源问题, 用来辅助 tracing
UID ...
2. Shell 脚本的语法
固有变量
$# 传给脚本的参数数量
$0 脚本的名称 (包括调用的指令路径)
$1 第一个参数
$@ 传递给 shell 脚本的所有参数, 作为一个整体
${@:2} -> $2 $3 $4 …, 再拼成一个整体 (默认以空格连接)
$* 传递给 shell 脚本的所有参数, 作为一个字符串
${*:2} -> $2 $3 $4 ..., 再拼成一个字符串 (默认以空格连接)
$$ 当前脚本运行的 PID
$? 上一个命令的退出状态, 0 表示成功, 非 0 表示失败
数组的定义
shell 中支持数组的定义, 语法如下
1array_name=(value1 value2 value3 ...)
也就是在一系列通过常见分隔符(空格, 换行, 制表符) 分隔的值的括号中定义一个数组;
与 grep 等文本指令合作, 可以将文本文件的每一行读入到数组中, 也就是在外面加上一个 ($(grep 'pattern')) 就行 -> 这里的目的是通过 for 直接访问数组的每一个元素
同样的, 可以通过 @ 来访问数组的 ...
7. Gray Failure the Achilles' Heel of Cloud-Scale Systems
Introduction
这篇文章系统性地提出并定义了云计算系统中的"灰色故障"(Gray Failure)问题, 认为它是当前云基础设施高可用性的一大障碍
gray failure
component failures whose manifestations are fairly subtle
and thus defy quick and definitive detection
系统某部分发生了轻微但持续的问题, 这些问题不易被传统故障检测机制发现, 但已经影响了应用层的性能和可用性;它不同于"失败即停" (fail-stop) 故障, 后者更易被监测和处理
Gray Failure的特征
Differential Observability (差异性可观测性)
对于 gray failure, 不同的组件对于同一个问题的感知是不同的,
尤其是一个实体受到消极影响但是其他实体感受不到这个影响
检测模块可能认为系统还是健康的, 但是实际上应用已经受损
Cloud Anomalies with Gray Failure
High redund ...
6. Fail Stutter Fault Tolerance
Introduction
背景问题缺陷
Byzantine 模型假设组件可能出现任意错误甚至恶意行为, 过于复杂难以实施;
Fail-stop 模型假设组件要么正常工作, 要么完全停止, 虽然简单易用, 但忽视了现代硬件中常见的"性能故障";
本文特点
Fail-Stutter 模型: a realistic and yet tractable fault model that accounts for both absolute failure and a new range of performance failures common in modern components.
引入了一个更现实但可操作的故障模型, 结合 fail-stop 和"性能故障"(performance faults);
性能故障指的是组件虽然没完全失效, 但表现不稳定或变慢, 如磁盘速率下降, 缓存命中率降低等;
这种模型认为组件既可以"失败", 也可以"卡顿"或"表现异常";
需要的模型性质 ( ...
5. Fail-Slow at Scale
Introduction
这篇论文 Fail-Slow at Scale: Evidence of Hardware Performance Faults in Large Production Systems 由Haryadi S. Gunawi等人发表在第16届USENIX文件与存储技术会议(FAST 2018)上
系统性地揭示了在大规模生产系统中"fail-slow"(故障-缓慢)硬件现象的存在与影响;这类故障指的是硬件仍在运行, 但其性能严重退化, 未达到应有的标准;
硬件类型包括:
disk, SSD
CPU
memory
network components
几十年来, 系统领域已经形成了如下成熟的硬件故障模型 (fault model)
• Fail-stop(故障停止): 设备完全停止工作并发送明确的错误信号;
• Fail-partial(部分失效): 设备部分失效, 部分功能仍然正常;
• Fail-transient(瞬时性失效): 偶尔出现错误但会自行恢复;
• Corruption fault(数据损坏) 和 Byzantine fau ...
1. Kubernetes 核心概念
本篇文章参考了知乎笔记, 只做格式整理
如何区分 apiVersion
v1: Pod, Service, ConfigMap, Secret, Namespace, PersistentVolumeClaim
apps/v1: Deployment, StatefulSet, DaemonSet, ReplicaSet
accessMode 访问模式
ReadWriteOnce (RWO): 只能被单个节点挂载读写
ReadOnlyMany (ROX): 可以被多个节点挂载为只读
ReadWriteMany (RWX): 可以被多个节点挂载读写
ReadWriteOncePod (RWOP): 只能被单个 Pod 挂载读写, 是在 Kubernetes 1.22+ 和一些 CSI 驱动下才支持的模式, 保证同一卷只能被同一个 Pod 读写, 即使 Pod 在不同节点重调度也不允许与其他 Pod 并发访问
Service 服务
内部服务: 通过统一的接口来访问一组 Pod, 使得 Pod 的 IP 地址可以动态变化, 而不影响访问者的使用 (对访问者透明)
外部服务: 通过统 ...
