8. Un Ampl io E spectr o de Capacidades de Cómputo en la Nube de AW S
P2M4 D2 X1 G2T2 R4 I3 C5
GPU de Uso
General
Propósito General
Storage Denso Memoria Grande
Gráficos IntensivosIntenso en Memoria Alto I/O
Cómputo IntensivoBurstable
Disponibilidad General
desde Diciembre 2016
Disponibilidad General
desde Diciembre 2016
I3 Disponibilidad General desde Febrero 2017
C5 Próximamente
Quiero que se lleven action items de esta presentacion
EC2 es un gran team y se puede hablar de todos estos temas …..
Whenever I give talks about EC2, I start by saying it’s big – not just because we operate at a huge scale, but because there’s a lot to learn about the service
You can learn about our purchase options, including spot and reserved instances, and there are other talks this week where you can learn about those
You can learn about networking area, which includes VPC, and there are some good talks about that
And then you can the ways you interact with EC2 to launch instances and set things up, that includes the console, SDK and other was of using our APIs. And you have companion services such as autoscaling, cloudwatch, autorecovery, etc.
Then there are the instances themselves
The analogy I use is a car, that setup and launching is like turning the keys to the car, and your workload running on an instance is like driving the car.
If the car’s performance is virtual machine performance, and this session is about driving the car.
Son máquinas virtuales
Son guests que están dentro de un servidor físico y se comunican con el hardware a través de un hipervisor
La primera instancia tuvo 1vCPU y 1.75GB de RAM
Era como el modelo T, de FORD. Podrías tener ese coche en el color que tu quisieras, siempre y cuando fuera negro.
No había opciones.
La llamamos la M1.
Hemos crecido el número de instancias disponibles. La que tuvo mayor disrupción fue en el 2012, la CC2. Fue la primera instancia que podías lanzar dentro de algo que llamamos un “placement group” y con esto controlar la latencia que tenía al comunicarse con otras instancias dentro de ese mismo placement group.
También en 2012 integramos tecnología Hardware Assistant Virtualization (HVM). Esto le permite a un guest hablar directamente con algunos de los componentes físicos de HW sin necesidad de hablarle al hipervisor para que luego este le pasara las instrucciones al HW físico
A la fecha tenemos mas de 40 tipos de instancias… desde 512 MB ram hasta 2TB y el número sigue creciendo. Tenemos documentación siempre actualizada y para que tomen sus decisiones
We offer a variety of models with different performance profiles.
In August 2006 the EC2 private beta was announced with one instance type. It actually didn't even have a name at first but it was what would become an m1.small. It had one vcpu and 1.75 GB of ram.
I started at the beginning of 2013 and it's crazy for me to think we've launched almost 2/3 of all existing instance types since then.
One reason for that is expansion of breadth- we have 5 different instance families each with a different performance angle
The other reason is that we do generations. Within each family are generations, and with each generation we bring new technologies to each family.
One of my favorite conversations with customers is about generations, and what the next generation will look like.
The most recent additions were announcing this morning – the X1 and t2.nano
2011 – HVM More of the underlying hardware, and not in the ypervisor
Cc2.8xlarge , first time you could use clustering technolgy with Placement Groups
Antes de pasar a la información principal de esta sesión, les platico sobre la nomenclatura:
La primer letra se refiere a la familia de la instancia… C– Compute, R- RAM, I- Alta cantidad de IOPS, D- Denso almacenamiento, etc.
El número consecuente es la versión de la familia. Por ejemplo, estamos en la cuarta generación de la familia R, en la segunda generación de la familia T, etcétera
Después del punto tenemos el tamaño, que se mide como tallas de ropa. Desde small hasta large, xlarge, 2xlarge, etc
Esta es una instancia m4.10xlarge
Te da el numero de cache, buffer, cores, etc.
40 threads y 20 cores físicos = 40vcpu
Por default, hyperthreading está encendido.
Siempre lo necesito encendido???????
Hay algunas aplicaciones que no son beneficiadas por tener hyperthreading ya que son afectadas por el “content switching”, que significa la cantidad de tiempo que le toma al procesador pasar de un cpu a otro, por ejemplo:
Financial Risk Calculations
Engineering simulations
Para ejecutar este tipo de aplicaciones, tanto On Prem como en AWS, se recomienda deshabilitar hyperthreading
Mira lo que estan haciendo actualmente
If you don´t know, you probably don´t need to worry about it.
Dos maneras de hacerlo:
Ciclo For y deshabilitando procesadores
Inestabilidad en el sistema si esta corriendo
Si reinicia, se pierden los cambios
Preferida, Linux grub GRUB Boot Parametro
Downside: Reboot
Change Instance to another, need to update
Windows is harder, because it´s alternando.
CPU Thread Affinity
Hyperthreading deshabilitado
Casi siempre el tamaño puede ser multiplicado… una 8xlarge es casi igual a 2 4xlarge o igual a 4 2xlarge u 8 xlarge
Tipicamente, cuando ejecutas la instancia mas grande, eres el único que corre sobre el host físico
Cuando estás corriendo instancias mas pequeñas, estás compartiendo el host físico
Existe mala reputacion en la virtualizacion . . .Oversubscription Ratio
En AWS usamos Virtualizacion para otras razones.
Seguridad y Aislamiento
Dedicar recursos especificos a clientes especificos
Un vCPU es TUYO. No está sobresuscrito. Lo mismo aplica para memoria y red.
La plataforma provee consistencia
Excepcion la familia T2
Lo mejor es instalar tu propia aplicación y no solamente hacer benchmarking.
Vamos metiendonos al OS. Y como interactuan con EC2
Llevar el tiempo es una tarea crítica. Con esto se miden las interrupciones entre procesos, los ciclos de reloj, etc.
Casi todas las AMIs en AWS utilizan como fuente del tiempo el XEN CLOCK (el reloj del hipervisor)
Compatible con todas las instancias que existen
Cuando Salió al mercado el procesarod SandyBridge Processor – TSC estuvo disponible
Manejado hablar con el bare metal
Cuando una funcion necesita obtener el tiempo, hablas directamente con el procesador fisico en vez de con uno virtual
Es por esto que las llamadas al reloj TSC van a ser significativamente mas rapidas
Ejecuta muchas llamadas solicitando la hora exacta del día y algunas tareas mátemáticas
Una vez ejecutado, estos son los resultados con XEN CLOCK (recuerden, este es el default). Aquí utilizamos strace para saber las llamadas al sistema que estan siendo realizadas y cuanto tiempo están tardando
Podemos ver que le tomó es 12 segundos
Modificando la fuente del tiempo a TSC en vez de XEN CLOCK, la ejecución del mismo programa toma 2 segundos.
De hecho, la operación para obtener el tiempo, que antes se llevaba el 99.99% del tiempo, ahora es tan rápida que ni siquiera aparece en la salida de strace
Tip, conoce tu aplicación para saber si es conveniente utilizar un reloj XEN o TSC
Es un cambio facil de hacer en linux.
Primer comando, todos los relojes disponibles en tu instancia
2do comando, el que se esta utilizando
El cambio se hace en caliente con el 3er comando
Si estas ejecutando cargas de bases de datos, SAP, debug de programación, prueba utilizando TSC
Otro cambio puede cambiar los estados P y C
Para empezar y hablando del C state:
El C stateTe permite configurar las opciones de ahorro de energia del procesador
Por ejemplo, la instancia C4.8xlarge tiene velocidad base de 2.9Ghz.
Solo usando 2 cores, estos pueden llegar a 3.5Ghz
Esto se puede alcanzar al poner los otros cores en estado de suspension
Esto se recomienda solamente si tu aplicación utiliza menos procesadores de los que tiene la instancia utilizada
Se puede limitar el limite de inactividad
P State permite seleccionar la frecuencia deseada de tus cores para aplicaciones que requieran consistencia mas que performance. Con esto deshabilitas el turbo boost.
Por qué quisiera no tener mas performance??!!
Existen aplicaciones que requieren consistencia en vez de velocidad, por ejemplo, engines de juegos en linea.
Servidores de Juegos, hacen loops y se necesita.
Clientes querran esta consistencia para que la frecuencia se mantanga siempre estable
Ahora ya vamos a hablar de estas instancias de la familia T que hemos estado dejando para después.
Son instancias de proposito general. Son las instancias mas económicas dentro de EC2.
Tenemos nuevos tamaños!! Xlarge y 2xlarge!!
Excelente para casos de uso donde la aplicacion se comporta con picos de rendimiento de CPU.
Paginas Web, Ambientes de Desarrollo
Se empieza con una base de performance. La magia viene con los Créditos que permiten pasarse de la linea base.
Creamos esta familia de instancia por que muchos clientes no usan el CPU 100% del tiempo. Con Creditos puedes tener la capacidad que requieres cuando la requieres, y no pagar cuando no se usan.
Como funcionan estos créditos?
Enciendes la instancia y viene con su balance de créditos lleno.
La instancia comienza a consumir sus créditos dependiendo de si necesita mas CPU que el baseline.
Cada crédito te permite utilizar un CPU completo por un minuto
Los créditos expiran cada 24 horas
Cuando una instancia está IDLE, comienza a guardar créditos para cuando realmente los necesite
Podemos ver las métricas de créditos en Cloudwatch
Se ve así:
Metricas de Cloudwatch
Hablando de memoria, la familia de instancias X (cuya versión actual es la UNO), es la familia de instancias enormes de AWS. Tenemos instancias de 1 y 2 TB RAM. Pronto saldrá una instancia con 4TB RAM
Cuando tienes toda esa memoria, una gestion efectiva de la memoria se vuelve critico
Acceder a la memoria local que tienes en un socket siempre va a ser mas rápido que acceder a la memoria de otro socket
Este concepto se llama NUMA (non uniform memory access)
QPI es el nombre del BUS que comunica un socket con otro.
Por ejemploooooooo…Dos Sockets (siguiente slide)
Estos son los dos sockets de una instancia r3.8xlarge
Cada socket tiene 122 GB de RAM
Entre cada socket tenemos dos QPI.
Si tenemos una aplicación que está corriendo en el socket de la derecha y requiere acceder a memoria RAM del socket de la izquierda, esta información debe pasar por el QPI
Ahora con las X1… cuatro sockets!! Mucho más complejo
Mas memoria por Socket 488 por socket.
EN lugar de 2 QPIs ahora tenemos 1 QPI por socket
NUMA se vuelve mucho mas importane
Que se puede hacer par mitigar esto?
Para quienes sean sysadmins en la audiencia, se habrán dado cuenta al monitorear procesos que, el SO mueve procesos de un socket a otro todo el tiempo
NUMA nos ayuda a mover procesos junto a la memoria a la que están accediendo
Si tu aplicación consume más memoria que la que tiene una NUMA ZONE, es mejor deshabilitar NUMA, para que no esté moviendo procesos de una zona a otra.
Con numactl puedes encadenar un proceso a una zona para que solo lea y escriba en memoria local a esta zona
Es super importante la versión de SO que estás utilizando
Historia de migracion de un cliente migrando
El cliente no estaba experimentando un buen performance en AWS
Tenía una aplicación hecha en casa
Le comenzamos a hacer pruebas utilizando perf
Probando con perf sobre red hat 6, nos dimos cuenta que mucho tiempo se estaba yendo en tareas del kernel y no en user space… además de que teníamos muchos page faults para una prueba de 10 segundos
Flame Graphs
Creada por Brandon Gregg
Mucho del tiempo de compilación de la aplicación se iba en instrucciones al hipervisor
Compilando la misma aplicación y corriendo la misma prueba en red hat 7 con perf por 10 segundos, en vez de 12mil records, la aplicación tuvo más de 425mil
y los page faults disminuyeron a menos del 1%
Y la misma gráfica con el mismo código en rhel 7, debido a que este SO utiliza instrucciones específicas para procesadores intel, no tenemos el overhead de escritura hacia el hipervisor
Entonces: Siempre utiliza el SO mas nuevo
Tenemos instancias específicas para grandes cantidades de datos: la familia I para mucha velocidad (IOPS), tienen muchos SSD locales y la familia D para discos magnéticos de gran tamaño.
Para obtener el mejor performance, necesitas el SO y Kernel mas moderno
La razón: El modelo de controlador dividido que XEN utiliza.
Como se muestra en la imagen, una aplicación escribe hacia el frontend driver, este frontend driver pasa la información al backend driver. Después este lo envía hacia el controlador del dispositivo, que a su vez lo deposita en el dispositivo de almacenamiento. Cada que esto sucede, se deben validar permisos y accesos hacia cada parte del sistema
MUUUCHO OVERHEAD
El problema esta entre el frontend y el backend driver
Con kernels antiguos, los cuales tienen mucho overhead, cada vez que quieres hablar al disco, debes hablar con el vmm, pedir los permisos necesarios para hacerlo, llenar el buffer con la data que quieres transferir, pasar el dato al backend, esperar a que sea escrito y después hacer un flush en el buffer para hacerlo nuevamente hasta que la operación de escritura finalice.
A partir del kernel 3.8, se implementaron los permisos persistentes. El permiso inicial es reutilizado para realizar una operación completa de escritura entre el frontend y el backend driver, así nunca se hace flush al buffer y mejoramos los tiempos de escritura y lectura de una manera significativa
Con uname -r puedo ver que kernel estoy utilizando
Como lo valido?
Como ya lo he comentado, usar un kernel moderno puede ser mas importante de lo que parece. Tenemos muchos clientes que están corriendo ubuntu 12, centos 6, rhel 6.
La realidad es que centos 6 fue lanzado en el 2009, hace muuuucho tiempo.
Hemos visto mejoras de hasta un 60% de rendimiento solo por mover aplicaciones de un SO viejo a uno moderno
Asi como el tema de almacenamiento, tenemos temas de networking.
Hace un par de años agregamos una nueva forma de interactuar con dispositivos de red. Esto utilizando una tecnología llamada SR-IOV. Esto significa: Redes mejoradas!!
Con esto, los paquetes van directo a la interfaz física del host y no al hipervisor
Para utilizarlo, necesitas un driver especial
El camino de la red es mucho mas simple. El controlador de la NIC a nivel SO se comunica directamente con el dispositivo físico
Con esto tienes mayor cantidad de PPS y reducción de jitter, por lo que la experiencia de utilización de red mejora significativamente
Y hace poco, en adición a las mejoras que hemos hecho en el campo de networking con SR-IOV, liberamos un nuevo adaptador de red, llamado ENA o Adaptador de Red Elástico
Fue lanzado junto con la familia de instancias X1
Ofrece hasta 20Gbps, a diferencia de los 10 que te da SR-IOV
Este rendimiento de red solo aplica en conexiones instancia-instancia dentro de EC2.
Si utilizas un placement group, el rendimiento de red es bidireccional (20Gbps de entrada y 20Gbps de salida)
Necesitamos considerar que, al salir de la red de EC2, va a existir un límite de 5Gbps
Tomar en cuenta que el throughput de red está ligado al tamaño de instancia
El rendimiento de los volúmenes EBS también tiene que ver con tu instancia EC2.
Existen instancias marcadas como ”optimizadas para EBS”, las cuales tienen un canal de red dedicado a comunicarse con EBS.
Está habilitado por default en la mayoría de nuevas familias
Muchas cosas que hacer para obtener un mejor rendimiento de tus aplicaciones en la nube. Las básicas:
Nuevos Sos
Seleccionar AMIs con HVM
Utiliza networking mejorado
Realiza pruebas de tu aplicación en diferentes instancias
Nuestra meta: Hacer virtualización transparente. Entregarte rendimiento en una VM igual que en un host físico y, de muchas maneras, ya estamos ahí