Geek新鲜事5 - QEMU在Ceph上的深度优化

536 阅读4分钟

1. QEMU在Ceph上的深度优化

虽然,很多人测试或者使用 Ceph ,会进行调优设置以获取最佳性能,但到目前而言,还没有一个最优的最新配置方式。通常,我们在使用 Ceph 的时候,有经验的工程师往往会通过消除系统高级别的性能瓶颈来优化。 

文章总结了 QEMU/KVM 在使用 Ceph 的 librbd 驱动程序时的提升性能的方法:

  • 使用virtio-blk-pci 后端
  • 使用单独的 IO 线程
  • 禁用 Librbd 缓存
  • 使用TCMalloc内存分配器
  • 使用新版本的Librbd 库
  • blockdev指定rbd格式代替raw
  • 使用 -M  q35 及pcie总线

2. 虚拟机非运行状态使用QEMU存储虚拟化功能

Qemu包含了许多存储相关的功能,支持了如 qcow2、luks 等许多 disk-image 文件格式、快照、增量备份、存储迁移等,这些功能都是可供虚拟机使用的。然而,这种在 Qemu 内部提供的软件定义的存储功能(software-defined storage functionality)在 Qemu 之外就没那么容易用上了。Kevin Wolf 和 Stefano Garzarella 在 2022 年 KVM 论坛上介绍了新的 qemu-store-daemon 程序和 libblkio 库,可以让 Qemu 的存储功能可以在不运行虚拟机(VM)的情况下使用。

图片

新增的 qemu-store-daemon 程序使得磁盘镜像功能不再受“一个 Qemu 进程对应一个虚拟机”的限制。qemu-store-daemon 作为一个独立的进程运行,完全不需要任何虚拟机,并提供了以前只在 Qemu 中才可用的 QMP 命令来对磁盘镜像文件进行操作。

Wolf 介绍了两种方式来更好地理解 qemu-store-daemon。它可以被看作是一个高级的 qemu-nbd,支持 QMP monitor commands 以及更多的 export 类型。或者它也可以被看作是没有运行虚拟机能力的 Qemu。它对应的命令行和可用的 QMP 命令都与 Qemu 非常相似。

3. 针对VFIO-PCI 的 KVM 内核热升级方案

PCI 设备直通在当前数据中心的 KVM 虚拟化场景中广泛应用,能够为虚拟机中的应用提供高性能的 IO 设备。同时,直通设备的使用也为云计算底层软件设施的运维带来了一些复杂度。

其中,对热升级和热迁移的兼容性是 PCI 直通设备的一大难点。这是因为热升级或热迁移操作依赖于对虚拟机状态的提取、保持、传输等操作,而 PCI 直通设备的状态数据对于宿主机侧的 hypervisor 是不透明的。

文章介绍通过对 Linux 内核进行一些局部的修改,在 Intel IOMMU 上可以实现在热升级过程中,设备状态的完全隔离和保护,从而得到一个 PCI 透传设备的热升级通用支持方法。

  • 虚拟机的 RAM 指定为 E820 type 12 类型,这个类型的物理页,将不再被内核动态管理,而是作为“非易失性内存”来看待
  • 在内核中引入了一个新的物理页管理器 KRAM
  • 在 VFIO-PCI 相关系统调用中,加入了一个新的标志位,用以在热升级过程中,跳过对 VFIO-PCI 设备的初始化和重置

4. Linux 内核收获一批新的 Rust 基础设施优化补丁

今年 10 月,初始的 Rust 基础设施已被合并到 Linux 6.1 。意味着未来 Rust 编程语言将用于内核驱动程序和其他子系统的代码。但 10 月的 Rust for Linux 只提供了底层的基础设施和一些非常基础的集成,缺少很多规范和子系统抽象。

近日,领导 Rust for Linux 工作的 Miguel Ojeda 发布了一组优化补丁( 28 个),为内核提供了更多的 Rust 核心支持代码。这个补丁系列是对上游 Rust 支持的第一批更改,所有引入的设施都是 “Rust 核心” 的一部分,不会与 C 端交互。

这批补丁几乎所有代码都在 linux-next 中呆了好几个月,属于 Rust 补丁系列的一部分,且每个补丁都在启用 Rust 的 defconfig 上进行了构建测试。鉴于其测试的完整度,这批补丁极有可能进入 Linux 6.2 合并窗口。

5. Github Next Blocks计划使得README中可展示更多内容

图片

Github Next是Github计划推出的一组前瞻功能,本周Github Next展示了名为Blocks的计划,可以在代码仓库README中嵌入更多动态内容。目前README仅支持Markdown文本、图片等内容,形式较为单一,Blocks计划展示了如何在README中添加交互式脚本、图标、图例等元素,使开源作者更容易介绍开源代码仓库中的功能。


参考:

[1]ceph.io/en/news/blo…

[2]lwn.net/Articles/91…

[3]my.oschina.net/u/6150560/b…

[4]lore.kernel.org/lkml/202211…

[5]blocks.githubnext.com/