Configuracion y Evaluacion Del Rendimiento de Sistemas

January 24, 2017 | Author: Ramiro Ramirez | Category: N/A
Share Embed Donate


Short Description

Download Configuracion y Evaluacion Del Rendimiento de Sistemas...

Description

Evaluación y Modelado del Rendimiento de los Sistemas Informáticos

Xavier Molero Carlos Juiz Miguel Rodeño

EVALUACIÓN Y MODELADO DEL RENDIMIENTO DE LOS SISTEMAS INFORMÁTICOS

EVALUACIÓN Y MODELADO DEL RENDIMIENTO DE LOS SISTEMAS INFORMÁTICOS

Autores:

Xavier Molero Departament d’Informa`tica de Sistemes i Computadors Universitat Polite`cnica de Vale`ncia

Carlos Juiz Departament de Cie`ncies Matema`tiques i Informa`tica Universitat de les Illes Balears

Miguel Jesús Rodeño Departamento de Ciencias de la Computación Universidad de Alcalá

Madrid

México Santafé de Bogotá Buenos Aires Caracas Lima Montevideo San Juan San José Santiago Sa˜o Paulo White Plains

Datos de catalogación bibliográfica

MOLERO, X.; JUIZ, C.; RODEÑO, M. J. EVALUACIÓN Y MODELADO DEL RENDIMIENTO DE LOS SISTEMAS INFORMÁTICOS PEARSON EDUCACIÓN, S.A., Madrid, 2004 ISBN: 84-205-4093-5 MATERIA: Informática 681.3 Formato 195 # 270 mm

Páginas: 344

Todos los derechos reservados. Queda prohibida, salvo excepción prevista en la Ley, cualquier forma de reproducción, distribución, comunicación pública y transformación de esta obra sin contar con autorización de los titulares de propiedad intelectual. La infracción de los derechos mencionados puede ser constitutiva de delito contra la propiedad intelectual (arts. 270 y sgts. Código Penal). DERECHOS RESERVADOS 5 2004 por PEARSON EDUCACIÓN, S.A. Ribera del Loira, 28 28042 Madrid (España) MOLERO, X.; JUIZ, C.; RODEÑO, M. J. EVALUACIÓN Y MODELADO DEL RENDIMIENTO DE LOS SISTEMAS INFORMÁTICOS ISBN: 84-205-4093-5 Depósito legal: M. PEARSON PRENTICE HALL es un sello editorial autorizado de PEARSON EDUCACIÓN, S.A. Equipo editorial: Editor: David Fayerman Aragón Técnico editorial: Ana Isabel García Borro Equipo de producción: Director: José Antonio Clares Técnico: María Alvear Diseño de cubierta: Equipo de diseño de Pearson Educación S.A. Impreso por: IMPRESO EN ESPAÑA - PRINTED IN SPAIN Este libro ha sido impreso con papel y tintas ecológicos

Índice general i

Prólogo

ix

Presentación 1. Introducción a la evaluación de rendimiento

1

1.1. Relación entre rendimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. El coste también cuenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 3

1.3. Relación entre prestaciones y coste . . . . . . . . . . . . . . . . . . . . . . . 1.4. La ley de Amdahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 5

1.5. Problemas resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.6. Problemas con solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.7. Problemas sin resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.8. Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2. Monitorización de sistemas y programas

27

2.1. Medida y monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.2. Herramientas más comunes en Unix . . . . . . . . . . . . . . . . . . . . . . . 29 2.3. El monitor sar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4. Monitorización de programas . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.5. Problemas resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.6. Problemas con solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.7. Problemas sin resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.8. Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3. Análisis comparativo de rendimiento

67

3.1. Medidas de rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.2. Resumen de rendimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 v

3.3. ¿Rendimientos significativamente diferentes? . . . . . . . . . . . . . . . . . . 73 3.4. Estrategias de comparación: ratios . . . . . . . . . . . . . . . . . . . . . . . 74 3.5. Problemas resueltos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

3.6. Problemas con solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 3.7. Problemas sin resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 3.8. Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4. Introducción al análisis operacional

103

4.1. Estaciones de servicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.2. Redes de colas de espera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.3. Leyes operacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 4.4. Problemas resueltos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.5. Problemas con solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 4.6. Problemas sin resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 4.7. Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 5. Aplicaciones del análisis operacional

133

5.1. Estimación del rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 5.2. Límites asintóticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.3. Mejora del rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 5.4. Problemas resueltos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

5.5. Problemas con solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 5.6. Problemas sin resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 5.7. Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 6. Caracterización de la carga

171

6.1. Representatividad de un modelo de carga . . . . . . . . . . . . . . . . . . . 173 6.2. Técnica de agrupamiento (clustering) . . . . . . . . . . . . . . . . . . . . . . 175 6.3. Otros criterios de agrupamiento . . . . . . . . . . . . . . . . . . . . . . . . . 183 6.4. Acceso a servidores web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 6.5. Problemas resueltos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

6.6. Problemas con solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 6.7. Problemas sin resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 6.8. Actividades propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 vi

7. Planificación de la capacidad 7.1. Capacidad adecuada . . . . . . . . . . . 7.2. Niveles de gestión y planificación . . . . 7.3. Los métodos de predicción . . . . . . . . 7.4. Unidades de predicción natural . . . . . 7.5. Capacidad bajo demanda . . . . . . . . 7.6. Planificación en escenarios muy variables 7.7. Problemas resueltos . . . . . . . . . . . 7.8. Problemas con solución . . . . . . . . . . 7.9. Problemas sin resolver . . . . . . . . . . 7.10. Actividades propuestas . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

8. Rendimiento de un servidor web 8.1. Planteamiento y metodología de resolución . . . . . 8.2. Escenario de explotación del servidor web . . . . . 8.2.1. Configuración del servidor web . . . . . . . 8.2.2. Información disponible . . . . . . . . . . . . 8.3. Estudio de rendimiento del servidor web . . . . . . 8.3.1. Construcción de un modelo de carga . . . . 8.3.2. Recolección de datos de parametrización . . 8.3.3. Construcción de un modelo de rendimiento 8.3.4. Mejora del rendimiento . . . . . . . . . . . 8.3.5. Planificación de la capacidad . . . . . . . . 8.3.6. Conclusiones . . . . . . . . . . . . . . . . . 8.4. Problemas sin resolver . . . . . . . . . . . . . . . . 8.5. Actividades propuestas . . . . . . . . . . . . . . . . Bibliografía

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . .

221 . 222 . 224 . 225 . 229 . 230 . 233 . 236 . 260 . 264 . 267

. . . . . . . . . . . . .

269 . 269 . 271 . 272 . 272 . 273 . 273 . 277 . 293 . 304 . 309 . 313 . 315 . 316 319

vii

Prólogo El responsable de un sistema informático se suele encontrar, habitualmente, en la difícil tarea de responder a preguntas como, por ejemplo: ¿soportará mi sistema la carga de trabajo del año próximo?, y si no aguanta, ¿cómo he de ampliar mi sistema para que la soporte? O bien: de las ofertas que me presentan los suministradores, ¿cuál de ellas responderá adecuadamente a la carga futura? A estas cuestiones, y otras similares, se puede responder fiándose solamente de la inspiración de cada uno, procedimiento siempre peligroso por poco fiable, o utilizar técnicas cuantitativas que arrojen algo de luz para responderlas adecuadamente. El presente libro de Molero, Juiz y Rodeño, Evaluación y modelado del rendimiento de los sistemas informáticos, representa un magnífico resumen de técnicas cuantitativas simples que ayudan a dar respuesta a las cuestiones anteriores. Su enfoque no es el de la teoría por la teoría, sino que, en cada capítulo, después de un pequeño repaso teórico, se entra de lleno en numerosos problemas agrupados en tres categorías: los que presentan la resolución completa, aquellos de los que sólo se da la solución y, finalmente, los que se deja su resolución a la discreción del lector. Aun cuando puede achacarse a algunos de los problemas resueltos una dimensión y complejidad puramente académicas, éstos no son de despreciar, pues ponen de manifiesto, a escala reducida, el proceso que debe seguirse —con ayuda de las herramientas adecuadas— en la solución de problemas equivalentes del mundo real y de dimensión industrial. Revisando el índice de este libro encontramos, en el Capítulo 1, una introducción al concepto de evaluación del rendimiento, los distintos criterios que hay que considerar en esta evaluación (técnicos y económicos), y la relación, a veces engañosa, entre las prestaciones y el coste de un equipo informático. No siempre lo más caro es lo mejor y, además, hay que tener en cuenta que los sistemas informáticos no son buenos o malos per se, sino adecuados, o no, a una carga concreta de trabajo. A partir del principio de que “aquello que no se puede medir no se puede controlar”, el Capítulo 2 trata sobre la monitorización de sistemas y programas. Dicho de otra forma, está dedicado a obtener información tanto de lo que está sucediendo en un sistema, como del comportamiento de un programa (ligado a los datos que procesa), no sólo desde el punto de vista externo, sino también desde el interno; es decir, se observa el sistema y el programa como si se fuera el responsable de la instalación. Hay que tener en cuenta que, en la actualidad, la mayor parte de los sistemas informáticos trabajan dando servicio a usuarios, normalmente remotos, que creen tener todo el sistema a su disposición. En definitiva, se podría decir que los usuarios no son más que un conjunto de “depredadores” de recursos del sistema informático, de los que no se sabe exactamente en qué momento harán uso del mismo. Por lo tanto, a priori, no podemos saber cómo se consumirán los recursos

que ofrece. Sin embargo, al menos a posteriori, hay que saber quién los ha consumido y en qué cantidad. Para ello es necesario conectar al sistema elementos de tipo software, aunque también, para ciertas variables, pueden ser útiles elementos físicos (hardware) de medida. El capítulo ofrece una visión general de un conjunto de herramientas empleadas con asiduidad en los sistemas más extendidos, de la forma en que se han de interpretar los resultados que ofrecen estas herramientas y, adicionalmente, del uso que se puede hacer de ellas. El Capítulo 3 está dedicado a técnicas para la comparación de las prestaciones de diversos sistemas. El tema es sumamente interesante y pone de manifiesto cuán frágiles son las técnicas utilizadas en la actualidad para efectuar dichas comparaciones, que pueden, actuando de mala fe, demostrar una hipótesis y su contraria. En todo caso, la conclusión a extraer del mismo no es tanto la inutilidad de los ratios para efectuar comparaciones como la necesidad perentoria de definir, de forma simple y transparente, los objetivos del estudio de comparación, y la relación entre variables que permita poner de manifiesto, con la mayor claridad posible, las ventajas de unos sistemas respecto de otros. Los Capítulos 4 y 5 exponen el análisis operacional y sus aplicaciones. Se trata de una técnica que relaciona las variables que describen las prestaciones y las que describen la carga. Estas relaciones se fundamentan sólo en hipótesis comprobables experimentalmente, sin recurrir a otras difícilmente demostrables, como las empleadas con el mismo objetivo en la teoría de colas de espera. Por tanto, el análisis operacional constituye una primera aproximación al modelado de sistemas informáticos, la cual puede emplearse cuando se pretendan estimar las prestaciones de un sistema que no existe, ya sea total o parcialmente (por ejemplo, en el caso de ampliación de los recursos de un sistema o de la carga que debe tratar). Parece increíble la cantidad de interesantes resultados que se pueden encontrar partiendo de simples medidas elementales del comportamiento del sistema informático. En todos los problemas de evaluación de las prestaciones se toma como dato de entrada la carga del sistema. Pero, ¿qué se entiende por la carga de un sistema? ¿Cómo podemos representarla de forma compacta sin recurrir a todos los programas que se ejecutan en él? La respuesta a estas cuestiones está tratada en el Capítulo 6, de forma simple en cuanto a la dimensión de los problemas propuestos para poder resolverlos, sin recurrir a herramientas estadísticas poderosas. Sin embargo, la base de esas herramientas está claramente expuesta en el repaso teórico, y utilizada en los problemas resueltos. Ello ha de permitir al lector buscar las herramientas adecuadas cuando haya de resolver un problema similar. Uno de los problemas con que se enfrenta el responsable de un sistema informático es el de la planificación de su capacidad, es decir, el de habilitar los recursos para poder dar servicio a los usuarios del mismo respetando sus exigencias de comportamiento, tanto si estos usuarios están en un entorno cerrado (usuarios internos de una empresa, por ejemplo) como abierto (usuarios de un servidor web). Las técnicas para tratar este problema están expuestas de forma sucinta en el Capítulo 7. Evidentemente, esta tarea requiere muchos de los conocimientos expuestos en los capítulos anteriores, y lo que se propone en este capítulo es cómo coordinarlos adecuadamente para el fin propuesto.

Finalmente, el Capítulo 8 está dedicado al tratamiento de un problema próximo a la realidad, aunque reducido a una escala que permite su tratamiento manual. Esta simplificación sirve para poner de manifiesto cómo se usan las herramientas y técnicas propuestas y descritas en los siete primeros capítulos para resolver un problema de estudio muy concreto: el análisis de las prestaciones del entorno de un servidor web. Se trata de un capítulo magnífico que actúa como síntesis de los conocimientos tratados en el libro, poniendo de manifiesto la coordinación que debe existir entre todas aquellas técnicas y herramientas. En conclusión, el material que se encuentra este texto, aunque orientado principalmente a estudiantes universitarios, constituye la base idónea para cualquier técnico informático que deba hacer frente a problemas de evaluación de prestaciones, tanto para mejorar un sistema existente como para predecir el comportamiento de un sistema en el que alguno, o algunos, de sus componentes —del hardware o del software—, no estén disponibles y, por lo tanto, sus prestaciones no puedan evaluarse a partir de la medición directa. Todas aquellas personas que lean o usen este libro deberían agradecer a Xavier Molero, Carlos Juiz, y Miguel J. Rodeño la ímproba tarea que representa la colección de información, su síntesis y exposición final mediante los problemas desarrollados, haciendo amena la lectura de temas que, de otra forma, resultarían absolutamente indigestos.

Ramon Puigjaner Catedrático de Universidad de Arquitectura y Tecnología de Computadores Universitat de les Illes Balears Palma, abril de 2004

Presentación Las nuevas tecnologías empleadas en la computación distribuida y el desarrollo de Internet, no sólo como instrumentos de difusión y entretenimiento sino como herramienta de negocio, han cambiado la fisonomía de la informática en la última década. Con el auge en paralelo de los entornos cliente/servidor y de las comunicaciones, se ha aproximado la tecnología telemática a los usuarios finales, de tal modo que casi no se puede imaginar un ambiente de negocio que no considere la informática como una herramienta básica para su desarrollo. Sin embargo, tras una fase de descubrimiento de las funcionalidades y del potencial de desarrollo de estos sistemas, se ha pasado a la lógica preocupación por aspectos cuantitativos y no funcionales que ya se planteaban en arquitecturas centralizadas. Así, por ejemplo, la seguridad, la disponibilidad, la eficiencia o el rendimiento son algunas de las características que normalmente se evalúan a la hora de explotar un sistema informático. En particular, dado que el aplicativo de negocio descansa sobre sistemas cada vez más distribuidos, las consideraciones acerca del rendimiento de éstos produce consecuencias que se acusan en los resultados del propio negocio. A nadie se le escapa que la imbricación entre una compañía y el soporte informático que lo sustenta ha tenido siempre un fiel reflejo en los costes o la inversión. Pero, definitivamente, la proliferación de Internet y de las aplicaciones basadas en servidores web ha hecho posible una nueva forma de conseguir beneficio de la propia gestión de la información. Por ello, cada vez más, es necesario conocer con qué rapidez puede atender el sistema informático a las necesidades de los clientes, que no sólo usuarios, de los servicios ofrecidos telemáticamente. Aún más, el sistema puede ser la visión que los clientes perciben del propio negocio, con lo que uno de los aspectos esenciales en la explotación de éste, tal como lo fue en el pasado reciente, será conocer cómo evaluar su rendimiento, o, como se denomina en Latinoamérica, su desempeño. Este libro utiliza los conceptos clásicos de rendimiento para el análisis cuantitativo de los sistemas centralizados o distribuidos. Las técnicas y modelos que se presentan, proveen del conocimiento básico para determinar el ámbito y magnitudes generales que sirven para representar el rendimiento de un sistema informático. No se ha pretendido cubrir todos los aspectos relacionados con la evaluación del rendimiento, ni tampoco se ha profundizado en las particularidades de todas las situaciones, pero el texto permite descubrir aquellas nociones y técnicas fundamentales. El libro se ha enfocado a un plano eminentemente práctico; otros textos anteriores en castellano han realizado un importante esfuerzo de condensación teórica que aquí se ven en parte actualizados y en parte extendidos con ejercicios, actividades propuestas y problemas. El texto que el lector tiene en sus manos va dirigido principalmente a estudiantes y profesores universitarios que traten de materias de primeros cursos relacionadas con el análisis cuantitativo de los sistemas informáticos y telemáticos. En este sentido, este trabajo

consolida la experiencia de los autores en la impartición de varios cursos académicos sobre evaluación, explotación, modelado o análisis del rendimiento de los sistemas informáticos en universidades con estudios de informática. En consecuencia, su contenido se puede utilizar como herramienta docente aislada, o bien combinada con material más específico sobre las técnicas básicas aquí presentadas. Sin embargo, también puede ser utilizado por los profesionales de las tecnologías de la información, especialmente aquellos que han de garantizar cierta calidad de servicio del sistema que gestionan, ya que su enfoque es especialmente práctico. Aquí encontrarán los fundamentos que luego habrán de perfeccionar y focalizar en su entorno de explotación. El libro se estructura en ocho capítulos que comparten una estructura similar (a excepción del último): tras una serie de apartados teóricos, se resuelven problemas siguiendo una orientación didáctica; después se plantean problemas adicionales de los que sólo se indica la solución, y a continuación se exponen una serie de problemas sin solución; el capítulo acaba con una propuesta de actividades complementarias relacionadas con la materia tratada. Respecto del contenido teórico hay que aclarar que su extensión es la mínima posible teniendo en cuenta que se ha intentado ofrecer un libro que sea autocontenido; esto es, con la información referida en los primeros apartados de cada capítulo el lector debe ser capaz de abordar, de manera satisfactoria, la resolución de los problemas planteados en él. Respecto de la materia tratada en este texto, a continuación se refiere de manera sucinta el contenido de cada capítulo. El Capítulo 1 introduce el concepto del rendimiento, su relación con el coste y presenta la ley de Amdahl como medio básico de análisis. El Capítulo 2, se centra en la monitorización como herramienta indispensable para conocer el rendimiento de los sistemas informáticos en régimen de explotación. Dada la tecnología distribuida en la que estamos inmersos, se descubren los parámetros que los monitores basados en Unix (y Linux) pueden aportar en el análisis cuantitativo de un sistema. En el Capítulo 3 se presentan diversas técnicas para comparar el rendimiento de varios sistemas informáticos entre sí, poniendo especial énfasis en algunas de las unidades empleadas por programas de prueba (benchmarks) establecidos de facto en la comunidad informática. Los Capítulos 4 y 5 se centran en el análisis operacional como herramienta clásica para resolver modelos simples de sistemas basados en redes de colas de espera. Se presentan también aplicaciones típicas de las leyes operacionales, como la determinación de los límites del rendimiento o del cuello de botella del sistema. En el Capítulo 6 se introduce al lector en las técnicas para caracterizar la carga de trabajo a la que se somete a un sistema, incidiendo en la técnica de agrupamiento por clases. El Capítulo 7 muestra la utilidad de planificar la capacidad del sistema actual y predecir, aunque sea de forma sencilla, la capacidad futura a través de técnicas estadísticas simples. Por último, el Capítulo 8 presenta el caso de estudio del rendimiento de un servidor web en una Intranet corporativa. Se han simplificado las técnicas y métodos para poder seguir con facilidad muchos de los conceptos y problemas resueltos en los capítulos precedentes,

pero abarca lo suficiente para reconocer las tareas a las que se enfrenta un analista de prestaciones. Los autores agradecen a todas aquellas personas que, de una u otra manera, han colaborado en la elaboración de este material. Con su ayuda han contribuido a la difusión, en castellano, de este conocimiento clásico pero nunca tan actual como la evaluación y modelado del rendimiento de los sistemas informáticos. Esperamos y deseamos que este trabajo resulte útil para el lector, porque éste era nuestro principal objetivo, y le motive en el conocimiento de una materia que, particularmente a nosotros, nos apasiona. Finalmente, dada la profusión de problemas, y a pesar de que se han revisado a conciencia todos los capítulos, somos conscientes de que, todavía, algún error se haya podido deslizar en ellos. Confiamos en la comprensión del lector y le pedimos disculpas de antemano, toda vez que quedamos a su disposición para incorporar, en el futuro, las sugerencias que tiendan a mejorar este texto.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF