/images/avatar.jpg

Kiosk Studio (2022)

虚拟化-创建一个虚拟机

现如今,随着云计算技术的越来越成熟,我们在腾讯云、阿里云上购买的服务器本质上都是虚拟机,这就需要在一台物理服务器上虚拟化出更多的虚拟机,还要让这些虚拟机能够弹性伸缩,实现跨主机迁移。 而虚拟化技术正是这些能力的基石,而其中的核心技术就是 KVM 虚拟化技术。 虚拟化 虚拟化的本质是一种资源管理的技术,它可以通过各种技术手段把计算机的实体资源(如:CPU、RAM、存储、网络、I/O 等等)进行抽象和转换,让这些资源可以重新分割、排列与组合,实现最大化使用物理资源的目的。 服务器上的虚拟化软件,多使用 qemu ,其中 emu 是 emulator 模拟器的意思。单纯使用 qemu 采用的是完全虚拟化模式。但是完全虚拟化是非常低效的,所以要使用硬件辅助的虚拟化技术 Interl-VT,AMD-V,所以需要CPU 硬件开启这个标志位,一般是在 BIOS 里面设置。 当开启了标注位后,通过 KVM ,GuestOS 的指令不再用 Qemu 转译,直接运行,大大提高了速度。 CPU 虚拟化 为什么需要 CPU 虚拟化 X86 操作系统是设计在直接运行在裸硬件上的,x86 架构提供4个特权级别给内核(操作系统)来访问硬件,Ring 是指 CPU 的运行级别,Ring 0 是最高级别,依次到 Ring3。以 Linux x86 来说 操作系统(内核)需要直接访问硬件和内存,因此它的代码需要直接运行在最高级别 Ring 0 上,这样它就可以使用特权指令去控制中断,修改页表,访问设备。 应用程序的代码运行在 Ring 3 上,如果需要访问硬件,必须通过系统调用,执行系统调用的时候,CPU 的运行级别会从 Ring3 切换到 Ring0 ,并跳转到系统调用对应的内核代码位置执行,完成后从 Ring3 回到 Ring0。这个过程就是用户态到内核态的转换。 那么,虚拟化在这里就遇到了一个难题。由于宿主机的操作系统工作于 Ring0,VM 客户机操作系统就不能再工作在 Ring0 上了,但是 VM 客户机的内核操作系统不知道这一点,以前执行什么指令,现在还是执行什么指令。但是没有执行权限会出错。这时 VMM(虚拟机管理程序)就要开始工作了,虚拟机通过 VMM 实现 Guest CPU 对硬件的访问,根据原理有三种实现技术:

认识 Openstack

最近机缘巧合,需要重新认识一下 openstack 这门技术,之前其实也接触过很多虚拟化的技术,但是不够统一,也打算将之前了解的虚拟化技术好好的回顾一遍。

一条MySQL查询语句经历了什么--事务

上篇文章介绍了MySQL的索引机制,基本上对MySQL如何优化查询速度做了比较充分的了解

第二篇文章介绍一下事务,事务不是 MySQL 的原生支持,而是 InnoDB 存储引擎带来的 Feature。旧版本MySQL的默认存储引擎 MyISAM 就不支持事务能力。正因为事物能力,MySQL 的功能越发强大,也是因为事务,MySQL经常存在和索引无关的很多慢查询。

eBPF超乎你想象

eBPF 是什么? eBPF:过去 50 年操作系统最大的变革!!! 在过去,如果想让应用程序处理网络数据包是不可能的,因为应用程序运行在Linux的用户空间,它是不能直接访问主机的网络缓冲区,这里由内核管理和保护。内核保证了进程隔离,进程只能通过系统调用(syscall)来获取自己的网络数据包信息。 1992 年的 USENIX 会议上,The BSD Packet Filter: A New Architecture for User-level Packet Capture ,第一次提到 BSD Packet Filter (简称BPF)这个概念,这篇论文带来了一个革命性技术。正如其名称他是包过滤相关的技术,其基本原理是用户态定义 BPF 字节码来定义过滤表达式,然后传递给内核,再由虚拟机解释运行。 有了 BPF 之后,应用程序不再需要 syscall,数据包不需要在内核空间和用户空间之间来回交互传递。而是我们将代码直接交给内核,让内核自己执行,这样就可以让代码全速运行,效率更高。 我们使用的 tcpdump 主要通过 libpcap 实现,而libpcap 就是基于 eBPF 。执行下面的命令,导出 tcpdump 所灌入内核的 BPF 程序。如下的 tcpdump 命令,可以直接过滤出IP地址包含 1.1.1.1 和 2.2.2.2 的数据包。 1 2 3 4 5 6 7 8 tcpdump -d 'ip src 1.1.1.1 or ip src 2.

一条MySQL查询语句经历了什么--索引


MySQL 之前已经接触过非常多了,只是将MySQL当作一个 excel 文档,需要取数据了通过命令获取。 但是实际上 MySQL 内部还是有很多奥秘的,一条语句的执行也有很多有意思的设计逻辑。

下面对自己学习的MySQL的执行过程做一个学习记录。通过把MySQL 拆解一下,来对MySQL做更深层次的理解。再遇到一些异常或者问题时,可以直戳本质,更为快速定位并解决问题。