我正在一个分布式计算项目上,我想在作为虚拟机的计算机上运行更少的任务。如何在C#中从CPU检测hypervisor
标志?
我知道有很多答案需要检查主板制造商,显示适配器或某些字符串的MAC地址,但这些实现似乎很脆弱。
最佳答案
这些脆弱的实现似乎是您最好的选择。诸如C#和Java之类的语言从来没有真正打算像裸机那样运行得足够近,以轻松地实现运行时裸机交互的可靠实现,因此缺少指针和自动GC。实际上,现代VM实现首先应该甚至是make it difficult for you to tell you're running on a VM。
就是说,如果您知道虚拟机监控程序的IP地址(如链接所示),则可以检查请求的IP并进行相应的处理,当然,前提是您的虚拟机监控程序的IP地址是静态的,或者您知道确切的范围它可能拥有的IP地址数量。
PS:进一步讲,您还可以列出所有IP(如果它们是静态的),再编写一个列表,并编写自己的负载均衡器以按需引导流量。虽然,我很好奇,但是为什么要尝试从VM卸载任务?是否有您想削减尽可能多的开销的计算密集型任务?