gpt4 book ai didi

java - 为什么亚马逊 ec2 的性能会下降很多?

转载 作者:行者123 更新时间:2023-12-02 07:07:14 25 4
gpt4 key购买 nike

不详细讨论我的算法,只是给出一些实验结果。对于某些给定的输入,我的 Java 顺序算法在我的笔记本电脑(Intel Core i5 430M - 2 核、4 线程、2.27 GHz、4Mb 缓存、3Gb 内存)上运行 4 秒。该算法的并行版本使用 1 个线程运行 6 秒,使用 2 个线程运行 5 秒,使用 3 个线程运行 4 秒。如果我通过 ssh 在 amazon ec2 上运行它,则顺序时间为 6 秒,并行时间为 6 到 7 秒,无论有多少线程。

为什么你认为它比较慢?因为亚马逊使用虚拟机并且代码运行速度较慢?您的经历如何?

我有一个应用程序,想要在具有大量内存和计算能力的环境中进行测试。目前在亚马逊上未成功。

我使用普通 Java 对象和 hppc外部库(高性能原始计算库)。没有数据库和花哨的东西。

实例类型是c1,也许是这个(如果正确的话我很快就会告诉你,我知道它是c1,但不知道它是中型还是大型):

High-CPU Extra Large Instance
7 GiB of memory
20 EC2 Compute Units (8 virtual cores with 2.5 EC2 Compute Units each)
1690 GB of instance storage
64-bit platform
I/O Performance: High
EBS-Optimized Available: 1000 Mbps
API name: c1.xlarge

最佳答案

根据我的经验,虚拟机具有非常昂贵的多线程任务切换代价,在以下情况下可能会导致严重的性能损失:

  1. 您的线程有很多线程间通信,并且
  2. 一台物理机上运行多个虚拟机。

虚拟机“核心”实际上作为线程映射到物理机的主操作系统上。如果主操作系统的线程量程为 30ms,并且 VM 的线程量程也为 30ms,那么可能发生的情况是:

  1. 虚拟机将尝试“唤醒”其虚拟核心之一上的 hibernate 线程。
  2. 向硬件操作系统发送信号以唤醒物理核心上的线程。
  3. 另一个虚拟机正在使用它们。等待量子 30 毫秒。
  4. 线程在硬件上唤醒。

如果您的其他线程期望响应速度快于 30 毫秒,那么您就遇到了瓶颈。更糟糕的是,基于 Linux 的服务器上非空闲线程调度的默认量程实际上约为 100 毫秒。

Amazon EC2 系统不仅仅是虚拟机,它们还是共享单个物理机的虚拟机。为了让每个服务器机架获得最大 yield ,亚马逊还必须在某种程度上超额订阅系统。例如:

  • 物理主机有 16 个 HT 线程(8 个物理核心)
  • 每个虚拟机有 8 个虚拟核心
  • EC2 将在计算机上安装 3-4 个虚拟机(超额订阅)

这样做是因为很多应用程序没有使用满载的 8 核。但如果你搭配的是使用完整 8 核的设备,那么……真是太糟糕了!我不确定实际的配对比例是多少,我想亚马逊无论如何都会不断调整它。

关于java - 为什么亚马逊 ec2 的性能会下降很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com