Xen虚拟化
Xen虚拟化基础
Xen虚拟化类型
hypervisor
Xen组件

Xen hypervisor
Colletion CPU、Memory、Interrupter
Domain0 ---> Dom0
Privilieged Domain
特权区 I/O资源分配
网络设备
net-front、net-backend
块设备
block-front、block-backend
Linux Kernel
2.6.37 开始支持运行Dom0
3.0 对关键特性进行了优化
提供管理DomU工具栈
用于实现对虚拟机进行添加、启动、快照、停止、删除等操作
DomainU ---> DomU
Unprivilieged Domain
PV
半虚拟化
HVM
完全虚拟化
只有硬件支持辅助虚拟化,Xen才能使用完全虚拟化,否则,只能使用半虚拟化
PV on HVM
CPU完全虚拟化,I/O半虚拟化
Xen的PV技术

不依赖于CPU的HVM特性,但要求GuestOS的内核作出修改以知道自己运行于PV环境
运行于DomU中的OS
Linux 2.6.24+
NetBSD
FreeBSD
OpenSolaris
Xen的HVM技术
依赖于Intel VT-x、AMD-V
依赖于Qemu来模拟I/O设备
运行于DomU中的OS
几乎所有支持x86平台的OS
Xen的PV on HVM技术

CPU完全虚拟化 I/O半虚拟化 运行于DomU中的OS:支持PV模式下虚拟I/O设备的OS
XenStore
为各Domain提供的共享信息存储空间
层级结构的名称空间
位于DOM0中
CentOS对Xen的支持
RHEL 5.7- 默认的虚拟化技术为Xen
kernel version 2.6.18
kernel+xen
RHEL 6+ 仅支持kvm
Dom0 不支持
DomU 支持
在不支持Xen的CentOS版本中使用Xen
手动编译安装
1. 编译3.0以上版本的内核,启用对Dom0的支持
2. 编译安装Xen程序
使用开源项目,制作好相关程序包的项目
xen4centos
xen made easy
安装使用Xen
指定EPEL或阿里云的yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
CentOS7安装下载xen
# yum installation
yum install -y centos-release-xen
yum install -y xen
# 安装perl工具包(Xen工具需要使用Perl工具包)
yum install -y perl
# 更新内核
yum install -y kernel
# Xen hypervisor内核文件
ls /boot/
xen.gz
xen-4.6.6-10.el7.gz
cat /etc/grub.d/08_linux_xen
# grub文件
cat /etc/default/grub
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=1024M,max:1024M cpuinfo com1=115200,8n1 console=com1,tty loglvl=all guest_loglvl=all"
GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT="console=hvc0 earlyprintk=xen nomodeset"
# 自动修改/boot/grub/grub.conf配置文件
/usr/bin/grub-bootxen.sh
# CentOS6及一下版本,则需要修改/etc/grub.conf,配置参数参考如下
http://xenbits.xen.org/docs/unstable/misc/xen-command-line.html
# 重启系统,载入Xen hypervisor内核
reboot
CenOS6修改grub.conf

Xen的工具栈

xm/xend 在Xen hypervisor的DOM0中启动xend的服务
xm 命令行管理工具,有诸多子命令
create、destory、stop、pause ...
xl 基于libxenlight提供轻量级的命令行工具栈
list List information about all/some domains
xen虚拟机状态
r 运行
b 阻塞
p 暂停
s 停止
c 崩溃
d dying,正在关闭的过程中
xe/xapi 提供了对xen管理的API,因此多用于cloud环境
Xen Server
XCP
virsh/libvirt
物理机开启libvirtd服务
远程通过virsh管理虚拟机
Xen半虚拟化模式
将一下内容定义在DomU配置文件中
1. kernel
内核文件安放位置
2. initrd或initramfs
3. DomU内核模块
4. 根文件系统
5. swap设备
PS: xm于xl启动DomU使用的配置文件略有不同
xl帮助
man xl.cfg 启动某个虚拟机配置
man xl.conf 通用配置
xl常用选项
shutdown 关机
reboot 重启
pci-list 显示pass-through的PCI设备
pause 暂停
unpause 解除暂停
console 连接到控制台
vncviwer 使用VNC连接至虚拟机
save 将当前DomU内存中的数据转存至指定的磁盘文件中
xl save VM_NAME /tmp/. /etc/xen/VM_CONF
restore 从指定的磁盘文件中恢复DomU的内存数据
xl restore /etc/xen/VM_CONF /tmp/<filename>
migrate 虚拟机迁移
dump-core 将当前Dom0的核心模块转储
cd-insert 插入一块光盘
cd-eject 弹出一块光盘
mem-max 虚拟机的最大内存
mem-set 设置虚拟机内存
button-press 关机电源按钮
vcpu-list 显示指定Dom上运行的CPU个数及相关信息
vcpu-pin 固定某个CPU在物理核心上
xl [-vfN] vcpu-pin <Domain> <VCPU|all> <Hard affinity|-|all> <Soft affinity|-|all>
vcpu-set 设置一个Dom上活跃CPU的个数,只能少于conf文件中定义的CPU个数
info 查看虚拟机的详细
domid 根据Dom名称获取DomID
domname 根据DomID获取Dom名称
rename 修改指定域名称
dmegs 查看虚拟机内核运行相关信息
top 显示各虚拟机的资源利用率信息
network-list 显示指定Dom现有的网络接口
network-attach 网络接口热插入
network-detach 网络接口热拔出
block-list 显示指定Dom现有的磁盘设备
block-attach 磁盘设备热插入
xl block-attach VM_NAME "/images/xen/xxx.img,qcow2,xvdb,rw"
block-detach 磁盘设备热拔出
uptime 显示指定Dom的运行时长
xl常用指令
name 指定域名称
builder 指定虚拟机类型,generic半虚拟化,HVM完全虚拟化
vcpus 虚拟CPU个数
maxvcpus 最大虚拟CPU个数
cpus 指定虚拟CPU运行在哪些物理核心列表上
cpu_weight CPU权重
memory 指定虚拟机内存大小
maxmem 指定最大内存大小
on_poweroff 指明关机时,DOM0采取的action
destroy
destroy the domain
restart
destroy the domain and immediately create a new domain with the same configuration
rename-restart
rename the domain which terminated, and then immediately create a new domain with the same configuration as the original
preserve
keep the domain. It can be examined, and later destroyed with `xl destroy`.
coredump-destroy
write a "coredump" of the domain to /var/lib/xen/dump/NAME and then destroy the domain.
coredump-restart
write a "coredump" of the domain to /var/lib/xen/dump/NAME and then restart the domain.
on_reboot 重启时,执行操作,采取的action
on_crash 虚拟机意外崩溃时,采取的action
uuid 指定一个域的UUID
disk=[ "DISK_SPEC_STRING", "DISK_SPEC_STRING", ...] 指明磁盘设备
http://xenbits.xen.org/docs/unstable/man/xl-disk-configuration.5.html
[<target>, [<format>, [<vdev>, [<access>]]]],
target 表示磁盘映像文件或设备文件路径,/images/xen/linux.img, /dev/myvg/linux
format 表示磁盘格式,如果是映像文件,有多种格式raw,qcow2 ...
vdev 指明虚拟机中被识别的磁盘名称,/dev/hd[x]、sd[x]、xvd[x]
access 指明磁盘访问权限
使用qemu-img管理磁盘映像
create [-q] [-f fmt] [-o options] filename [size]
qemu-img create 0f raw -o size=2G /images/xen/busybox.img
使用mke2fs格式化磁盘设备
mke2fs -t ext2 busybox.img
# 无分区表
查看磁盘大小
ll -h
du -sh
vif=[ "NET_SPEC_STRING", "NET_SPEC_STRING", ...] 指明网络设备
http://xenbits.xen.org/docs/unstable/man/xl-network-configuration.5.html
https://wiki.xenproject.org/wiki/Network_Configuration_Examples_(Xen_4.1%2B)
vif = [ '<vifspec>', '<vifspec>', ... ]
<vifspec> = [<key>=<value>|<flag>,]
mac 指定虚拟机的MAC地址,以“00:16:3e”
bridge 指定此设备网络接口在Dom0中被关联至哪个桥设备上
model 指定虚拟机模拟成哪种网络接口
rt18139
e1000
vifname 指明接口名称,在Dom0中显示的名称
script 创建接口的辅助脚本
ip 直接指定固定IP地址,会注入到DomU中
rate 指定网卡传输速率
RATE is in bytes and can accept suffixes:
GB, MB, KB, B for bytes.
Gb, Mb, Kb, b for bits.
vfb=[ "VFB_SPEC_STRING", "VFB_SPEC_STRING", ...] 指明虚拟显卡接口
# 本地虚拟桌面
# 配合虚拟机的默认启动级别
vfb = [ "sdl=1" ]
# vncviwer本地
# 本机需要安装tigervnc
vfb = [ "vnc=1" ]
vncviwer :5900
# vncviwer远程
# 本机需要安装tigervnc
vfb = [ "vnc=1,vnclisten=0.0.0.0,vncpasswd=123456" ]
# 使用桌面号连接,5900桌面号0
pci=[ "PCI_SPEC_STRING", "PCI_SPEC_STRING", ... ] 指明PCI设备
xl半虚拟化专用指令
kernel 内核文件路径,为Dom0中的路径 ramdisk 为kernel指定内核提供的ramdisk文件路径 root 指明根文件系统 extra 额外传递给内核引导时使用的参数 bootloader 如果DomU使用自己的kernel及ramdisk,则需要使用Dom0中的应用程序,实现启动器功能,不能和kernel、ramdisk参数同时使用
安装半虚拟化VM
基于Dom0安装一个虚拟机
# pv类型
# 该虚拟使用外部(Dom0)的引导启动文件和内核文件
1. 准备环境
yum -y groupinstall "Development Tools" "Server Platform Development" glibc-static ncurses-devel
2. 准备busybox文件
wget http://busybox.net/downloads/busybox-1.28.3.tar.bz2
3. 为busybox准备磁盘映像文件
qemu-img create -f raw -o size=2G /images/xen/busybox.img
mke2fs -t ext2 busybox.img
mount /images/xen/busybox.img /mnt/
4.编译安装busybox,并提供一个根文件系统,创建相应文件
tar xf busybox-1.28.3.tar.bz2
cd busybox-1.28.3/
make menuconfig
选择Settings
在Build Options中选择Build static binary (no share libs)
# 这样所有依赖的库文件都会打包好编译进内核
make
make install
# 拷贝编译安装的文件
cp -a _install/* /mnt/
mkdir /mnt/{proc,dev,sys,etc,var,boot,home}
5. 切换根目录到/mnt下,使用busybox系统
chroot /mnt /bin/sh
# 没问题后,准备在DomU运行此系统
umount /mnt
# 我们需要使用系统自带文件引导启动映像文件
ln -sv vmlinuz-3.10.0-514.el7.x86_64 vmlinuz
ln -sv initramfs-3.10.0-514.el7.x86_64.img initramfs.img
6. 创建桥接设备
https://wiki.xenproject.org/wiki/Network_Configuration_Examples_(Xen_4.1%2B)
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-xenbr0
vim ifcfg-eth0
# 删除IPADDR、NETMASK、GATEWAY、DNS
BRIDGE=“xenbr0”
vim ifcfg-xenbr0
# 删除mac地址,boot类型为static
TYPE=Bridge
service network restart
chkconfig NetworkManager off
# CentOS6使用修改配置文件的方式创建桥设备会死机
# 可能是bridge-utils和CentOS6内核有冲突,可以尝试升级bridge-utils
# 或者使用brctl命令的方式创建桥设备
ifconfig eth0 0
brctl addbr xenbr0
brctl addif xenbr0 eth0
brctl show
ipconfig xenbr0 x.x.x.x/x
# 下面尝试升级bridge-utils
下载并安装新的 bridge-utils-1.5-9.el7.x86_64.rpm
rpm -q bridge-utils
# 再次尝试创建桥设备
# 发现还是不行,内核运行还是崩溃了
# 下面方案尝试使用旧版内核,使用阿里云yum源下载指定的kernel,以及对应的固件驱动
# 内核一定要下载,不要更新,更新一但使得系统不能运行,此虚拟机将不能再使用
yum install -y kernel-3.10.68 kernel-firmware-3.10.68
/usr/bin/grub-bootxen.sh
# 此方法没问题,内核不会运行时崩溃
7. 使用xl文件创建一台Xen虚拟机
cp /etc/xen/xlexample.pvlinux busybox
vim /etc/xen/busybox
name = "busybox-001"
root = "/dev/xvda ro"
kernel = "/boot/vmlinuz"
ramdisk = "/boot/initramfs.img"
extra = "selinux=0 init=/bin/sh"
memory = 256
#vif = [ '' ]
disk = [ '/images/xen/busybox.img,raw,xvda,rw' ]
vif = [ 'bridge=xenbr0' ]
xl help create
xl -v create busybox -n
xl -v create /etc/xen/busybox
xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 2 r----- 970.2
busybox-001 5 256 2 r----- 3.8
xl create /etc/xen/busybox -c
8. 由于我们使用了网卡,必须确保DomU上有相应的网卡驱动
cd /lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/net
mount -o loop /images/xen/busybox.img /mnt/
mkdir -pv /mnt/lib/modules/
cp xen-netfront.ko /mnt/lib/modules/
sync
umount /mnt
9. 连接至虚拟机的控制台
xl console busybox-001
# 手动装载网卡驱动
insmod /lib/modules/xen-netfront.ko
ifconfig
# 可以看到虚拟机的前端网卡
10. 返回shell
Ctrl + ]
ifconfig vif3.0
# 可以看到虚拟机的后端网卡,3.0和DomU的ID有关系,表示ID为3的虚拟机上的第0块网卡
brctl show
# eth0和vif3.0后桥接在虚拟网桥上
11. 销毁虚拟机
xl destroy busybox-001
使用Dom0中的磁盘分区为DomU提供存储空间
# 性能会有所提高,但是不能进行虚拟机迁移
1. 准一个磁盘分区
fdisk -l
fdisk /dev/sda
# 在物理机上
# t 指定分区类型
# 指定为8e LVM类型
2. 刷新分区表信息
kpartx -a /dev/sda
3. 创建逻辑卷
pvcreate /dev/sdb1
vgcreate vg /dev/sdb1
lcreate -L 2G -n busybox vg
4. 格式化分区
mke2fs -t ext2 /dev/vg/busybox
5. 挂载分区
mount /dev/vg/busybox /mnt
6. 同样复制busybox文件到分区中
cd busybox-1.28.3/
cp -a _install/* /mnt/
# 创建目录
cd /mnt
mkdir /mnt/{proc,dev,sys,etc,var,boot,home}
7. 编辑xl文件
# 详细查看第一个实例
vim busybox
name = "busybox-001"
kernel = "/boot/vmlinuz"
ramdisk = "/boot/initramfs.img"
# 指定yum源上的kickstart引导启动文件
# yum源和ks文件准备这里就不缀述了
extra = "selinux=0 init=/bin/sh"
memory = 512
vcpus = 2
vir = [ "bridge=xenbr0" ]
disk = [ "/dev/vg/busybox,raw,xvda,rw" ]
root = "/dev/xvda ro"
8. 创建虚拟机
xl create busybox
xl list
xl console busybox-001
虚拟机安装实例3
# pv类型
# 安装一个完整的虚拟机,使用DomU自带内核模块、引导文件等
1. 制作磁盘映像文件
qemu-img create -f raw -o size=5G,preallocation=metadata /images/xen/busybox3.img
2. 设置并控制本地回环设备
回环设备( 'loopback device')
允许用户以一个普通磁盘文件虚拟一个块设备。
设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。
(当然,disk-image 必须存在于一个实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)回环设备允许你这样使用一个普通文件
回环设备的使用与其它任何块设备相同。特别是,你可以在这个设备上创建文件系统并像普通的磁盘一样将它挂载在系统中
# qcow2的磁盘映像文件格式不能使用回环设备创建分区,虚拟机中是不能识别的
显示已经使用的回环设备
losetup -a
显示空闲的第一个回环设备
losetup -f
关联磁盘映像文件和换回设备关系
losetup /dev/loop0 /images/xen/busybox3.img
3. 分区格式化
fdisk -l /dev/loop0
# 创建2个分区
...
kpartx -av /dev/loop0
# partprobe /dev/loop0 和上面命令作用相同
mke2fs -t ext2 /dev/mapper/loop0p1
mke2fs -t ext2 /dev/mapper/loop0p2
4. 挂载分区
mkdir /mnt/{boot,sysroot}
mount /dev/mapper/loop0p1 /mnt/boot
mount /dev/mapper/loop0p1 /mnt/sysroot
mount
df -h
5. 拷贝引导启动文件
cp /boot/vmlinuz-3.10.0-514.el7.x86_64 /mnt/boot/vmlinuz
cp cp /boot//initramfs-3.10.0-514.el7.x86_64.img /mnt/boot/initramfs.img
6. 安装引导配置文件
grub-install --root-directory=/mnt /dev/loop0
vim /mnt/root/grub/grub.conf
default = 0
timeout = 5
titile BusyBox(kernel-3.10.0)
root (hd0,0)
kernel /vmlinuz root=/dev/xvda1 ro selinux=0 init=/bin/sh
initrd /initramfs.img
7. 拷贝busybox安装好的文件
# 如果安装参考上一个实例
cp -a busybox-1.28.3/_install/* /mnt/sysroot
mkdir -pv /mnt/sysroot/{proc,dev,sys,etc,var,boot,home}
8. 拷贝网卡前端驱动
cp /lib/modules/3.10.0-514.el7.x86_64/kernel/drivers/net/xen-netfront.ko /mnt/sysroot/lib/modules
sync
9. 收尾工作
umount /mnt/boot
umount /mnt/sysroot
losetup -d /dev/loop0
# 删除分区信息
kpartx -d /dev/loop0
losetup -d /dev/loop0
losetup -f
10. 准备xl文件,用于创建虚拟机
# 具体如果创建查看上一个实例
vim busybox3
#kernel
#extra
#root
disk = [ '/images/xen/busybox3.img,raw,xvda,rw' ]
# 由于虚拟磁盘不能装载MBR分区信息,bootloader就必须再xen中提供
bootloader='/usr/bin/pygrub'
# grub第一阶段由它来引导,后续引导会自动读取/images/xen/busybox3.img,grub第二阶段正常进行
11. 创建虚拟机
xl create busybox-003 -c
# 至此引导没有问题,如果终端不能显示,则需要使用console指定虚拟终端
使用yum源安装虚拟机
# 安装一个CentOS6虚拟机
# 1.准备启动引导和内核文件
# 自行挂载CentOS6的光盘
mount /dev/cdrom /media/cdrom
cd /media/cdrom/isolinux
mkdir -pv /images/kernel
cp initrd.img vmlinuz /images/kernel/
# 2.准备磁盘映像文件
qemu-img create -f raw -o size=20G,preallocation=metadata /images/xen/centos6.img
# 3.拷贝xl文件
mkdir -pv /images/xen/centos
cp /etc/xen/xlexample.pvlinux /images/xen/centos/
# 4.编辑CentOS xl文件
vim /iamges/xen/centos/xlexample.pvlinux
name = "centos6-001"
kernel = "/images/kernel/vmlinuz"
ramdisk = "/images/kernel/initrd.img"
# 指定yum源上的kickstart引导启动文件
# yum源和ks文件准备这里就不缀述了
extra = "ks=http://yum_server_ip/cfg_path/filename.cfg"
memory = 512
vcpus = 2
vir = [ "bridge=xenbr0" ]
disk = [ "/images/xen/centos6.img,qcow2,xvda,rw" ]
on_reboot = "shutdown"
#root
mv /iamges/xen/centos/xlexample.pvlinux /iamges/xen/centos/CentOS6
# 查看编辑文件是否正确
grep -v "^#" xlexample.pvlinux | grep -v "^$"
# 5.xl引导创建虚拟机
xl create /iamges/xen/centos/CentOS6 -c
# 6.收尾工作,修改配置文件
vim /iamges/xen/centos/CentOS6
#extra
#kernel
#ramdisk
bootloader = "pygrub"
# 第一次引导安装完成后,虚拟机自己就用了bootloader文件,可以自行引导启动
# 7. 虚拟机模板
# 可以将当前虚拟机的映像文件当做模板文件,并配置相关的xl文
# 但并不能直接使用,我们需要将虚拟mac地址、IP地址、SSH-id等产生冲突的文件拆除
# 可以使用专门为云主机做磁盘映像文件初始化
yum info cloud-init
Available Packages
Name : cloud-init
Arch : x86_64
Version : 0.7.9
Release : 9.el7.centos.6
Size : 628 k
Repo : updates/7/x86_64
Summary : Cloud instance init scripts
URL : http://launchpad.net/cloud-init
License : GPLv3
Description : Cloud-init is a set of init scripts for cloud instances. Cloud instances
: need special scripts to run during initialization to retrieve and install
: ssh keys and to let the user run various scripts.
libvirt管理工具
实现xen虚拟机管理
# 服务包安装
yum install -y libvirt libvirt-daemon-xen
# 启动服务
service libvirtd start
# 工具包安装
# 图形控制台
yum install -y virt-manager python-virtinst
# 默认使用virt-manager创建的磁盘映像文件路径
ls /var/lib/libvirt/images/
# 命令行工具后续博客将更新使用方法
yum install -y libvirt-client
# 命令
virsh
virsh-install
Xen虚拟化的更多相关文章
- Xen虚拟化基本原理详解
标签:虚拟化 xen 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangzan18.blog.51cto.com/80210 ...
- CentosX64使用yum快速搭建xen虚拟化环境
Xen的大名想必已经被众SA所熟知.Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发.它打算在单个计算机上运行多达100个满特征的操作系统.操作系统必须进行显式地修改(“移植”)以在Xen上运行( ...
- 台式电脑部署xen虚拟化的各种问题
本打算用一台台式机做xen虚拟化,搞了一天搞得焦头烂额还是没搞定,中间遇到各种奇葩问题,这里mark一下 1.计划用三块2TB的SATA硬盘,然后装centos5 做虚拟化,结果忘记了centos5最 ...
- Xen虚拟化技术中PV和HVM的区别
转自 这里 Xen是一个开源的type-1或者裸机管理程序,它使得一个物理主机能够同时并行运行多个相同的或者不同的操作系统实例.Xen是目前唯一的开源可得的type-1管理程序.Xen被应用于许多商业 ...
- Xen虚拟化基础篇
一.xen的简介 Xen是一个开放源代码虚拟机监视器,由剑桥大学开发.它打算在单个计算机上运行多达128个有完全功能的操作系统. 在旧(无虚拟硬件)的处理器上执行Xen,操作系统必须进行显式地修改(& ...
- 安装使用xen虚拟化工具
换了一家新公司,需要拿出一套虚拟化方案,就把业界的主流虚拟化技术划拉了一遍,给领导交了一份报告,具体的技术部分已经在之前的随笔里了,本篇文章主要介绍的是xen虚拟化工具的安装: Xen官方部署文档:h ...
- kvm与xen虚拟化的比较(转)
Linux虚拟化技术的用户目前有两种免费的开源管理程序可以选择:Xen和KVM. 作为较早出现的虚拟化技术,Xen是“第一类”运行在裸机上的虚拟化管理程序(Hypervisor),也是当前相当一部分商 ...
- Xen 虚拟化技术
Xen 是一种开源的.属于类型1(裸金属虚拟化,Baremetal Hypervisor)的虚拟化技术,它使多个同样操作系统或不同操作系统的虚拟机运行在同一个物理主机节点上成为可能并实现. Xen 是 ...
- KVM与XEN虚拟化环境究竟有何不同
虚拟化的概念在近些年收到了很大程度上的普及,求其原因很简单:虚拟化能够最大程度利用资源,为企业节约成本.目前市面较受欢迎的虚拟架构主要有KVM.XEN和VMware,其中,KVM和XEN都是免费开源的 ...
随机推荐
- MySQL查询当天数据以及大量查询时提升速度
select * from 表名 where to_days(字段名) = to_days(now()) 一.数据库设计方面1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ord ...
- Hanoi双塔问题
题目描述: 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将这些圆盘移到C柱上 ...
- [LUOGU] 1090 合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 关于PHP版本比较函数version_compare的问题
$version1="v4.0"; $version2="v4.0.0"; print_r(version_compare($version1,$version ...
- mysql5.7.22-log 修改远程访问
正常的设置账号远程访问依然访问不了的情况,可以看一下服务器 my.cnf配置文件下 [client] #password = your_password 把上面的#去掉就行了.
- centos7内核优化
#sysctl -p 参数: net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv4.icmp ...
- css兼容处理-hack
浏览器兼容之旅的第二站:各浏览器的Hack写法 Browser CSS Hacks Moving IE specific CSS into @media blocks Detecting browse ...
- 守护进程,互斥锁,IPC,生产者与消费者模型
守护进程: b 进程守护 a进程,当a进程执行完毕时,b进程会跟着立马结束 守护进程用途: 如果父进程结束了,子进程无需运行了,就可以将子进程设置为父进程的守护进程 例如我们qq视频聊天时,当我们退出 ...
- (转)iOS 属性字符串
富文本的基本数据类型是NSAttributedString.**属性化字符串**(attributed string)是把属性设置到某些字符上的字符串.属性可以是任何键值对,但是为了实现富文本,则通常 ...
- S3C6410串口平台设备注册流程分析
1.mdesc->map_io() start_kernel -->setup_arch(&command_line); -->paging_init(mdesc); --& ...