為什麼Windows下,通過Hyper V安裝虛擬的其它Windows會這麼快?
如題,今天安裝紅石虛擬機的時候突然發現一個很有趣的現象:
如果不算上人工操作帶來的延時,那麼,從開始安裝操作系統算起,到最後進入桌面,整個過程只用了不到九分鐘。我的機器配置是512GB PCIe SSD + 16GB RAM + 雙核低壓CPU。最奇怪的是,我的電腦在裸機安裝Windows的時候卻感覺沒有這麼快……似乎其它網友也有反應這個現象。那麼問題來了:為什麼Hyper V安裝操作系統反而還要比裸機安裝更快呢?我的猜測:
1. 可能Hyper V用內存來給磁碟做了加速?2. 可能裸機安裝的流程中有某些步驟比Hyper V安裝更耗時?但我還是不太明白為什麼會這樣……是啊……為什麼會這樣呢……明明……明明是裸機先的……為什麼Hyper V裝系統會這麼熟練呢?補個圖:
實機用什麼介質裝的,u盤嗎?還是直接執行的setup.exe。。
打開你的資源監視器,顯示備用內存的深藍色區域,都是磁碟緩存。你有16GRAM,其中大多數都被用作備用內存,也就是所謂緩存。
也就是說,用虛擬機相當於在內存上裝系統。真機是ssd。內存比ssd當然快得多。因為裝好的WINDOWS,尤其是裝好了驅動之後的WINDOWS,比WINPE環境的驅動性能要好的多。
腦子裡跑了一遍系統安裝過程,沒實踐,就當我猜猜哈
我認為物理裸機和HyperV虛擬機的主要區別是在於硬體設備
物理裸機的硬體設備五花八門,碰到找了一圈兒Windows驅動列表裡沒有的設備,就用通用驅動程序頂上,硬體性能估計不能達到100%;
HyperV的虛擬硬體設備就不一樣了,MS設計HyperV的時候,或許就是根據Windows驅動列表的設備虛擬出來的現在用8 GB內存和SSD裝Win7/8/10,解包階段的文件讀寫延時感覺都不是裝機的時間瓶頸了,最花時間的應該是在系統服務和驅動的配置階段。
以上全靠肉眼觀察和瞎猜我猜你裝windows的時候是用光碟或者u盤,而裝虛擬機的時候iso從ssd直接讀取?
前面雖然有很多人都提到了內存加速,但是緩存大小並不足以容納整個虛擬機系統,緩存到磁碟寫入的提速才是真正的原因。
先上兩段代碼:
char src[256], dst[4096];void memory_copy(){
for(int i = 0; i &< sizeof(src); i++){ dst[i] = src[i]; }}--------------------------------------------char src[256], dst[4096];
void memory_copy(){
int *integer_src, *integer_dst; integer_src = (int*)src; integer_dst = (int*)dst; for(int i = 0; i &< sizeof(src) / sizeof(int); i++){ integer_dst[i] = integer_src[i]; }}上面兩段代碼雖然都是對內存的拷貝,但是顯然下面的速度要快,因為下面的memory_copy每次拷貝了一個int大小(4個位元組)的數據,而上面的memory_copy每次只拷貝了1個位元組。
到此我們引入iops的概念,即磁碟平均每秒的讀寫次數。其實不管是SSD還是機械硬碟,其iops都是有上限的,這個上限限制了最終數據傳輸的速度。iops的限制最直接的體現就在於大量小文件的讀寫,大量小文件的讀寫會佔用磁碟io,但是單次傳輸的數據量並沒有達到文件系統以及磁碟單次寫入數據大小的上限,其結果就表現為數據傳輸速度的降低。
安裝操作系統其實可以簡單的歸結於對文件的拷貝,但是系統的ISO鏡像解壓會產生許許多多的文件,系統安裝程序會還會對這些文件進行拷貝,在這個過程中就涉及到了許許多多的磁碟的讀和寫。
但是說到這裡我們還是不明白為什麼裸機安裝操作系統沒有安裝虛擬機快,其實前面已經有很多人都說到了,那就是緩存。但是內存做緩存大小也是有限的,很多人都沒有解釋為什麼有了緩存就會快,其最重要的原因就是io合併,所謂io合併就是把許許多多的小的io操作合併成一個大的io,上面的代碼就可以類比成io的合併。
虛擬機的系統實際上是可以看作是一個大的文件,虛擬機內部對文件的讀寫操作相當於在裸機上一個應用(類似於linux平台的qemu或者vbox進程,又或者windows下的vmware進程)進行的文件讀寫。只不過這個應用比較聰明,它拿到了虛擬系統的io操作以後並沒有寫入磁碟,而是寫入了緩存(內存),並且把許多的連續io進行了合併,然後再寫入磁碟。這個過程相當於降低了真正的物理磁碟的iops,也就相當於提高了虛擬機的文件讀寫速度,最終加速了系統的安裝過程。
Linux就有類似的例子,當我們在向U盤進行文件的拷貝時只要執行一條cp命令,但是cp命令執行結束並一定不代表文件的拷貝完成,因為往往這個時候我們用umount命令卸載我們的U盤是無法成功的,這時我們可能還需要執行一下sync命令。這是因為Linux對io的讀寫進行了加速,實際的文件內容還在內存里,還沒有真正的寫入到U盤的文件系統中去。其實我在我自己黑果上,用parallell裝win10,7分鐘左右,硬體配置嘛,l5639 6核12線程,ssd 跑在sata2上。其實在虛擬機裝系統,不耗費的只有io,cpu從來沒超過10%
我在Windows10 上用hyper-v裝過Ubuntu,如果用動態內存分配的話很卡。
伺服器的開機速度那麼慢,是因為硬體不行了嗎?
推薦閱讀:
※如何向不了解微軟的人說明"微軟大法好"?
※Windows 上有哪些輕量級的電腦衛士類軟體?
※將 Windows Server 作為個人 PC 操作系統來用是怎樣的體驗?
※MacType 選擇哪種配置文件最好?
TAG:微軟Microsoft | MicrosoftWindows | 虛擬機 | 虛擬化 | Hyper-V |