---
# System prepended metadata

title: 虛擬化
tags: [Ali]

---

# 虛擬化

###### tags: `Ali`

> 將硬件轉變為軟件(資源抽象的形式), 是資源的邏輯表示

> 創建了一層隔離層, 把硬件和應用分離出來, 允許在同一組硬件上運行多個應用

> 不受物理限制的約束, 不會因為更換driver, 主機板, 讓服務變得無法運行

- 1999年vmware帶到了x86, 因此才會有公有雲概念
- 核心技術是虛擬化(軟硬解耦)

![](https://i.imgur.com/80lZODr.png)

我覺得可以這麼理解噎, 因為有虛擬化所以才可以把原本看不見的資訊透過軟體方面呈現硬體的利用率和使用狀況

透過hypervisor, 因此可以可以讓server, storage, network變成軟件定義(SD)


![](https://i.imgur.com/6zIrj1V.png)

![](https://i.imgur.com/a4svCyX.png)

![](https://i.imgur.com/IloYrk9.png)

host: 主機(物理服務器, 有主人的意思)
guest: 虛擬機(有客人的意思)

:star **host os -> hypervisor**, 和原本os最大差異在於, 接管了硬件資源, 並讓資源池化

所以主機透過hypervisor, 分割應用為虛擬機
 
熱遷移: 在不影響用戶的體驗下, 做到資源的切換. 

![](https://i.imgur.com/kazYoLB.png)

這張圖更完美顯示, 在架構上的差異

![](https://i.imgur.com/3DU4oJH.png)

原本一台主機僅可以跑一個應用程式. 因為os是獨享硬件資源, 透過虛擬化技術, 讓資源池化, 可以在相同硬件架構下跑多個資源, 同時增加硬件利用率. 

![](https://i.imgur.com/e51L68b.png)

Linux kvm是開源的項目.  

### Openstack

雲管平台, 管理vmware, kvm, 容器的工具, 不是虛擬化也非公有雲

### 虛擬化種類

![](https://i.imgur.com/Qg4xxJj.png)


## 超融合(HCI)

打包, 開箱及用, 但全部都是自家產品.  

## 嵌套

- 硬體-ESXi-VM-Windows

把虛擬機當服務器用
- 硬體-ESXi-VM-ESXi-VM-Windows

硬件輔助虛擬化
- Intel VT-x
- AMD-V

在公有雲上是不能這樣做的. 

## 虛擬化過程

- 裸機虛擬化, 在硬體(cpu, memory)上裝了軟件
- 寄居虛擬化, 在os上再裝了軟件

### cpu的完全虛擬化

為什麼虛擬機關機不會把真正主機也關起來?

> 在主人家的客人把自己當主人了, 主人家中的管家根本沒鳥他. 
> 透過binaray transfer, 轉換為對host os的指令, 但通過主機的cpu調用, 因此性能差

操作系統其實是一個管家, 應用程序要權限時會找管家要(例如:相機權限, 定位權限); 虛擬化讓guest vm裡面的os認為自己是管家(但這個管家不知道自己只是虛擬化後的), 因此可以執行像是host主機相同的操作

### 硬件輔助虛擬化

這需要裝在主機板上, 因為cpu架構不依樣, 所以指令集不依樣, intel vt, amd -v 

- 有兩層指令集

## 虛擬化特點

- 分區
    - 獨立資源
- 隔離
- 封裝
    - 環境封裝在文件中, 說白了遷移就是封裝文件
- 相對於硬件獨立
    - 不用在那邊插拔hdd

## cpu 

- socket 槽(單槽, 雙路): 1
- core 核心: 6
- vcpu (如果要做虛擬化最多12顆可以拿去分配) : 12, 其實看的是線程數量

![](https://i.imgur.com/TY4wosn.png)

可以看出
- 可以放2個插槽, 每個cpu, 6個core, 每個core兩個線程
(2*6*2= 24, 所以請了12個廚師來幫忙, 但有24個爐子)

### 多核vs超線程(hyper thread)

先有多核, 才有超線程

2顆 1core vs 1顆 超線程

2個廚師, 各有一個爐子
1個廚師, 但有兩個爐子

誰的速度快? 2個廚師

### Numa

非一制性內存訪問

## 超分

> 賭徒心態
> 虛擬化需求的資源總數超過物理機的資源總數
> cpu, memory都是給多少用多少, 而不是給多少就全用

[引用資源](http://www.1strender.com/cn/list/info_59.aspx?itemid=374)

總共有64個線程, 但是需要開啟10台vm, 每台虛擬機需要8個cpu

-> 乍看之下是不行, 但其實可以

那可以同時開機嗎? 

-> 乍看之下是不行, 但其實可以

總共有100g內存, 但是需要開啟10台vm, 每台虛擬機需要20G

-> 可以開機, 限制為150%


### 優勢

- 增加密度
- 降低採購成本

### 缺點

資源爭用

### 虛擬內存

> swap

放在硬盤上的內存空間