package and.Mapping ;
-
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.net.InetAddress;
import java.util.ArrayList;
-import org.hyperic.sigar.CpuInfo;
-import org.hyperic.sigar.Mem;
-import org.hyperic.sigar.Sigar;
-import org.hyperic.sigar.SigarException;
-
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
*/
public class Utils
{
-// public static String getOS()
-// {
-// return System.getProperty( "os.name" ) ;
-// }
-
-
/**
* Creation of the representation of the node in the Mapping point of view. It needs
* some information about the computing node, which will be exploited by mapping
*/
public static GNode createGNode()
{
+ /** Using the Linpack class **/
+ Linpack linpack = new Linpack() ;
+
+ /** **/
GNode n = new GNode() ;
int nbCore = 0 ;
int frequency = 0 ;
+ int mflops = 0 ;
int memory = 0 ;
String name = "" ;
-// InputStream ips ;
-// InputStreamReader ipsr ;
-// BufferedReader br ;
-// String ligne ;
-//
-//
-// String fichier_cpu = "" ;
-// String fichier_mem = "" ;
-//
-//
-// if( getOS().equals( "Linux" ) )
-// {
-// fichier_cpu = "/proc/cpuinfo" ;
-// fichier_mem = "/proc/meminfo" ;
-//
-// /* Lecture des informations processeur */
-// try{
-// ips = new FileInputStream( fichier_cpu ) ;
-// ipsr = new InputStreamReader( ips ) ;
-// br = new BufferedReader( ipsr ) ;
-//
-//
-// while( ( ligne = br.readLine() ) != null )
-// {
-// if( ligne.contains( "processor" ) )
-// {
-// nb_coeurs ++ ;
-// }
-//
-// if( ligne.contains("cpu MHz") )
-// {
-// String tab[] = new String[2] ;
-//
-// tab = ligne.split( ":" ) ;
-//
-// frequence = ( int ) Double.parseDouble( tab[1] ) ;
-// }
-//
-// }
-//
-// br.close() ;
-// ipsr.close() ;
-// ips.close() ;
-//
-// } catch( Exception e ) {
-// System.out.println( e.toString() ) ;
-// }
-//
-//
-// /* Lecture des informations mémoire */
-// try {
-// ips = new FileInputStream( fichier_mem ) ;
-// ipsr = new InputStreamReader( ips ) ;
-// br = new BufferedReader( ipsr ) ;
-//
-// while( ( ligne = br.readLine() ) != null )
-// {
-// if( ligne.contains("MemTotal") )
-// {
-// String tab[] = new String[2] ;
-//
-// tab = ligne.split( ":" ) ;
-// ligne = tab[1].trim() ;
-// tab = ligne.split( " " ) ;
-// memoire = ( int ) Double.parseDouble( tab[0] ) ;
-// }
-//
-// }
-//
-// br.close() ;
-// ipsr.close() ;
-// ips.close() ;
-//
-// } catch( Exception e ) {
-// System.out.println( e.toString() ) ;
-// }
-//
-// }
-
- /* Creating the hardware information retriever */
- Sigar sigar = new Sigar() ;
-
- /* CPU information */
- CpuInfo cpuinfo[] = null ;
- try {
- cpuinfo = sigar.getCpuInfoList();
- } catch (SigarException e) {
- System.err.println( "Unable to retrieve CPU information !" ) ;
- e.printStackTrace();
- System.exit( 1 ) ;
- }
- int tmp = 0 ;
- for( int i = 0 ; i < cpuinfo.length ; i++ )
- {
- nbCore++ ;
- tmp+= cpuinfo[i].getMhz() ;
- }
+ /** CPU information **/
- /* The frequency is the average of cores frequencies */
- frequency = tmp / nbCore ;
+ /* Amount of available computing cores */
+ nbCore = Runtime.getRuntime().availableProcessors() ;
+ /* Average MegaFlops of each core */
+ double tmp_mflops = 0 ;
+ int loop = 10 ;
- /* Memory information */
- Mem mem = null ;
- try {
- mem = sigar.getMem() ;
- } catch (SigarException e) {
- System.err.println( "Unable to retrieve memory information !" ) ;
- e.printStackTrace();
- System.exit( 1 ) ;
+ for( int i = 0 ; i < loop ; i++ )
+ {
+ tmp_mflops += linpack.getMFlops() ;
+ System.gc() ;
}
+ mflops = (int) tmp_mflops / loop ;
+
- memory = (int)mem.getFree()/1000 ;
+ /** Memory information **/
+ memory = (int) Runtime.getRuntime().maxMemory() / 1024 / 1024 ;
/* Host name */
InetAddress addr = InetAddress.getLocalHost() ;
name = new String( addr.getCanonicalHostName() ) ;
} catch( final Exception e ) {
- System.err.println( "Unalbe to retrieve host name !" ) ;
+ System.err.println( "Unalbe to retrieve host's name !" ) ;
+ e.printStackTrace();
+ System.exit( 1 ) ;
+ }
+
+ /* Host IP */
+ String ip = null ;
+ try {
+ InetAddress addr = InetAddress.getLocalHost() ;
+ ip = addr.getHostAddress() ;
+ } catch( final Exception e ) {
+ System.err.println( "Unalbe to retrieve host's name !" ) ;
e.printStackTrace();
System.exit( 1 ) ;
}
+ String names[] = decodeG5Knames( name ) ;
/* Updating node information */
n.setFrequency( frequency ) ;
+ n.setMFlops( mflops ) ;
n.setMemory( memory ) ;
n.setNb_cores( nbCore ) ;
n.setName( name ) ;
+ n.setClusterName( names[1] ) ;
+ n.setSiteName( names[2] ) ;
+ n.setIP( ip ) ;
+ n.setMapped( false ) ;
return n ;
}
if( _an != null )
{
- String temp ;
- String nom, cluster, site ;
-
+ String cluster = "", site = "" ;
ArrayList<Cluster> clusters = new ArrayList<Cluster>() ;
for( int i = 0 ; i < _an.size() ; i++ )
{
- /* Variables edition */
- String tab[] = new String[ 5 ] ;
-
- temp = _an.get( i ).getName().trim().replace('.', '!' ) ;
-
- tab = temp.split( "!" ) ;
-
- nom = tab[ 0 ] ;
- site = tab[ 1 ] ;
+ /* Variables edition */
- tab = nom.split( "-" ) ;
+ cluster = _an.get( i ).getClusterName() ; //names[ 1 ] ;
+ site = _an.get( i ).getSiteName() ; //names[ 2 ] ;
- // IUT
- //cluster = "iut" ;
-
- // G5K
- cluster = tab[ 0 ] ;
-
- //System.out.println( nom + " dans " + cluster + " du site " + site ) ;
-
-
- /* Insertion du noeud dans son cluster */
- boolean trouve = false ;
+ /* Insertion of the node in its cluster */
+ boolean found = false ;
for( int j = 0 ; j < clusters.size() ; j++ )
{
- if( clusters.get( j ).getName().equals( cluster ) && clusters.get( j ).getSite().equals( site ))
+ if( clusters.get( j ).getName().equalsIgnoreCase( cluster )
+ && clusters.get( j ).getSite().equalsIgnoreCase( site ))
{
_an.get( i ).setInCluster( true ) ;
- _an.get( i ).setSite( clusters.get( j ).getSite() ) ;
- _an.get( i ).setCluster( clusters.get( j ).getName() ) ;
+ _an.get( i ).setMapped( false ) ;
+ _an.get( i ).setCluster( clusters.get( j ) ) ;
clusters.get( j ).addGNode( _an.get( i ) ) ;
- trouve = true ;
+ found = true ;
break ;
}
}
- if( ! trouve )
+ if( ! found )
{
Cluster cl = new Cluster() ;
cl.setSite( site ) ;
_an.get( i ).setInCluster( true ) ;
- _an.get( i ).setSite( site ) ;
- _an.get( i ).setCluster( cluster ) ;
+ _an.get( i ).setMapped( false ) ;
+ _an.get( i ).setCluster( cl ) ;
cl.addGNode( _an.get( i ) ) ;
}
+ /**
+ * Return the three parts of the name of a node on Grid'5000.
+ * @param _name The full name of the G5K node
+ * @return The three parts of the name
+ */
+ public static String[] decodeG5Knames( String _name )
+ {
+ String temp = "" ;
+ String tab[] = new String[ 5 ] ;
+ String ret[] = new String[ 3 ] ;
+
+ temp = _name.replace('.', '!' ) ;
+
+ tab = temp.split( "!" ) ;
+
+ ret[0] = tab[ 0 ] ; // node name
+ ret[2] = tab[ 1 ] ; // site name
+
+ tab = ret[0].split( "-" ) ;
+
+ ret[ 1 ] = tab[ 0 ] ; // cluster name
+
+ return ret ;
+ }
+
+
/**
* Write the Grid object in an XML file.
* @param _gl Grid graph to be write
- * @param _file File's name
* @param _path File's path
+ * @param _file File's name
*/
- public static void writeGrid( Grid _gl, String _file, String _path )
+ public static void writeGrid( Grid _gl, String _path, String _file )
{
- if ( ! _file.equals( "" ) && ! _file.endsWith( ".xml" ) )
+ if( _file.equals( "" ) )
{
- _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
+ System.err.println( "No file's name !\n" ) ;
+ return ;
+ }
+
+ if ( ! _file.endsWith( ".xml" ) )
+ {
+ _file = _file + ".xml"; // Adding xml extension to file
}
if( ! _file.equals( "" ) )
/**
* Write an application Graph in a file.
* @param _gr Application Graph to be write
- * @param _file File's name
* @param _path File's path
+ * @param _file File's name
*/
- public static void writeGraph( Graph _gr, String _file, String _path )
+ public static void writeGraph( Graph _gr, String _path, String _file )
{
- if ( ! _file.equals( "" ) && ! _file.endsWith( ".xml" ) )
+ if( _file.equals( "" ) )
{
- _file = _file + ".xml"; // On ajoute l'extension xml au nom du fichier
+ System.err.println( "No file's name !\n" ) ;
+ return ;
+ }
+
+ if ( ! _file.endsWith( ".xml" ) )
+ {
+ _file = _file + ".xml"; // Adding xml extension to file
}
if( ! _file.equals( "" ) )
}
+ /**
+ * Write a mapping done in a file.
+ * @param _mp The mapping done to be write
+ * @param _path File's path
+ * @param _file File's name
+ */
+ public static void writeMapping( Mapping _mp, String _path, String _file )
+ {
+ if( _file.equals( "" ) )
+ {
+ System.err.println( "No file's name !\n" ) ;
+ return ;
+ }
+
+ if ( ! _file.endsWith( ".xml" ) )
+ {
+ _file = _file + ".xml"; // Adding xml extension to file
+ }
+
+ if( ! _file.equals( "" ) )
+ {
+ String path = "" ;
+
+ if( _path.length() != 0 )
+ {
+ path = _path+"/"+_file ;
+ } else {
+ path = new String( "./" + _file ) ;
+ }
+
+ XStream xstream = new XStream( new DomDriver() ) ;
+
+ String xml = xstream.toXML( _mp ) ;
+
+ PrintWriter ecrivain = null ;
+
+ try {
+ ecrivain = new PrintWriter( new OutputStreamWriter( new FileOutputStream( path ), "UTF8" ) ) ;
+
+ ecrivain.println( "<?xml version=\"1.0\" encoding=\"UTF8\"?>" ) ;
+ ecrivain.println( xml ) ;
+
+ ecrivain.close() ;
+ } catch( Exception e ) {
+ System.err.println( "\nError during the write opération !\n" ) ;
+ e.printStackTrace() ;
+ }
+ }
+ }
+
+
/**
* Read an application Graph from a file.
* @param _file File's name
+ * @param _path File's path
* @return The application Graph read
*/
- public static Graph readGraph( String _file )
+ public static Graph readGraph( String _path, String _file )
{
- if ( _file.equals( "" ) || ! _file.endsWith( ".xml" ) )
+ if ( _file.equals( "" ) )
{
- System.err.println( "Bad file !\n" ) ;
+ System.err.println( "No file's name !\n" ) ;
return null ;
}
+ if ( ! _file.endsWith( ".xml" ) )
+ {
+ _file = _file + ".xml"; // Adding xml extension to file
+ }
+
+ String path = "" ;
+
+ if( _path.length() != 0 )
+ {
+ path = _path+"/"+_file ;
+ } else {
+ path = new String( "./" + _file ) ;
+ }
+
Graph gr = null ;
XStream xstream = new XStream( new DomDriver() ) ;
try {
- gr = (Graph) xstream.fromXML( new FileInputStream( _file ) ) ;
+ gr = (Graph) xstream.fromXML( new FileInputStream( path ) ) ;
} catch( FileNotFoundException e ) {
System.err.println( "File not found !\n" ) ;
e.printStackTrace();
return null ;
} catch( ClassCastException e ) {
- System.err.println( "The file does not contain a Graph" ) ;
+ System.err.println( "The file does not contain a valid Graph" ) ;
e.printStackTrace() ;
return null ;
}
/**
* Read a Grid graph from a file.
* @param _file File's name
+ * @param _path File's path
* @return The Grid graph read
*/
- public static Grid readGrid( String _file )
- {
- if ( _file.equals( "" ) || ! _file.endsWith( ".xml" ) )
+ public static Grid readGrid( String _path, String _file )
+ {
+ if ( _file.equals( "" ) )
{
- System.err.println( "Bad file !\n" ) ;
+ System.err.println( "No file's name !\n" ) ;
return null ;
}
+ if ( ! _file.endsWith( ".xml" ) )
+ {
+ _file = _file + ".xml"; // Adding xml extension to file
+ }
+
+ String path = "" ;
+
+ if( _path.length() != 0 )
+ {
+ path = _path+"/"+_file ;
+ } else {
+ path = new String( "./" + _file ) ;
+ }
+
Grid gr = null ;
XStream xstream = new XStream( new DomDriver() ) ;
try {
- gr = (Grid) xstream.fromXML( new FileInputStream( _file ) ) ;
+ gr = (Grid) xstream.fromXML( new FileInputStream( path ) ) ;
} catch( FileNotFoundException e ) {
System.err.println( "File not found !\n" ) ;
e.printStackTrace();
return null ;
} catch( ClassCastException e ) {
- System.err.println( "The file does not contain a Grid" ) ;
+ System.err.println( "The file does not contain a valid Grid" ) ;
e.printStackTrace() ;
return null ;
}
return gr ;
}
+
+ /**
+ * Read a Mapping done from a file.
+ * @param _file File's name
+ * @param _path File's path
+ * @return The Mapping read
+ */
+ public static Mapping readMapping( String _path, String _file )
+ {
+ if ( _file.equals( "" ) )
+ {
+ System.err.println( "No file's name !\n" ) ;
+ return null ;
+ }
+
+ if ( ! _file.endsWith( ".xml" ) )
+ {
+ _file = _file + ".xml"; // Adding xml extension to file
+ }
+
+ String path = "" ;
+
+ if( _path.length() != 0 )
+ {
+ path = _path+"/"+_file ;
+ } else {
+ path = new String( "./" + _file ) ;
+ }
+
+ Mapping mp = null ;
+
+ XStream xstream = new XStream( new DomDriver() ) ;
+
+ try {
+ mp = (Mapping) xstream.fromXML( new FileInputStream( path ) ) ;
+ } catch( FileNotFoundException e ) {
+ System.err.println( "File not found !\n" ) ;
+ e.printStackTrace();
+ return null ;
+ } catch( ClassCastException e ) {
+ System.err.println( "The file does not contain a valid Mapping" ) ;
+ e.printStackTrace() ;
+ return null ;
+ }
+
+ return mp ;
+ }
+
}