我正在开发分布式计算项目,我希望在虚拟机的计算机上运行更少的任务。如何在C#中检测CPU的hypervisor
标志?
我知道有很多答案涉及检查某些字符串的主板制造商,显示适配器或MAC地址,但这些似乎是脆弱的实现。
答案 0 :(得分:2)
那些脆弱的实现似乎是你最好的选择。像C#和Java这样的语言从来没有真正意图与裸机足够接近,以便轻松实现运行时裸机交互的强大实现,因此缺少指针和自动GC。实际上,现代虚拟机实现首先应该是make it difficult for you to tell you're running on a VM。
也就是说,如果您知道虚拟机管理程序的IP地址(如链接建议的那样),您可以检查请求的IP并相应地处理它,前提是您的虚拟机管理程序的IP是静态的,或者您知道它可能具有的确切IP地址范围。
PS:更进一步,您还可以列出所有IP - 再次,如果它们是静态的 - 并编写您自己的各种负载均衡器以根据需要引导流量。虽然,我只是好奇,你为什么要尝试从VM卸载任务?是否存在计算密集型任务,您希望尽可能减少开销?
答案 1 :(得分:1)
我认为你不应该将你的意识束缚在" hypervisor flag"。
您应该在数据库中的某个位置创建一个工作站列表,您可以在其中指定哪台机器是虚拟机以及应该处理多少任务。