Portál AbcLinuxu, 1. května 2025 01:27
Kopírujeme...
25.10.2006 11:06
| Přečteno: 1738×
| Linux
|
| poslední úprava: 25.10.2006 11:42
Došly krásné nové stroje, takže jsem přesouval /home na nové železo.. S disky nechci hýbat a NFS i SMB je zbytečně složité, takže svištím netcat + tar přes jednoho svišťě. Kupodivu na 100M ethernetu byl slabší stroj CPU bound, netcat bral cca 30%, tar asi 45%, a propustnost eth0 kolem 4.5MBps. Zabiju dhcpcd, který z nějakého neznámého důvodu sniffuje traffic a bere asi 20%, a propustnost jde na 6.5MBps. Hmm, zajímavé. Možná by pomohlo kdyby tar četl a zapisoval přímo do socketu, ušetří se jedno kopírování v netcatu a jedna anonymní pipe (takže zřejmě další dvě kopírování v jádře). Bohužel netcat v nainstalované verzi exec neumí, tak napíšeme vlastní. Hurá, už to fičí, mám 11.5MBps
tar sice bere přes 85% cpu, ale víc přes 100Mbit stejně neprojde, takže rychlejší tar není nutný. Ještě se pochlubit do blogu zdrojákem, a může se pracovat.
$ cat /usr/local/bin/ntar.py
#! /usr/bin/python
import socket, os, sys
def poll():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', 2000))
s.listen(1)
c, _ = s.accept()
os.close(0)
os.dup2(c.fileno(), 0)
os.execlp('tar', 'tar', 'xv')
def push(host, *src):
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect((host, 2000))
os.close(1)
os.dup2(c.fileno(), 1)
os.execlp('tar', 'tar', 'cv', *src)
if __name__ == '__main__':
if sys.argv[1] == 'poll': poll(*sys.argv[2:])
if sys.argv[1] == 'push': push(*sys.argv[2:])
Tiskni
Sdílej:
Komentáře
Vložit další komentář
25.10.2006 12:06
.. | skóre: 4
| blog:
Re: Kopírujeme...
25.10.2006 12:10
bazil | skóre: 33
| blog:
sluje
| Miroslav
Re: Kopírujeme...
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.