“Migración de una solución corporativa desde i386 a IA64 sobre Linux” (y no morir en el intento) Ing. Italo Foppiano R. Temario ● ● ● ● Motivación Escenario donde se realizó la experiencia IA32 v/s IA64 Algunas consideraciones en la migración de aplicaciones OS ● Comparación en el rendimiento ● Conclusiones Motivación ● ● ● ● ● Renuencia en la incorporación de nuevas tecnologías Periodos de un año de presencia en el mercado antes de ser masificados Miedo a decisiones equivocadas (costo) Esperar que “el vecino lo pruebe primero” Poco tiempo para investigar y experimentar Motivación (cont.) ● Contar una experiencia real – ● ● Migración de i386 (Xeon) a IA64 (Itanium2) en un ambiente corporativo Aportar con antecedentes prácticos y reales Asistir en la toma de decisiones Escenario ● Plataforma de servicios Internet tradicionales: – Correo: SMTP, POP3, IMAP, antivirus, antispam – Web: Portal, Webmail, aplicaciones (PHP, cgi, etc.) – LDAP: Autentitación – FTP – BD: MySQL: para aplicaciones web Escenario cont. ● Sobre 25.000+ usuarios ● 4.000+ clientes (PC) ● 200.000 correos promedio diario ● ● 200.000+ páginas visitadas servidor Web promedio diario. 250.000+ páginas visitadas webmail promedio diario Plataforma inicial ● 2 IBM netfinity 7100 ● 2 CPU Xeon 700 Mhz ● 1.5 GB RAM ● 1 Mbyte cache x CPU ● Raid por HW ● Discos Fiber Chanel Storage ● OS RedHat 7.1 2.4.1819.7.xsmp Plataforma nueva ● 3 HP Integrity rx2600 Itanium ● 2 CPU Itanium 2 de 1.3GHz ● 4.0 GB de Memoria RAM. ● 3MB de memoria cache ● Controlador Raid interno ● Storage externo Fiber Chanel ● OS RedHat AS 2.1 i386 v/s IA64 ● Lo que dice el proveedor: – 32 a 64 bits – Mayor capacidad de procesamiento por ciclo de CPU – CPU orientado a aplicaciones intensivas – Mayor vigencia, menor obsolescencia – Soportado por varios SO (Windows, RedHat, HP-UX) – 3 por el precio de 2 ;-) i386 v/s IA64 ● Lo que no dice el proveedor: – IA32: CISC – IA64: EPIC (explicitly parallel instruction computing) – Juego de instrucciones distinto – No existe compatibilidad binaria ● – Se requiere recompilar Requiere modificar el código para sacar provecho del paralelismo de la CPU Aplicaciones comerciales ● ● ● Pocas aplicaciones comerciales disponibles para IA64 Resellers poco informados: – ¿debiera funcionar? – ¿funcionaría mejor? Aplicaciones soportadas: – ● ¿Optimizados para IA64? Soporte de SO: – ¿Optimizados para IA64? Aplicaciones OS ● Proveen soporte para ser portados a diversas plataformas. – ● Experiencia en plataformas de 64 bits – ● ● autotools Alpha, SPARC64, PA RISC Permiten modificar el código Buena parte de las aplicaciones requeridas las proveen las distribuciones de linux Algunos Inconvenientes ● Algunas aplicaciones no soportadas: – ● Ej. proFTPD: llamadas a sistemas poco portables ( _syscall2() ) Problemas con números de punto flotante (IEEE denormals)(1) – Ej. spamassassin ● kernel: spamd(32442): floating-point assist fault at ip 20000000000bdbe2 ● el kernel debe emular la operación ● degrada el rendimiento Algunos Inconvenientes cont. ● Resultados de la función crc32() en PHP difieren en plataformas de 64 bits (2) – usa enteros de 32 bits con signo – Problemas con hashing de directorios utilizado por Squirrelmail – Ej: ● i386: hash: 47baf914 crc: -1203435796 ● IA64: hash: b84506ec crc: 3091531500 Algunos Inconvenientes cont. ● ● ● Problemas en conversión de tipos de variables(3) En particular conversiones entre enteros y punteros IA32 utiliza modelo de datos ILP32 – ● int = long = 32 bits, punteros = 32 bits IA64 utiliza modelo de datos LP64 – int = 32 bits, long = 64 bits = punteros Algunos Inconvenientes cont. ● Ej: #include <stdio.h> int main() { char a[100]; char *ip; ip=a; return (int) ip; } Algunos Inconvenientes cont. ● ● El resultado de compilar con gcc ­WALL es: – test.c: In function `main': – test.c:11: warning: cast from pointer to integer of different size Esto puede tener efecto adverso en algunos casos: – Truncar los primeros 32 bits de un puntero Algunos Inconvenientes cont. ● Solución: reemplazar int por long ● Ej: #include <stdio.h> int main() { char a[100]; char *ip; ip=a; return (long) ip; } Algunos Inconvenientes cont. ● Casos más complejos: char *bad_align16_example (char *cp) { return (char *) ((((int) cp) + 15) & ~15); } ● Solución: char *good_align16_example (char *cp) { return (char *) ((((long) cp) + 15) & ~15); } Rendimiento ● ● ● ● Dado los problemas descritos anteriormente surgen dudas en cuanto al desempeño Difícil evaluar rendimiento ya que herramientas existentes adolecen de los problemas ya descritos: Ej. lmbench Usar pruebas más reales, aunque no perfectas Rendimiento (cont.) ● ● Ej. medir tiempo de ejecución del comando md5sum de archivo grande (680MB) 4 máquinas distintas: – Pentium 4, 1.5 GHz, 256 MB ram – Xeon dual 700 MHz, 1.5 GB ram – Xeon dual 2.4 MHz HT, 1 GB ram – Itanium 2 dual 1.3 Ghz, 4 GB ram Rendimiento (cont.) Tiempo ejecución md5sum 01:17,76 Tiempo, min:seg 01:09,12 01:00,48 00:51,84 00:43,20 real user 00:34,56 sys 00:25,92 00:17,28 00:08,64 00:00,00 Pentium4 1.5 Xeon 700 Xeon 2.4 Máquina Itanium 1.3 Rendimiento (cont.) ● ● Comparación de rendimiento con lmbench-3.0-a3 3 máquinas distintas: – Xeon dual 700 MHz, 1.5 GB ram – Xeon dual 2.4 MHz HT, 1 GB ram – Itanium 2 dual 1.3 Ghz, 4 GB ram Rendimiento (cont.) Procesos CPU 100000 Microsegundos 10000 null call null I/O stat open close slct TCP sig inst sig hndl fork proc exec proc sh proc 1000 100 10 1 0,1 Xeon 700 Xeon 2.4 HT Máquina Itanium 2 1.3 Rendimiento (cont.) Operaciones Enteras Básicas 65 60 55 Nanosegundos 50 45 int bit int add int mul int div int mod 40 35 30 25 20 15 10 5 0 Xeon 700 Xeon 2.4 HT Máquina Itanium 2 1.3 Rendimiento (cont.) Operaciones Punto Flotante 45 40 Nanosegundos 35 30 float add 25 float mul float div float bogo 20 15 10 5 0 Xeon 700 Xeon 2.4 HT Máquina Itanium 2 1.3 Rendimiento (cont.) Nanosegundos Cambio de Contexto 35 32,5 30 27,5 25 22,5 20 17,5 15 12,5 10 7,5 5 2,5 0 2p/0K ctxsw 2p/16K ctxsw 2p/64K ctxsw 8p/16K ctxsw 8p/64K ctxsw 16p/16K ctxsw 16p/64K ctxsw Xeon 700 Xeon 2.4 HT Máquina Itanium 2 1.3 Rendimiento (cont.) Latencia de Sist. Archivos y VM 10000 Microsegundos 1000 0K File Create 0K File Delete 100 10K File Create 10K File Delete Mmap Latency 10 Prot Fault Page Fault 100fd selct 1 0,1 Xeon 700 Xeon 2.4 HT Máquina Itanium 2 1.3 Rendimiento (cont.) BW Comunic. Locales 3250 3000 2750 2500 Pipe AF UNIX TCP File reread Mmap reread Bcopy (libc) Bcopy (hand) Mem read Mem write MB/s 2250 2000 1750 1500 1250 1000 750 500 250 0 Xeon 700 Xeon 2.4 HT Máquina Itanium 2 1.3 Conclusiones ● ● ● ● ● Migración de i386 a IA64 no es trivial Falta de aplicaciones comerciales y soporte Aparentemente no se aprovecha al máximo las capacidades del procesador Código requiere modificaciones explícitas para paralelismo(4) Algunas aplicaciones OS requieren revisión del código Conclusiones (cont.) ● ● ● Aplicaciones OS pueden funcionar, pero no necesariamente en forma eficiente Actualización de SO ¿mejorará rendimiento? Por el momento es mejor IA32 – Ej. Xeon MT 3GHz Referencias (1)http://h21007.www2.hp.com/dspp/tech/tech_TechG roupTipDetailPage_IDX/1,2367,10402,00.html#165 (2)http://bugs.php.net/bug.php?id=18816 (3)http://h21007.www2.hp.com/dspp/tech/tech_TechG roupTipDetailPage_IDX/1,2367,10402,00.html#182 (4)http://www.devx.com/Intel/Article/20203/2217?pf=t rue