美团技术学院 - kvm性能优化
Post on 15-Jan-2015
2.456 views
DESCRIPTION
TRANSCRIPT
关于美团开放服务• 2012年初规划
• 基于OpenStack架构,部分组件自主开发
• 2012年9月开始逐步迁移在线服务系统到云主机
• 2013年5月推出美团开放服务(https://
mos.meituan.com),云主机为第一款产品
• 美团云主机基于KVM虚拟化技术
Agenda
• CPU
• context switch
• cache
• Memory
• IO
• Storage
• Network美团开放服务 https://mos.meituan.com
Context Switch - Intel VT-x
ring 0kernel mode
ring 3User mode
Virtualization Technology
美团开放服务 https://mos.meituan.com
Context Switch - Intel VT-x
ring 0kernel mode
ring 3User mode
VMM ring 0kernel mode
VMM ring 3User mode
VM ring 0Kernel mode
VM ring 3User mode
Virtualization Technology
美团开放服务 https://mos.meituan.com
Context Switch - Intel VT-x
ring 0kernel mode
ring 3User mode
VMM ring 0kernel mode
VMM ring 3User mode
VM ring 0Kernel mode
VM ring 3User mode
设置:宿主机BIOS中开启,目前默认开启
Virtualization Technology
美团开放服务 https://mos.meituan.com
Cache - Node Binding
• 将qemu进程绑定到特定的CPU node或core上——避免L2/L3 Cache miss
美团开放服务 https://mos.meituan.com
Cache - Node Binding
• 将qemu进程绑定到特定的CPU node或core上——避免L2/L3 Cache miss
• Node binding v.s core binding
美团开放服务 https://mos.meituan.com
Cache - Node Binding
• 将qemu进程绑定到特定的CPU node或core上——避免L2/L3 Cache miss
• Node binding v.s core binding
• 设置:
美团开放服务 https://mos.meituan.com
Cache - Node Binding
• 将qemu进程绑定到特定的CPU node或core上——避免L2/L3 Cache miss
• Node binding v.s core binding
• 设置:
• taskset
美团开放服务 https://mos.meituan.com
Agenda
• CPU
• Memory
• Addressing
• Space
• IO
• Storage
• Network美团开放服务 https://mos.meituan.com
Addressing - EPT (SLAT)• Extended page tables/second level address
translation
Vaddr
VMM(Page table)
Paddr
美团开放服务 https://mos.meituan.com
Addressing - EPT (SLAT)• Extended page tables/second level address
translation
Vaddr
VMM(Page table)
Paddr
VM Vaddr
VM Page table
VM Paddr/VMM Vaddr
VMM Page table
VMM Paddr
美团开放服务 https://mos.meituan.com
Addressing - EPT (SLAT)• Extended page tables/second level address
translation
Vaddr
VMM(Page table)
Paddr
VM Vaddr
VM Page table
VM Paddr/VMM Vaddr
VMM Page table
VMM Paddr
设置:宿主机BIOS中开启,目前默认开启美团开放服务 https://mos.meituan.com
Addressing - HugePage
美团开放服务 https://mos.meituan.com
Addressing - HugePage• 减少page table尺寸,降低查找缓存(TLB)的cache-miss,加速VM内存地址转换
美团开放服务 https://mos.meituan.com
Addressing - HugePage• 减少page table尺寸,降低查找缓存(TLB)的cache-miss,加速VM内存地址转换
• 默认Page size: 4KB/Hugepage size: 2M
美团开放服务 https://mos.meituan.com
Addressing - HugePage• 减少page table尺寸,降低查找缓存(TLB)的cache-miss,加速VM内存地址转换
• 默认Page size: 4KB/Hugepage size: 2M
• Transparent hugepage: kernel进程khugepaged周期性扫描内存,自动将地址连续可合并的普通4KB page合并为2MB Hugepage
美团开放服务 https://mos.meituan.com
Addressing - HugePage• 减少page table尺寸,降低查找缓存(TLB)的cache-miss,加速VM内存地址转换
• 默认Page size: 4KB/Hugepage size: 2M
• Transparent hugepage: kernel进程khugepaged周期性扫描内存,自动将地址连续可合并的普通4KB page合并为2MB Hugepage
• 设置:
美团开放服务 https://mos.meituan.com
Addressing - HugePage• 减少page table尺寸,降低查找缓存(TLB)的cache-miss,加速VM内存地址转换
• 默认Page size: 4KB/Hugepage size: 2M
• Transparent hugepage: kernel进程khugepaged周期性扫描内存,自动将地址连续可合并的普通4KB page合并为2MB Hugepage
• 设置:
• sysctl -w sys.kernel.mm.transparent_hugepage.enabled=always
美团开放服务 https://mos.meituan.com
Addressing - HugePage• 减少page table尺寸,降低查找缓存(TLB)的cache-miss,加速VM内存地址转换
• 默认Page size: 4KB/Hugepage size: 2M
• Transparent hugepage: kernel进程khugepaged周期性扫描内存,自动将地址连续可合并的普通4KB page合并为2MB Hugepage
• 设置:
• sysctl -w sys.kernel.mm.transparent_hugepage.enabled=always
• sysctl -w sys.kernel.mm.transparent_hugepage.defrag=always
美团开放服务 https://mos.meituan.com
Space - KSM
• Kernel same-page merging
• kernel进程ksmd周期性扫描内存,将内容相同的page合并,减少物理内存使用量
美团开放服务 https://mos.meituan.com
Agenda
• CPU
• Memory
• IO
• Storage
• Network
美团开放服务 https://mos.meituan.com
kernel
Guest VM
Qemu
Hardware
Virtual HardwareTraps
kernel
Guest VM
Qemu
Hardware
Virtual HardwareInterface
Drivers
Full virtualization v.s. paravirtualization
美团开放服务 https://mos.meituan.com
virtio半虚拟化I/O设备框架,标准化guest与host之间数据交换接口,简化流程,减少内存拷贝,提升虚拟机I/O效率
美团开放服务 https://mos.meituan.com
Agenda
• CPU
• Memory
• IO
• Storage
• Network
美团开放服务 https://mos.meituan.com
virtio-blk
• 基于virtio框架的虚拟PCI磁盘设备
• /dev/vdx
美团开放服务 https://mos.meituan.com
virtio-blk
• 基于virtio框架的虚拟PCI磁盘设备
• /dev/vdx
-drive file=win_xp.img,if=none,id=drive_0,cache=none,aio=native -device virtio-blk-pci,drive=drive_0,bus=pci.0,addr=0x5
美团开放服务 https://mos.meituan.com
virtio-SCSI
• 基于virtio框架的虚拟SCSI磁盘设备
• /dev/sdx
美团开放服务 https://mos.meituan.com
virtio-SCSI
• 基于virtio框架的虚拟SCSI磁盘设备
• /dev/sdx
-drive file=win_xp.img,if=none,id=drive_0,cache=none,aio=native -device virtio-scsi-pci,drive=drive_0,bus=pci.0,addr=0x5
美团开放服务 https://mos.meituan.com
缓存模式
Host FS page cache
Guest User Space
Guest FS page cache
Brk Driver writeback cache
Kernel
Qemu
美团开放服务 https://mos.meituan.com
缓存模式(cont)page cache writeback
cache写同步(flush)
说明
directsync NO NO N/A 无优化
writethrough YES NO YES 依靠Host操作系统优化IO性能
none/off NO YES N/A关闭Host page cache.
优化写性能,并保证安全性
writeback YES YES YES 优化读写性能,可能丢失数据
unsafe YES YES NO 优化读写行呢干,不保证数据安全
-drive file=win_xp.img,if=none,id=drive_0,cache=none,aio=native -device virtio-blk-pci,drive=drive_0,bus=pci.0,addr=0x5
美团开放服务 https://mos.meituan.com
Native AIO• Native aio: kernel AIO
• threaded aio: user space AIO emulated by posix thread workers
美团开放服务 https://mos.meituan.com
Native AIO• Native aio: kernel AIO
• threaded aio: user space AIO emulated by posix thread workers
-drive file=win_xp.img,if=none,id=drive_0,cache=none,aio=native -device virtio-blk-pci,drive=drive_0,bus=pci.0,addr=0x5
美团开放服务 https://mos.meituan.com
块设备IO调度器cfq per-process
IO queue较好公平性
较低aggregate throughput
deadlineper-device IO queue
较好实时性,较好aggregate throughput
不够公平,容易出现VM starvation
美团开放服务 https://mos.meituan.com
块设备IO调度器cfq per-process
IO queue较好公平性
较低aggregate throughput
deadlineper-device IO queue
较好实时性,较好aggregate throughput
不够公平,容易出现VM starvation
sysctl -w sys.block.sdb.queue.scheduler=cfq
美团开放服务 https://mos.meituan.com
Agenda
• CPU
• Memory
• IO
• Storage
• Network
美团开放服务 https://mos.meituan.com
virtio-net
• 基于virtio框架的虚拟以太网设备
美团开放服务 https://mos.meituan.com
virtio-net
• 基于virtio框架的虚拟以太网设备
-netdev type=tap,id=pub226,ifname=pub226,vhost=on,script=up.sh,downscript=down.sh -device virtio-net-pci,netdev=pub226,mac=00:02:dc:04:59:36,bus=pci.0,addr=0xf
美团开放服务 https://mos.meituan.com
vhost_net• 内核进程vhost_xxx负责tap设备和guest virtio queue之间的数据交换,减少qemu通过用户态和tap设备交换数据的system call和内存拷贝
tap0
virtqueue
guest VM
qemu pid=5489
nic
vSwitchkernel
vnic
美团开放服务 https://mos.meituan.com
vhost_net• 内核进程vhost_xxx负责tap设备和guest virtio queue之间的数据交换,减少qemu通过用户态和tap设备交换数据的system call和内存拷贝
tap0vhost_5489
virtqueue
guest VM
qemu pid=5489
nic
vSwitchkernel
vnic
tap0
virtqueue
guest VM
qemu pid=5489
nic
vSwitchkernel
vnic
美团开放服务 https://mos.meituan.com
vhost_net• 内核进程vhost_xxx负责tap设备和guest virtio queue之间的数据交换,减少qemu通过用户态和tap设备交换数据的system call和内存拷贝
tap0vhost_5489
virtqueue
guest VM
qemu pid=5489
nic
vSwitchkernel
vnic
-netdev type=tap,id=pub226,ifname=pub226,vhost=on,script=up.sh,downscript=down.sh -device virtio-net-pci,netdev=pub226,mac=00:02:dc:04:59:36,bus=pci.0,addr=0xf
tap0
virtqueue
guest VM
qemu pid=5489
nic
vSwitchkernel
vnic
美团开放服务 https://mos.meituan.com
其他优化选项
• CPU: scheduler
• Memory: NUMA
• Storage: PCI-passthrough
• Network: SR-IOV, PCI-passthrough
• 提升硬件指标
美团开放服务 https://mos.meituan.com