Preparacao das Maquinas
Logar-se na maquina jft-ctl.cern.ch e rodar o script
jft-deploy
:
cd /data/cfg
./jft-deploy -t "javafiretest javafiretest3"
In machine jft-ctl instal afs_tools in odrder to use k5reauth
Load (traffic shaping)
$ sudo /sbin/tc qdisc show dev seth0
qdisc pfifo_fast 0: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
# Para inserir um shape
$ sudo /sbin/tc qdisc add dev seth0 root tbf rate 220kbit latency 50ms burst 1540
$ sudo /sbin/tc qdisc show dev seth0
qdisc tbf 8001: rate 220000bit burst 1540b lat 50.0ms
# Para remover um shape
$ sudo /sbin/tc qdisc del dev seth0 root tbf rate 220kbit latency 50ms burst 1540
Unidades de medida:
All parameters accept a floating point number, possibly followed by a unit.
Bandwidths or rates can be specified in:
kbps Kilobytes per second
mbps Megabytes per second
kbit Kilobits per second
mbit Megabits per second
bps or a bare number Bytes per second
Amounts of data can be specified in:
kb or k Kilobytes
mb or m Megabytes
mbit Megabits
kbit Kilobits
b or a bare number Bytes.
Lengths of time can be specified in:
s, sec or secs Whole seconds
ms, msec or msecs Milliseconds
us, usec, usecs or a bare number Microseconds.
Traces ADSL
Servidores Cern Castor
Todas as maquinas de um cluster:
lemon-cli -script-mode -s --cluster "c2cms/t1transfer" -m "9208"
--start 20120317T05:50 --end 20120317T06:00|grep eth0
http://lemonweb.cern.ch/lemon-status/info.php?time=0&offset=0&entity=c2cms/t1transfer&cluster=1&type=host
Apenas uma maquina:
lemon-cli -script-mode -s -n "lxfsrl4708" -m "9208" --start 20120317T00:00 --end 20120317T06:00|grep eth0|cut -d" " -f3,7
http://lemonweb.cern.ch/lemon-status/info.php?time=3&offset=0&entity=lxfsrl4708
Para uma amostragem mais precisa de uma maquina:
http://lemonweb.cern.ch/lemon-status/metric_graph.php?metric=networkInterfaceI0&field=NumKBWriteAvg&sdate=17-03-2012&sdate_time=05%3A50%3A00&edate=17-03-2012&edate_time=06%3A05%3A00&entity=lxfsrl4708&type=host
9208 é a metrica "networkInterfaceIO":
http://lemonweb.cern.ch/lemon-status/class_list.php?class=system.networkInterfaceIO
Para uma lista completa de todas as metricas disponiveis no lemon:
http://lemonweb.cern.ch/lemon-status/metric_list.php
Ambiente univesitario (UERJ)
Normalizacao para percentual (86000000 é o valor maximo):
for i in $(cat institution.raw); do ( echo "scale=3; $i/86000000;" | bc ); done > institution
Fontes de traces
Simulador de desconexao de nós
- De acordo com perfil (probabilidade): ADSL, servidor, universitario;
Disparando um Teste
- Disparar o simulador de desconexao de nodos
- Criar /data/state/nodefile.txt com a lista de nodos:
maquina@perfil/maxbw # maxbw em kbit por segundo
javafiretest3@institution/8000
javafiretest2@institution/80000
javafiretest@datacenter/160000
javafiretest4@adsl/4000
- Criar as credenciais da grid
(source /afs/cern.ch/project/gd/LCG-share/sl5/etc/profile.d/grid_env.sh; grid-proxy-init -valid 168:00)
- Disparar a transferencia
/data/cfg/jft-run -r 4000kbit -s 100000000 -b 10000000 -f /data/state/nodefile.txt -n 3
- Repetir o mesmo teste varias vezes
nohup sh -c 'for x in $(seq 3); do /data/cfg/jft-run -r 4000kbit -s 100000 -b 50000 -f /data/state/nodefile.txt -n 3; done' &> /data/state/result &
- Deixar um teste redando com um token valido
k5reauth "/bin/sh -c 'for x in \$(seq 3); do /data/cfg/jft-run -r 4000kbit -s 100000 -b 50000 -f /data/state/nodefile.txt -n 3; done'" >&/data/state/result
(digitar a senha para obter novo token, mesmo que nao apareca nada na tela pedindo)
(ctrl_z, bg)
# teste maior
k5reauth "/bin/sh -c 'for x in \$(seq 20); do /data/cfg/jft-run -r 4000kbit -s 1000000000 -b 50000000 -f /data/state/nodefile.txt -n 3; done'" >&/data/state/result
Comparacoes
com bittorrent
- Bittorrent usa leaf nodes (adsl), o javafire usaria tambem os storages (castor, eos, etc)
- Javafire integrado com ferramentas de grid: protocolos de transferencia baseado em SRM/gridftp, authenticacao via certificados X509, opcionalmente poderia usar tambem VOMS para granularidade no controle de acesso aos dados (authorizacao baseado em roles);
- Medir o desempenho de ambos para casos de teste semelhantes
- O PhEDEx é usado para transferencias entre Tiers, normalmente datasets inteiros ou parciais se no tamanho de uma fita (blocos). Nao pode ser usado para transferir para uma maquina local;
com Globus Online
- (a confirmar) globus otimiza a transferencia entre dois endpoints apenas (1:1), ja o java fire otimiza de N:1.
- (a confirmar) globus precisa que o cliente especifique quem sao os dois endpoints
- é semelhante no que diz respeito ao uso das ferramentas de grid (gridftp, authenticacao x509)
trabalhos futuros
- mudar cliente gridftp para dar suporte a escrever no destino o arquivo em uma posicao especifica diferente da origem
- permitir o uso de destinos que estao atras de NAT e/ou firewall (ver tecnicas tais como as usadas pelo globus online)
- fazer a verificacao de integridade ao fim das transferencias (menos importante)
Definicao de testes
- Confirmar que, para uma mesma parametrizacao, a variacao no resultado final é desprezivel (https://github.com/geneguvo/javafire/issues/6). Assim, nao é necessario executar varias vezes o mesmo teste. É preferivel testar diferentes scenarios do que verificar com exatidao uns poucos cenarios especificos.
- Descobrir os limites do sistema (https://github.com/geneguvo/javafire/issues/5)
- Definir scenarios-chave dentro dos limites
- Testar os diferentes algoritmos para cada scenario-chave: o novo algoritmo tem que cobrir com desempenho aceitavel aqueles casos-chave onde o algoritmo simples nao foi capaz de lidar, porem sem perda significativa para os scenarios mais comuns
Visualizacao dos testes