pFsense tcp offloading in kvm virtio
如果在KVM中创建 pFsense 实例用于 OpenStack 虚拟机的三层网关,在虚拟机之间的私有网络或者虚拟机对外网络会出现问题。例如虚拟机的DNS 解析(UDP Port 53)不正常,内部可以ping通dns 服务器,也可以ping通目标机器,但就是DNS解析无法工作。 在排除了是虚拟机的Egress规则以及pFsense中的防火墙问题外,那么可能就是由于虚拟网卡(VirtIO)以及物理网卡的问题。 通过勾选pFsense中的’Disable hardware checksum offload’和’Disable hardware TCP segmentation offload’ 可以解决问题。 TCP Offloading 的功能可能在ssl termination 中会有用处,但我们只用到了pFsense 的路由及防火墙功能,应用上面的负载均衡,漏洞扫描等尚未涉及到,所以关闭该功能对虚拟机来说没有影响。
Read MoreKVM guest host hardware passthrough
在vmware下,物理主机的硬件映射给虚拟机称为直通, 可以很方便的通过UI进行操作, 但kvm下,需要通过技术手段实现 kvm下的DMA(direct memory access) dma要存取的内存地址成为DMA地址(也称为bus address),dmar是DMA remapping ,是intel为支持虚拟机而设计的I/O虚拟化技术,I/O设备访问的DMA地址不再是物理内存地址,而要通过DMA remapping硬件进行转译,DMA remapping硬件会把DMA地址翻译成物理内存地址,并检查访问权限等等。负责DMA remapping操作的硬件称为IOMMU。
Read MoreKVM guest and host cpu binding
kvm虚拟出来的虚拟机(vm)是运行在单独的一个逻辑cpu还是可以分别在各个cpu之间运行?虚拟机cpu(vcpu)是什么概念?物理机(host)怎么看待kvm和vcpu? 为了搞懂这个概念我们还是要回到命令行中看。举例说明: 我这里有一个虚拟机叫core8,它含有8个虚拟cpu它的进程编号是20736。 就是说core8在host看来就是一个进程而已,这个集成的编号是20736.那么现在提出一个问题,这个core8的8个vcpu是怎么个情况呢?在哪里运行呢?这时还是得借助命令行。我们在host里使用ps指令,但是不能单纯用ps,还要借助于参数: ps -eL (e的意思是打印所有进程,L的意思是连县城也不放过)。我这里只显示一下和我们的20736进程相关的信息: kvm虚拟机vcpu资源绑定_第1张图片 你会看到和20736相关的有九行,那么这九行是什么呢?首先第一列都是20736,第二列里只有第一行是20736,后面的都不是。那么我们这时就应该明白了,对于host来说,kvm虚拟机是一个进程(20736),虚拟机的vcpu都是这个进程衍生出来的线程。这就是为什么除了20736还有另外八行的原因。 那么我们接着询问,这八个线程是跑在同一个逻辑cpu里吗?为了回答这个问题,我们接着做实验:
Read More