On Fri, 2009-07-10 at 17:13 -0400, Felipe Román Márquez wrote: > tiene 6 discos sas de 15.000rpm en raid0 (cada server) en velocidad > peak da casi 800mbps, y no baja de 480mbps en velocidad sostenida. > y en cpu, tiene 2 x quadcore nehalem (no hay nada más potente en el > mercado hasta ahora) son 8 cores por máquina y 16 theads en total ya > que tienen HT.
Lei tus specs (por eso los puse bajo mi comentario), y aun asi los procesos que hablamos son todos UNI-THREAD (no te sirven los 8 cores), son pesados en CPU y 800mbps es poco para tus discos (cuidado con las unidades!). Como referencia en mi laptop: - hdparm -T /dev/sda 1128.20 MiB/s - hdparm -t /dev/sda 61.03 MiB/s - dd if=archivo2gigas of=/dev/null (no esta en cache obvimente!) 38.1 MiB/s > imposible que haya cuello de botella por procesador ni por discos, > además las máquinas no tienen carga, están recién instaladas y no > puedo seguir avanzando hasta que la performance de red suba > considerablemente. Pero *hiciste la prueba*? Miraste el uso con top (presiona "1" para separar por CPU) mientras corrias ssh por ejemplo? Hiciste scp o rsync a localhost? Aca un scp a localhost me da penosos 13 MiB/s y entre dos laptops por gigabit me da 24.9 MiB/s, asi que 50MiB/s no me parece malo para tus servidores: fijate que con scp entre 2 tarros (24 MiB/s) obtengo menos que leer directamente el disco (38 MiB/s). SCP no es gratis y rsync anda por ahi... Puedes intentar con el par de programas que pongo abajo, los cuales solo involucran CPU y red... con ellos obtengo: - a localhost: 750 MiB/s - entre 2 laptops conectados entre ellos por gigabit: 111 MiB/s ------servidor.py---------- #!/usr/bin/env python import SocketServer,sys class MyServer(SocketServer.ThreadingTCPServer): allow_reuse_address = True class EchoRequestHandler(SocketServer.BaseRequestHandler): def handle(self): mega = "A"*1024*1024 data = self.request.recv(1024) if data.startswith('test'): try: sys.stdout.write('%s: ' % str(self.client_address)) numero = int(data[5:]) for i in range(numero): if i % 10 == 0: sys.stdout.write('.') sys.stdout.flush() self.request.send(mega) sys.stdout.write('\n') return except Exception, e: print e server = MyServer(('', 55555), EchoRequestHandler) try: server.serve_forever() except: server.server_close() ---------fin-servidor.py------ -----cliente.py------------ #!/usr/bin/env python import socket,sys,time try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((sys.argv[1], 55555)) sock.send("test %s" % sys.argv[2]) except IndexError: sys.stderr.write("""Uso: %s <IP servidor> <# MegaBytes> Ejemplo: %s 127.0.0.1 10 """ % (sys.argv[0], sys.argv[0])) sys.exit(2) except socket.error, msg: sys.stderr.write("[ERROR] %s\n" % msg[1]) sys.exit(2) recv = 1024*8 t1 = time.time() data = sock.recv(recv) l = 0 while len(data): l += len(data) data = sock.recv(recv) t2 = time.time() sock.close() delta=t2-t1 KiB=l/1024 MiB=l/1024/1024 KiBps=KiB/delta MiBps=MiB/delta print """Largo: %d MiB tiempo: %f segundos ancho banda: %f MiB/s %f KiB/s""" % (MiB, delta, MiBps, KiBps) ------------fin-cliente.py---------------- -- Aldrin Martoq <amar...@dcc.uchile.cl> http://aldrin.martoq.cl/