mercredi 22 avril 2009

tester les perfs réseau entre 2 serveurs

ftp
bin
put " [pipe symbol] dd if=/dev/zero bs=2000b count=1 " /dev/null

liste d'argument trop long problème ARG_MAX

getconf -a : liste les valeurs des variables d'environnement système


par default la valeur de ARG_MAX = 24576 (6x4Ko)


si lors d'une routine exec() on sort avec une erreur de type E2BIG, visible avec analyse truss ou trace

ou si lors d'une commande on a un arglist too long


celà est dû à un passage trop grand d'arguments à une commande.


l'environnement système peut être modifié en dynamique afin d'augmenter la valeur :


chdev -l sys0 -a ncargs=16

installp en mode debug


export INST_DEBUG=y

permet d'avoir le mode debug en installp

Difference de taille entre du et ls

Difference de taille entre du et ls :


exemple : Ce programme reproduit le fonctionnement de ls : on se positionne au début du fichier et on se déplace jusqu'a la fin et on compte le deplacement


#include
#include
#include

long fileSize(char *FileName)
{
FILE *fp;
long fileLen;

fp = fopen(FileName,"r");
fseek(fp,0L, SEEK_END);
fileLen = ftell(fp);
fclose(fp);
return fileLen;

}


main(argc,argv)
int argc;
char **argv;

{

printf(" Taille de %s : %d bytes \n",argv[1],fileSize(argv[1]));

}


ew43punix1:root # dd if=/dev/zero of=./sparsefile seek=945616 bs=1024 count=10

10+0 records in.

10+0 records out.

ew43punix1:root # ll

/u/eym674h/dev/ls

total 395

drwxr-sr-x 2 root 200 512 Jan 10 11:53 ./

drwxrwsrwx 26 root 200 1024 Jan 10 11:37 ../

-rwxr-xr-x 1 root 200 198749 Jan 10 11:51 sizefile*

-rw-r--r-- 1 root 200 363 Jan 10 11:51 sizefile.c

-rw-r--r-- 1 root 200 968321024 Jan 10 12:00 sparsefile



ew43punix1:root # du -sk *


184 sizefile

1 sizefile.c

3 sparsefile <==== !!!


ew43punix1:root # ./sizefile sparsefile

Taille de sparsefile : 968321024 bytes <==== !!!


changer le TZ pour test


export TZ=nft-7200dft; date


affiche la date avec 2 mois de moins

créer une image iso de cdrom pour monter sur un serveur dépourvu de lecteur (merci Jluc!)


sur un serveur possédant un lecteur de cdrom, créer une image du cdrom dans un fichier :

dd if=/dev/cd0 of=/download/reltools.iso bs=512b

transférer l'image sur le serveur cible :

tar -cvf - reltools.iso (rsh testserver "cd /tmp/trace ; tar -xvf -")

copier l'image dans un volume logique

mklv -y'lvtest' rootvg 2

dd if=/tmp/trace/reltools.iso of=/dev/lvtest bs=512b

créer et monter un filesystem de type cdrfs :

vi /etc/filesystem

/TEST:
dev = /dev/lvtest
vfs = cdrfs
mount = false
options = ro
account = false

mount /TEST

et c'est tout bon !

Tracer le boot a partir d'une hmc ...

Pour tracer le boot d une machine d'un Pseries :


Sur n'importe quelle bécane :
# script boot.log (ca sauve tout ce qui passe sur le terminal dans boot.log)
# ssh hmc –l hscroot
# vtmenu

Retrieving name of managed system(s) . . . Server-9117-MMA-XXXXXX ------

----------------------------------------------------------
Partitions On Managed System: Server-9117-MMA-XXXXXXX------
OS/400 Partitions not listed
----------------------------------------------------------
1) PART1
2) PART2

Enter Number of Running Partition (q to quit): 1
Opening Virtual Terminal On Partition PART1. . .

Open in progress

Open Completed.


Ensuite booter la machine (ici PART1) en mode firmware Invite OK
Sur le prompt :

boot -s trap
mw enter_dbg
42
.
g


A la fin du boot, ou alors au moment du hang :
~.

Et ctrl+d pour sortir de script
Dans boot.log, vous avez la trace du boot

Code 4EE au boot sur un AIX 5.2

Si code 4EE au boot sur aix 5.2, systeme bloqué... il faut rebooter en maintenance et agrandir / . En effet, le 4EE est lié au fait de découvrir des nouveaux disques, et impossible de les ajouter dans l'odm.... Galere ce code là !!

lundi 20 avril 2009

Who's disk is it ??

If you have a no pvid disk, defined in a partition, how do you find which one it is, on the VIO server ?
1) on the aix partition :
# lscfg -l hdiskX
=> hdiskX U8203.xx.... V3-
C2-T1-L810000.... Virtual...
Slot
Lun
2) Get the AIX client ID :
# uname -L
3 PartitonName
Partion ID
3) On which Vio server is running the partition :
Log on the HMC :
# lssyscfg -r sys -F name <= gives all the managed system names #lshwres -m
PowerName -r virtualio --rsubtype scsi --filter lpar_ids=3
Powersystem on which the partition is running
Partion ID in 2)

=>lpar_name=PartitionName,lpar_id=3,slot_num=2,state=1,is_required=1,adapter_type=client,remote_lpar_id=1,remote_lpar_name=VioServerName,remote_slot_num=12,backing_devices=none
Remote Slot number
4) Log on the Vio Server (padmin)
# lsmap -all
note which adapter (
vhostX) is on the slot number 12
# lsmap -vadapter vhostX
=> the disk you are looking for, is the one with the Lun Id 810000 in 1)

vendredi 17 avril 2009

Tips HMC

Passer la HMC en francais ou en anglais...
C'est tout bête : il suffit de changer la langue... de son browser !!!!

Ajouter des disques dans une partition virtuelle

Méthode ajout de disque sur VIO server (lorsqu'il y a 2 vio serveurs, qui peuvent éventuellement récupérer les partitions en live mobility):

1) faire ajouter les disques sur les cartes fcs des vio servers
2) Sur le premier vio server

  • Se logger padmin
  • lspv => tous les disques doivent avoir un pvid, si ça n'est pas le cas, il faut faire un chdev -l hdiskx -a pv=yes en oem_setup_env ou bien chdev -dev hdiskx -attr pv=yes en padmin
  • cfgdev
  • lspv grep none awk '{ print "chdev -dev "$1" -attr pv=yes reserve_policy=no_reserve algorithm=round_robin" }'
  • récuperer l'output avec la souris et executer toutes les lignes (paste via la souris par exemple)


A ce stade les disques sont prêts sur le 1er vio server

3) se connecter sur le 2eme vio server, en padmin

  • lspv
  • cfgdev
  • passer, pour chaque disque supplémentaire, la commande suivante : (ou la commande ci dessus)
    chdev -dev hdiskX -attr reserve_policy=no_reserve algorithm=round_robin

    4) Maintenant, il faut définir les disques sur le serveur lui-même (la partition cible)
  • lancer IE : https://adresse/ de la hmc
  • Accepter la license s'il vous la propose et autoriser les popup pour ce site
    cliquer sur :


    log on and launch the hardware management console console

  • se connecter hscroot
    éventuellement, s'il le propose lancer une nouvelle session
    séléctionner le systeme concerné, dans systeme management :




  • cliquer sur properties (ou propriétés)
  • onglet "Virtual adapter" (ou la meme chose en francais!!)
  • relever la valeur du "connecting adapter", correspondant à la carte SCSI par laquelle on va voir le disque (ici, 15)




    5) définition sur le vio server

retourner sous le vio serveur hébergeant la partition

  • lsmap -all grep vhost
  • relever la carte comportant le numéro correspondant, (le vhost correspondant) et passer la commande suivante, pour y attribuer le ou les disques correspondants :
    mkvdev -vdev hdiskxx -vadapter vhostx
    ensuite, la méthode de définition sous la partition est classique.

Attention : il est prudent de vérifier les pvid obtenus sur la partition, pour les comparer avec ceux du vio serveur

Tuning Vio server

All commands as padmin :

lsdev -dev ent3 -attr thread
ent3=SEA

if 1 => threaded, else, not threaded.
Being threaded, is better for the disks i/o (better handled), counterpart is the cpu overhead.

entstat -all ent3
if thread queue overflow packet more than 0, then the vio server is overcharged.

Tips Oracle/Aix

# vmstat -v
Si
pending disk I/O blocked with no pbuf s'incrémente : alors empilement dans la couche LVM
Si paging space I/O blocked with no psbuf s'incrémente ainsi que external pager line, alors, il faut voir la valeur j2_dynamicBufferPreallocation via ioo

# lvmo -a -v datavg
Si pervg_blocked_io_count s'incrémente, alors, utiliser ioo pour augmenter pv_min_pbuf à 2048, ou lvmo -v datavg -o pv_pbuf_count=2048 (là, on ne change que pour le vg)

Lors de la création des fs pour oracle : mettre un agblksize=512. Par défaut, on est à 4096, et on risque de faire des I/O inutiles. Les autres fs peuvent garder leur taille par défaut, par contre, celui qui contient les dbf, doit avoir son agblksize à db_block_size*db_file_multiblock_read_count. Ces parametres sont à voir avec les dbas.

Si le block size est à plus de 4096, oracle recommande 4096. Sinon 1024 ou 2048.

Pour connaitre le blocksize d'un fs : lsfs -q

Pour les I/O asynchrones :

iostat -A pour récupérer des stats

Si maxg s'approche de maxreqs, augmenter maxreqs.

Préconisation Oracle:

Il faut préferer les parametres Oracle suivants :

  • filesystemio_options=setall
  • disk_async_io=true

Séparer les redo et control files

Rapide résumé des direct io et autres concurrent IO (noté rapidement, à corriger) :

Le DIO existe depuis longtemps et est positionnable sur le JFS
Le CIO existe depuis peu et est positionnable sur le JFS2

Le CIO, permet de positionner un lock particulier sur l'inode du fichier sur lequel on travaille, et d'accéder le fichier en mode DIO de maniere implicite. En plus de l'accéder en direct IO, on peut accéder le fichier en multiple lectures/ecritures avec tous les locks gérés par oracle. Donc en clair, (encore une fois, de ce que j'ai compris) quand tu fais du CIO, tu fais implicitement du Direct IO, mais en plus en concurrent. Un des gros points forts du Direct IO est que tu t'affranchis des buffers JFS2 AIX (plus rapide dans certains cas, mais surtout, moins consommateur en ram),

Le gros point noir de tout ça, c'est qu'il peut etre genant, voire dangereux, de positionner autre chose que la base oracle en Concurrent IO ou Direct IO. Donc, il faut isoler les bases, si on veut monter les jfs2 avec le parametre CIO. C'est pour ça qu'en 9i c'était délicat, parce que c'était le seul moyen de taper les bases en Cio/Dio. Apparement avec oracle 10g, il n'est plus nécéssaire de positionner le JFS2 en Cio, il suffit de mettre en place le parametre filesystemio_options dans oracle à setall, et oracle se débrouille, et ouvre les fichiers qu'il veut acceder dans le mode qui lui convient le mieux.

En résumé, si on fait des gros accès séquentiels en lecture, avec peu d'écritures, il faut rester en asynchrone de base (via le jfs2), et si on fait des accès random, il vaut mieux bypasser le cache jfs2. Le direct IO seul est de toutes facons, déconseillé (parce que plus d'io asynchrones) si j'ai bien compris.

Par contre, pour fonctionner dans ce mode là, il faut avoir un outils de sauvegarde à chaud, ou bien sauvegarder les bases, avec oracle arreté. (en effet, si on passe une base (un table space ?) en read only pour la sauver, le fichier dbf est inaccessible.)

nice awk tip !

- ex : to delete disks not belonging to rootvg :

lspv | grep -v rootvg|awk '{ print "rmdev -dl "$1 }'| ksh

Very useful to treat multiple lines commands in one line .... instead of the usual for i in ....

Useful command (related to cloned part)

- If partition is cloned (via alt_disk_install), it must be reinitialised via :

/usr/sbin/rsct/install/bin/uncfgct -n

/usr/sbin/rsct/install/bin/cftct

HMC commands ...

Migrate a partition :


1) list partitions

lslparmigr -r lpar -m Pserver

2) gives details for the migrating partition

lslparmigr -r msp -m Power1 -t Power2 --filter lpar_names=partition_name

3) migration

migrlpar -o v -m Power1 -t Power2 -p partition_name



Verify if partition can be dynamically modified :

lspartition -dlpar <= Active: must be <1>

Vio server commands

-List virtual adapters (padmin) :

lsdev -virtual

-list adapters (padmin):

lsdev -type adapter

-list virtual network adapters (padmin):

lsmap -all -net

-list all pci adapters (oem_setup_env):

lsslot -c pci

- list all parents for an adapter (oem_setup_env):

lsparent -Cl fcs0

- list all children from an adapter (oem_setup_env):

lsdev -p pci0

- list all free disks (padmin):

lspv -free

- list Vio level

ioslevel

- save config disk in crontab to a mailing list (in order to rebuild the config in case of a crash) (oem_setup_env):

0 0 * * * export HOST=$(hostname);/home/padmin/mapluns.sh uuencode recreation_mapping mail -s "configuration vio server $HOST " root

root is an alias in /etc/aliases pointing to a real user address (toto@aaaa.fr)

- create a SEA adapter between ent1 (physical adapter) and ent2 (virtual adapter) (padmin) :

mkvdev -sea ent1 -vadapter ent2 -default ent2 -defaultid 1 <= creates ent3

and then ...

cfgassist <= config ent3

- create a virtual disk for a partition with hdisk6 (padmin) :

mkvdev -vdev hdisk6 -vadapter vhost0 -dev prex0rootvg

-create a virtual cdrom (padmin) :

mkvdev -vdev cd0 -vadapter vhost3 -dev cd