我从朋友的数据中心以极低的价格租用了 4 个服务器实例。正如广告宣传的那样,每个实例都应配备 4 个内核、时钟频率为 2.6GHz 的英特尔 CPU、8GB RAM 和 50GB SATA 驱动器内存。
他提供了通过 Docker 从 4 个较大的专用服务器中生成的实例的访问权限。
虽然知道有可能伪造这些规范直至弄乱 Linux 内核,但什么是最可靠的(不一定是最准确的)方法来确保我有权访问的这些服务器实例持有某种形式的这些规范?
我在想是否有一个我可以定期运行的测试,它不会干扰那些实例上运行的任务,让我检查时钟核心频率和 RAM,或者是否有任何方法可以通过加密方式证明/确保根据这些规范进行的计算是可能的。
有人有什么想法吗?
答案1
是的,可以确认服务器是否符合您给出的规格,前提是您不需要极高的准确性,并且假设它不是恶意设计来试图欺骗您的测试(例如,仅在测试时才为您提供全部资源),而是报告不真实的规格。测试这一点的最简单方法是尝试分配尽可能多的内存。您可以对存储执行相同的操作,以确保您的配额不小于您认为的配额。还有许多针对处理器的基准测试可以告诉您系统的整体性能。如果您预计会有更高级的诡计来欺骗您,您可以进行更详尽的测试:
记忆
测试内存量很简单。只需尝试分配尽可能多的不可压缩、不可可复制尽可能多地使用内存。为了准确执行此操作,您还需要禁用过度承诺,这允许分配比实际可用内存更多的内存。现在从内核分配尽可能多的内存并写入该内存,直到内存分配失败(mmap(2)
返回-ENOMEM
)。这将为您提供内存量的良好下限。请注意,某些虚拟化解决方案会为您提供突发内存限制,其中请求超过允许的内存量将在短时间内被允许。我知道 OpenVZ 有能力做到这一点,而且这在低成本 VPS 中很常见,但我不知道 Docker 的情况。
还可以通过以下方式测试内存吞吐量基准测试工具。适当的内存基准测试将确保 CPU 缓存不会影响结果。这将为您提供给定内存的总体吞吐量的粗略估计。请注意,实际速度通常更高,因为 CPU 缓存会将最近使用的内存内容保存在更快的内存中。
贮存
测试可用的存储量与测试可用的内存量类似,但更简单。您所要做的就是将尽可能多的不可压缩数据写入驱动器。一旦由于可用空间不足而无法继续写入,您就会知道您有多少存储空间。您可能需要检查您写入的所有内容是否仍然存在,因为某些存储设备(尤其是廉价的中国闪存驱动器)会错误报告其存储量,导致写入高地址会覆盖并覆盖您之前的写入。
可以使用以下方法对存储进行基准测试流行工具为该作业。这将为您提供介质的吞吐量和 iops 的指示。请注意,对存储设备进行基准测试是一项比许多其他基准测试对其他同时发生的工作负载更为敏感的操作。
处理器
可以通过查看在哪个点增加可并行任务的并发性不会提高性能来测试处理器的内核数量。在单个线程上启动工作负载以最大化一个内核。然后启动另一个,再启动另一个。继续这样做,直到性能改进开始下降。当添加新线程不会提高性能或实际上降低性能时,您就会知道您已经超出了可用于运行软件线程的硬件线程数。但请注意,许多现代处理器使用超线程或另一种形式的同时多任务处理。超线程可提高异构工作负载的性能,但同一物理核心上的两个逻辑核心仍然具有有限的资源。如果虚拟核心似乎不计算在内,请不要感到惊讶。
单个处理器的性能通常是主观的,因为有些任务比其他任务更高效(除两个浮点数比添加相同的数字需要更多的周期)。但是,如果您的基准测试显示实际性能远低于报告的性能,那么您就知道您受到了限制。使用RDTSC
指令,报告自 CPU 上次启动以来在最大时钟速率(速率动态调整)下经过的周期数。一个简单的汇编计数器循环以高优先级运行(以最大化给定的时隙)也可以让您了解处理器的当前时钟速度。不过,您需要了解特定 CPU 的性能特征才能解释这一点,因为了解不同指令的延迟和处理器管道的大小都很重要。