Migración de una solución corporativa desde i386 a IA64 sobre Linux

Anuncio
“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
Descargar