共计 6400 个字符,预计需要花费 16 分钟才能阅读完成。
下面就自己感兴趣的 RedHat 7.0 beta 的 new features 整理了下,并简单的发表了下自己的看法。
1. GRUB 2
redhat 7.0 beta 版将之前使用的 Boot Loader 从 GRUB 升级到了 GRUB2,主要是基于 GRUB2 以下四个比较显著的特点:
(1)GRUB2 支持更多的硬件体系结构,比如 PowerPC
(2)GRUB2 支持更多的固件类型,比如 BIOS,EFI 和 OpenFirmware
(3)GRUB2 除了支持 MBR(Master Boot Record)磁盘分区表,还支持 GPT(GUID Partition Tables)
(4)GRUB2 除了支持 linux 文件系统外,还支持一些非 linux 文件系统,比如苹果的 HFS+ 和微软的 NFS 文件系统
2. Storage
(1)LIO Kernel Target Subsystem
这里重点强调了 RedHat 7.0 的 iscsi target 使用 LIO(linux-IO Target)代替了 tgtd,与 tgtd 相比,LIO 有以下优点(个人理解):
•tgtd 是个 user space 的 daemon,而 LIO 是个 kernel driver,LIO 的性能更优;
•LIO 采用了一种统一的方式来对当前的 iscisi protocol 进行配置和管理,即统一的接口,更强大的配置和管理方式。
(2)Fast Block Devices Caching Slower Block Devices
linux 内核支持的以一种 block-level caching solution,即使用高速的存储设备作为低速存储设备的 cache。目前,比较流行的 block-level caching solution 有 dm-caceh, bcache,flashcache 和 enhanceio 等。
其中 dm-cache 被 merge 到 linux-3.9 内核中,bcache 被 merge 到 linux-3.10 内核中,后两者是 facebook 提出的,现在应用也比较广。下面简单介绍下 block-level caching(以 dm-cache 为例)的原理,后续如果有时间会详细分析。
linux kernel 通过增加 virtual cache devices 设备来作为 cache 设备的抽象,virtual cache device 基于三个 physical devices 来实现:
origin device: slower physical device,比如 Hard Disk Device,数据最后持久化存储的位置
cache device:fast physical device,比如 SSD,数据暂时存储的位置
metadata device:元数据设备,可以用 SSD(即 cache device 和 metadata deivce 可以是一块 SSD 的两个分区),用来配置 cache placement policy(cache 的块替换策略),dirty block flags(记录 cache 中被修改过的块,即脏块)以及其他内部数据
简单来讲,当读数据的时候,会查找 metadata device 看请求块是否在 cache device 中命令中,如果 hit,则直接从 cache device 获取,如果 miss,再从 origin device 获取,同时将数据读到 cache device 中。当写数据的时候,根据 cache placement policy 配置的策略的不同,
执行对应的写操作,当前支持的 policy 有:writeback 和 writethrough,默认为 writeback,即先写到 cache device 中,并在 metadata device 中记录写过的块为 dirty,此时写操作就完成了。每个一段时间 cache device 中的 dirty block 会被 flush 到 origin device 中。
3. File System
通过图形界面安装的 redhat 7.0 采用 XFS 作为默认的文件系统,具体 XFS 相关的内容可参见 XFS 的相关介绍。
4. Kernel
(1)增加硬件支持的 APIC 虚拟化
APIC 相关的操作都是特权操作,当 vcpu 在接收到 APIC interrupt 时,就会从 Guest Mode 切换到 Kernel Mode,这极大的降低了系统的性能,通过增加硬件支持的 APIC 虚拟化,避免了这种切换。
(2)Full DynTick support
这个 feature 的意思是:当某个 cpu 上只有一个可运行的进程时,禁用这个 cpu 的 tick(滴答,就是时钟中断),个人认为这是一个非常大的进步。这里先简单介绍下相关背景知识,后续有时间详细分析。
估计大家都听说过 HZ,常见的 HZ 有:100,250,300,1000,一般桌面版默认设置为 250(server 版为 1000),即每秒产生 250 个时钟中断(tick,滴答),主要是用来给 scheduler 来做调度的时间度量。
如果 cpu 的 idle 的情况下,每秒仍然会有 1000 个时钟中断,即 cpu 即使 idle 也是在做时钟中断处理的,于是后来出现了 NO_HZ,即如果 cpu 处于 idle,就禁用时钟中断,通过 CONFIG_NO_HZ 来配置(至于此时如何计时,在此不作讨论)。
再后来,如果当钱 cpu 只有一个任务可运行,那么如果禁用使用中断的话,当前任务仍要被打断 250 次或 1000 次,所以也没有必要,就出现了 CONFIG_NO_HZ_FULL(就是这里的 Full DynTick Support)。
最后,必须承认采用了 tickless 必然也会带来一些缺点,在此也不做详细分析。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-04/100686p2.htm
5. Virtualization
(1)块设备 IO 性能优化
增加 virtio-blk-data-plane 的支持,用来提供块设备 IO 的性能,具体原理和性能比较参见文章《KVM IO 性能测试数据》http://www.linuxidc.com/Linux/2014-04/100685.htm
(2)PCI 桥支持
之前 qemu 最多可仿真 32 个 pci slot,增加 pci bridge 之后,每个 slot 可以接 pci bridge,而每个 pci bridge 又可以接 32 个 pci card
(3)QEMU Sandboxing
通过 kernel system call filtering 机制,使得 vm 的安全隔离性更好
(4)Qemu Virtual CPU Hot Add support
从字面上理解应该是从真正做到了 cpu hotplug,即从 qemu 层面 hot add physical 的 cpu 设备,os 层面能够自动识别到新增加的 cpu(个人理解是这个功能,需要验证,因为有可能仅仅是更新了 qemu 的版本,而在 qemu 层面支持 cpu hotplug,os 并不能自动识别)
(5)Multiple Queue NICs
每个 vcpu 有自己独立的网络收发队列和独立的中断标志位,众所周知,linux kernel 中的网络驱动实现为每块网卡分别一个发送队列和接收队列,那么当 host os 上有个多个 vm 时,多个 vm 将共享收发队列和中断号,这大大降低了网络包处理的速度,而且现在很多
新的网卡从硬件上就支持多队列,旧的仿真驱动不能很好的利用这个功能。
(6)Multiple Queue virtio_scsi
类似网卡,每个块设备对应自己的收发队列和中断标志位
(7)I/O Throttling for QEMU Guests
官方解释是通过对 guest block devices IO 进行限速来防止 system crash,这里的 system 是指 host os 吗,这个 feature 没太想清楚应用场景
(8)Windows 8 and Windows Server 2012 Guest Support
貌似是 RedHat 官方第一次宣布对 windows 8 和 windows server 2012 支持,之前都是 kvm 社区发布的 support list。
(9)Integration of Ballooning and Transparent Huge Pages
增加了对 Huge page 的 balloning 和 transparent 的支持,之前是对 4k page,这个功能应该也是 redhat 官方第一次宣布,之前 kvm 社区也早就宣布过。
(10)Bridge Zero Copy Transmit
字面意思是 linux bridge 的零拷贝传输网络包,这将会大大提高 linux bridge 的性能,但是具体之前拷贝发生在哪块后续有时间再去分析。
(11)Live Migration Support
redhat 6.5 上 vm 迁移到 redhat 7.0 上的 feature
(12)Para-Virtualized Ticketlocks
个人感觉这个是 Para-Virtualized Ticket spinlocks,是对 linux kernel 的 spinlock 的半虚拟化支持,主要为了解决 spinlock 给 vm 带来的性能损失。(有待确认)
(13)KVM Clock Get Time Performance
通过 vsyscall 降低了 guest os 获取 host os 时钟的开销
(14)Live Migration Threads
将迁移的功能放在独立的线程中来做,与 qemu 主线程解耦,从而做到在执行迁移操作时不影响 qemu 主线程进行其他处理操作。
(15)VPC and VHDX File Formats
VPC 和 VHDX 格式镜像的原生支持,不需要再进行格式转化了,主要用来兼容 hyper-v。从这里也可以看出 redhat 可以和 hyper- v 合作也不会和 vmware 合作(个人意见)。
总结:由于个人研究方向的关系,简单介绍了下 redhat 7.0 virtualization 和 kernel 相关的 feature,其他还有些 HA 和网络相关的 feature,后续有时间再做介绍。
上述内容,纯属一家之言,如有错误,敬请斧正!
更多 RedHat 相关信息见 RedHat 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=10
下面就自己感兴趣的 RedHat 7.0 beta 的 new features 整理了下,并简单的发表了下自己的看法。
1. GRUB 2
redhat 7.0 beta 版将之前使用的 Boot Loader 从 GRUB 升级到了 GRUB2,主要是基于 GRUB2 以下四个比较显著的特点:
(1)GRUB2 支持更多的硬件体系结构,比如 PowerPC
(2)GRUB2 支持更多的固件类型,比如 BIOS,EFI 和 OpenFirmware
(3)GRUB2 除了支持 MBR(Master Boot Record)磁盘分区表,还支持 GPT(GUID Partition Tables)
(4)GRUB2 除了支持 linux 文件系统外,还支持一些非 linux 文件系统,比如苹果的 HFS+ 和微软的 NFS 文件系统
2. Storage
(1)LIO Kernel Target Subsystem
这里重点强调了 RedHat 7.0 的 iscsi target 使用 LIO(linux-IO Target)代替了 tgtd,与 tgtd 相比,LIO 有以下优点(个人理解):
•tgtd 是个 user space 的 daemon,而 LIO 是个 kernel driver,LIO 的性能更优;
•LIO 采用了一种统一的方式来对当前的 iscisi protocol 进行配置和管理,即统一的接口,更强大的配置和管理方式。
(2)Fast Block Devices Caching Slower Block Devices
linux 内核支持的以一种 block-level caching solution,即使用高速的存储设备作为低速存储设备的 cache。目前,比较流行的 block-level caching solution 有 dm-caceh, bcache,flashcache 和 enhanceio 等。
其中 dm-cache 被 merge 到 linux-3.9 内核中,bcache 被 merge 到 linux-3.10 内核中,后两者是 facebook 提出的,现在应用也比较广。下面简单介绍下 block-level caching(以 dm-cache 为例)的原理,后续如果有时间会详细分析。
linux kernel 通过增加 virtual cache devices 设备来作为 cache 设备的抽象,virtual cache device 基于三个 physical devices 来实现:
origin device: slower physical device,比如 Hard Disk Device,数据最后持久化存储的位置
cache device:fast physical device,比如 SSD,数据暂时存储的位置
metadata device:元数据设备,可以用 SSD(即 cache device 和 metadata deivce 可以是一块 SSD 的两个分区),用来配置 cache placement policy(cache 的块替换策略),dirty block flags(记录 cache 中被修改过的块,即脏块)以及其他内部数据
简单来讲,当读数据的时候,会查找 metadata device 看请求块是否在 cache device 中命令中,如果 hit,则直接从 cache device 获取,如果 miss,再从 origin device 获取,同时将数据读到 cache device 中。当写数据的时候,根据 cache placement policy 配置的策略的不同,
执行对应的写操作,当前支持的 policy 有:writeback 和 writethrough,默认为 writeback,即先写到 cache device 中,并在 metadata device 中记录写过的块为 dirty,此时写操作就完成了。每个一段时间 cache device 中的 dirty block 会被 flush 到 origin device 中。
3. File System
通过图形界面安装的 redhat 7.0 采用 XFS 作为默认的文件系统,具体 XFS 相关的内容可参见 XFS 的相关介绍。
4. Kernel
(1)增加硬件支持的 APIC 虚拟化
APIC 相关的操作都是特权操作,当 vcpu 在接收到 APIC interrupt 时,就会从 Guest Mode 切换到 Kernel Mode,这极大的降低了系统的性能,通过增加硬件支持的 APIC 虚拟化,避免了这种切换。
(2)Full DynTick support
这个 feature 的意思是:当某个 cpu 上只有一个可运行的进程时,禁用这个 cpu 的 tick(滴答,就是时钟中断),个人认为这是一个非常大的进步。这里先简单介绍下相关背景知识,后续有时间详细分析。
估计大家都听说过 HZ,常见的 HZ 有:100,250,300,1000,一般桌面版默认设置为 250(server 版为 1000),即每秒产生 250 个时钟中断(tick,滴答),主要是用来给 scheduler 来做调度的时间度量。
如果 cpu 的 idle 的情况下,每秒仍然会有 1000 个时钟中断,即 cpu 即使 idle 也是在做时钟中断处理的,于是后来出现了 NO_HZ,即如果 cpu 处于 idle,就禁用时钟中断,通过 CONFIG_NO_HZ 来配置(至于此时如何计时,在此不作讨论)。
再后来,如果当钱 cpu 只有一个任务可运行,那么如果禁用使用中断的话,当前任务仍要被打断 250 次或 1000 次,所以也没有必要,就出现了 CONFIG_NO_HZ_FULL(就是这里的 Full DynTick Support)。
最后,必须承认采用了 tickless 必然也会带来一些缺点,在此也不做详细分析。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-04/100686p2.htm