Você está na página 1de 7

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (...

Page 1 of 7

Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (Capacity Planning)
En esta nota les voy a mostrar como realizar un Capacity Planning (CP) de CPU y I/O en forma sencilla usando matemtica simple. Para hacer un CP efectivo es importante determinar los subsistemas a modelar. Los subsistemas tipicos son CPU, I/O o discos, memoria y red. Existen productos comerciales que permiten realizar un CP global, sin tener que modelar por subsistema, pero yo prefiero analizar cada subsistema por separado ya que me parece que los resultados obtenidos sern mas precisos y claros. La CPU y I/O son claramente los mas importantes y son los subsistemas en los que vamos a ahondar en esta nota. Seguramente alguna vez su gerente les ha consultado si la cantidad de procesadores o la velocidad de los discos es adecuada para garantizar que el sistema permanezca estable. Ante esta pregunta uno puede simplemente tener confianza y contestar que todo va a funcionar bien o uno puede ser mas profesional y realizar un CP y saber con exactitud en donde estar el punto de quiebre, es decir no solo contestar si el HW soporta la carga actual sino tambien, teniendo la proyeccin de crecimiento transacccional anual, saber hasta donde nos alcanza nuestro HW y preveer con tiempo la compra o upgrade de HW. Ahora vayamos directamente a ver como se modela un subsistema de cpu y un subsistema de i/o. Para realizar CP mas sofisticado es necesario tener cierto conocimiento de Teoria de Colas (funcin Erlang C, Notacin de Kendall, etc). En esta nota simplemente alcanza con un poco de criterio. En el grfico A) se modela el subsistema de CPU. Este consta de una sola cola y N servers (cpu's). Esto quiere decir que cada peticin puede ser atendida arbitrariamente por cualquier server o cpu y se van encolando cuando todas las cpu estan ocupadas (runqueue en terminos de SO). En el grfico B) se modela el subsistema de I/O donde tenemos una cola por server o device. En este caso cada peticin debe ser atendida por un device determinado.

Los dos modelos mencionados se representan infinidad de veces en la vida cotidiana, cuando vamos al banco, cuando estamos esperando en la

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (... Page 2 of 7

estacin de peaje, cuando esperamos para abordar un vuelo, cuando vamos a hacer nuestro pedido en un restaurant de comida rapida, etc. Ahora vamos a definir las variables que necesitamos usar para realizar el CP:

Uc= User Calls trx= transaccin = tasa de arribo (ej: trx/ms Uc/ms) (ej: s/trx s/Uc) (ej: s/trx) (ej: s/trx) St= Tiempo de Servicio Rt= Tiempo de Respuesta Q= Encolamiento recurso) M= nro de servers IO devices) y las formulas: Rt = St + Qt U = St * / M Q = * Qt Rt(cpu) = St / (1-U^M) Rt(io) = St / (1-U) (cantidad de CPU's o cantidad de

Qt= Tiempo de Espera o Tiempo de espera (ej: Nro de trx's)

U= porcentaje de carga (porcentaje de utlizacin del

El objetivo es conseguir graficar el tiempo de respuesta vs tasa de arribo. El grfico debera ser tipo exponencial con una curvatura o punto de quiebre que muestre a que tasa de arribo (eje X) se produce dicho quiebre.

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (... Page 3 of 7

Voy a explicar un poco mas en detalle que significa cada cosa: 1) (Tasa de Arribo): Esta se puede definir con mtricas de Oracle tales como: Uc/s o Trs/s, o usar una mtrica funcional, por ejemplo: carga de ordenes de compra por minuto o por hora. 2) M (Cantidad de CPUs y I/O Devices): Es la cantidad de cpu's o I/O Devices. Para obtener este valor podemos usar utilitarios de SO y/o consultar vistas de Oracle. 3) U (Porcentaje de Carga): Es el porcentaje de carga de cpu o I/O. Esto se puede obtener usando utilitarios de SO como sar, iostat. 4) St (Tiempo de servicio): Es el tiempo en el que la peticin esta siendo atendida por la cpu o por el dispositivo de i/o. 5) Qt (Tiempo de Espera en la Cola): Es el tiempo que una peticin tiene que esperar en la cola porque los servers estan ocupados. 6) Q (Largo de la Cola): Es la cantidad de peticiones encoladas (esperando ser atendidas) 7) Rt (Tiempo de respuesta): El tiempo de respuesta es la suma de St (service time) y Qt (tiempo de espera o encolado). Una peticin o esta esperando o esta siendo atendido. En este punto, donde creo haber definido todo, les voy a mostrar un ejemplo:

Ejemplo (Capacity Planning de CPU) Supongamos nos piden estimar el impacto que se producir si se incrementan los usuarios de una aplicacin X en un 30%. Lo que se quiere determinar es si se necesitar agregar mas procesadores o con lo que hay es suficiente para soportar la carga adicional.

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (... Page 4 of 7

Lo primero que tenemos que hacer es recolectar informacin en un periodo representativo. Cuanto mas datos recolectemos mas precisa ser nuestro CP, luego debemos caracterizar la carga, esto significa definir si vamos a usar valores promedio, maximos, que vamos a usar como tasa de arribo, etc. En el ejemplo yo voy a tomar valores picos en un intervalo de maxima carga y como tasa de arribo usar Trx/s. = 20 trx/s (20 transacciones por segundo, se puede obtener desde statspack o AWR) U= 0,40 (40% de utilizacin de cpu, esto se puede recolectar con sar -u) M= 8 (hay 8 procedores, se obtiene desde el parametro de la base: cpu_count) Ya tengo los 3 parametros escenciales, ahora solo tengo que aplicar las formulas y graficar: U = St * / M, depejando para obtener St, St = U * M / = 0.40 * 8 / 20 = 0,24 s/trx Ahora que tenemos St podemos aplicar la formula para cpu: Rt(cpu) = St / (1-U^M) = 0,24 / (1-0.40^8) = 0,24 s/trx Como se observa el tiempo de respuesta es igual al tiempo de servicio. Esto se da porque el sistema esta holgado en cpu para la carga actual y no se producen encolamientos, es decir hay que esperar para ser atendido por las cpu's. Ahora lo que voy a hacer es una tabla en excel para proyectar el crecimiento y graficar la curva de manera de ver donde se produce el quiebre.

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (... Page 5 of 7

Vemos que el punto de quiebre esta alrededor del 60-70% (>), pensemos adems que estamos partiendo de un workload pico y por lo tanto podemos pensar que la mayoria del tiempo va a estar bastante por debajo. De acuerdo al CP podemos asegurar que el sistema amortiguar bien la carga adicional del 30%, comenzando a degradarse rapidamente a partir del 50%.

Ejemplo 2 (Capacity Planning de I/O) Como analizamos en el ejemplo 1, no tendriamos mayores problemas con la cpu al incrementar en un 30% la carga. Ahora veamos que ocurre con los discos. = 5Mb/ms (5 Mb de transferencia por milisegundo, se puede obtener con sar -d o iostat) U= 0,60 (60% de utilizacin de i/o) M= 50 (hay 50 devices) St = U * M / = 50 * 0.60 / 5 = 6 ms/Mb Reemplazando en la formula de i/o: Rt(io) = St / (1-U) = 6 / (1-0.60) = 15ms/Mb

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (... Page 6 of 7

Como se ve en el grfico, el sistema podra soportar hasta un 50% (7.5Mb/ms) de crecimiento, una vez que llega al 60% de destabiliza. Como resumen podemos inferir que nuestro Hardware esta bien a nivel cpu no tanto a nivel i/o ya que no escalar a largo plazo. En esta nota mi idea fue mostrar como realizar un capacity planning de cpu y i/o en forma sencilla. Con este metodo tendremos una buena estimacin de como escalar nuestro HW. De acuerdo a cada caso existen otros enfoque para modelar tales como el metodo basado en ratios, Teoria de Colas y metodo de regresin lineal. Lo mas importante para obtener estimaciones precisas es obtener una buena muestra, que sea representativa sumado a una buena caracterizacin de la carga de trabajo a evaluar. Cuanto mas informacin hayamos recolectado mejor ser nuestro pronstico. Usando esta metodologia se puede realizar simulaciones y proyectar a futuro, por ejemplo: que pasara si agregamos o sacamos cpu's, como impacta el agregado de dispositivos de i/o mas rapidos, con mayor throughput y menor latencia, cuantos usuarios se podrian agregar para que operen con la aplicacin sin poner en riesgo la estabilidad del sistema, etc.

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010

OraMDQ: Como realizar una estimacin de capacidad y escalabilidad de CPU y I/O (... Page 7 of 7

Para los que le interesen temas de Capacity Planning en Oracle les recomiendo: "Forecasting Oracle Performance". Este libro escrito por Craig Shallahamer, un verdadero gur en el tema, me pareci excelente y lo us como referencia para escribir la nota.

http://oramdq.blogspot.com/2010/09/una-forma-sencilla-de-realizar.html

27/12/2010