最近在我的本本上裝VMWare+Solaris 10遇到以下的問題
在網上找了很久,看到不少TX也遇到相同的問題,都沒很好解決
最後終於在VMWare官網的文檔中找到解決方案,寫出來與大家分享
環境:
AMD Turion64x2 Windows Vista VMWare 6.0.2
現象:
在虛擬機啟動的時候 報出以下錯誤
Your host does not have synchronized TSCs. Please read VMware Knowledge Base article 2041.
——你的主機沒有同步TSCs.
忽略掉繼續運行
在運行Solaris 10的安裝程序時報出以下錯誤
Warning:Time of Day clock error:reason [Stalled] —— Stopped tracking Time of Day clock.
安裝可以繼續,沒發生其他什麼問題。
但在安裝成功後的系統使用過程卻中發現虛擬機中的CPU時鐘頻率有問題。這裡要說明以下,不是指的虛擬機中的時間與主機時間不一致,而是CPU的時鐘頻率有問題,現象是在Solaris 10中運行一個程序時速度過快,就像裝了加速器一樣。比如顯示進度條時明顯發覺進度條動得太快,不正常。也許有的TX會說這樣不是挺好的麽,速度快還不好?速度快當然是件好事,可是痛苦的時鍵盤的響應速度也太快了,按一個鍵下去就是一串字符出來,想正確的輸入一個命令簡直就是一件痛苦的事情。
開始在Google上找答案,發現遇到該類問題的TX不少,可是基本上所有的人都把這兩個錯誤分別對待了,給出了對這兩個錯誤分別的解決方案,一一試下來發現問題並沒有解決。後來終於在VMWare官網的文檔中找到了解決方案。
原因:
When a system has processors that have timestamp counters which are not all synchronized, the host operating system may move a virtual machine between two processors on which the timestamp counters are out of sync. This can cause the virtual machine clock to perform unpredictably. The clock may run too quickly or too slowly, or may even stop at times.
以上是官網給出的原因,大意就是在沒有同步的多處理器操作系統中,會引起虛擬機時鐘出錯,有可能太快、太慢甚至是停止運行
解決方案:
You must perform two actions.
Disable a feature in some versions of VMware products that attempts to resynchronize the TSCs whenever a virtual machine is started.
設置虛擬機的TSC同步模式為非強制同步
具體做法就是更改VMWare的config.ini位置在(C:\ProgramData\VMware\VMware Workstation)
添加host.TSC.noForceSync = TRUE
config.ini位置在 Vista:C:\ProgramData\VMware\VMware Workstation
XP:C:\Documents and Settings\All Users\Application Data\VMware\VMware Workstation\
Assign each virtual machine to a subset of processors whose TSCs are synchronized with each other.
設置虛擬機只用CPU的一個NUMA node
NUMA node 這個名詞我沒有查到具體的解釋, 大意就是多核或則多線程的CPU可以被分為多個同步的子集,一個NUMA node就是其中的一個子集(純屬個人理解,歡迎DX指正)
這個需要設置.vmx文件(每個虛擬機建立時會生成一個這樣的文件,可在你設置的虛擬機目錄下找到)
添加processors.NUMAnode = "n" 其中n=0,1,2......表示第幾個子集
也可以設置processorn.use = FALSE 其中n=0,1,2......表示第幾個CPU
以上的兩條語句設置其中一條即可,在同時設置時processors.NUMAnode這條有效processorn.use會被忽略
但是好像又指出AMD的芯片只能用processorn.use來設置,我的CPU是雙核也就是processor0和processor1,所以我設置的是processor0.use=FALSE
經過以上設置,前面提到的兩個錯誤不再發生,系統正常運行。
總結:
其實這兩個問題都是由於TSC無法同步造成的,第一個錯誤是VMWare的虛擬機運行時報出,第二個錯誤是Solaris操作系統報出,屬於同一問題。