Skip to content
Snippets Groups Projects
Commit de4ac2c2 authored by Iustin Pop's avatar Iustin Pop
Browse files

hspace: move instance count and score into CStats

Currently the instance count and cluster score are separated from the
other initial/final phase stats, even though they are very similar. This
patch moves computation of these two into totalResources/CStats and
removes special printing in hspace.
parent 79a72ce7
No related branches found
No related tags found
No related merge requests found
......@@ -106,6 +106,8 @@ data CStats = CStats { cs_fmem :: Int -- ^ Cluster free mem
, cs_tcpu :: Double -- ^ Cluster total cpus
, cs_xmem :: Int -- ^ Unnacounted for mem
, cs_nmem :: Int -- ^ Node own memory
, cs_score :: Score -- ^ The cluster score
, cs_ninst :: Int -- ^ The total number of instances
}
-- * Utility functions
......@@ -148,6 +150,8 @@ emptyCStats = CStats { cs_fmem = 0
, cs_tcpu = 0
, cs_xmem = 0
, cs_nmem = 0
, cs_score = 0
, cs_ninst = 0
}
updateCStats :: CStats -> Node.Node -> CStats
......@@ -157,7 +161,7 @@ updateCStats cs node =
cs_mmem = x_mmem, cs_mdsk = x_mdsk, cs_mcpu = x_mcpu,
cs_imem = x_imem, cs_idsk = x_idsk, cs_icpu = x_icpu,
cs_tmem = x_tmem, cs_tdsk = x_tdsk, cs_tcpu = x_tcpu,
cs_xmem = x_xmem, cs_nmem = x_nmem
cs_xmem = x_xmem, cs_nmem = x_nmem, cs_ninst = x_ninst
}
= cs
inc_amem = Node.f_mem node - Node.r_mem node
......@@ -168,27 +172,30 @@ updateCStats cs node =
inc_icpu = Node.u_cpu node
inc_idsk = truncate (Node.t_dsk node) - Node.f_dsk node
in CStats { cs_fmem = x_fmem + Node.f_mem node
, cs_fdsk = x_fdsk + Node.f_dsk node
, cs_amem = x_amem + inc_amem'
, cs_adsk = x_adsk + inc_adsk
, cs_acpu = x_acpu
, cs_mmem = max x_mmem inc_amem'
, cs_mdsk = max x_mdsk inc_adsk
, cs_mcpu = x_mcpu
, cs_imem = x_imem + inc_imem
, cs_idsk = x_idsk + inc_idsk
, cs_icpu = x_icpu + inc_icpu
, cs_tmem = x_tmem + Node.t_mem node
, cs_tdsk = x_tdsk + Node.t_dsk node
, cs_tcpu = x_tcpu + Node.t_cpu node
, cs_xmem = x_xmem + Node.x_mem node
, cs_nmem = x_nmem + Node.n_mem node
}
in cs { cs_fmem = x_fmem + Node.f_mem node
, cs_fdsk = x_fdsk + Node.f_dsk node
, cs_amem = x_amem + inc_amem'
, cs_adsk = x_adsk + inc_adsk
, cs_acpu = x_acpu
, cs_mmem = max x_mmem inc_amem'
, cs_mdsk = max x_mdsk inc_adsk
, cs_mcpu = x_mcpu
, cs_imem = x_imem + inc_imem
, cs_idsk = x_idsk + inc_idsk
, cs_icpu = x_icpu + inc_icpu
, cs_tmem = x_tmem + Node.t_mem node
, cs_tdsk = x_tdsk + Node.t_dsk node
, cs_tcpu = x_tcpu + Node.t_cpu node
, cs_xmem = x_xmem + Node.x_mem node
, cs_nmem = x_nmem + Node.n_mem node
, cs_ninst = x_ninst + length (Node.plist node)
}
-- | Compute the total free disk and memory in the cluster.
totalResources :: Node.List -> CStats
totalResources = foldl' updateCStats emptyCStats . Container.elems
totalResources nl =
let cs = foldl' updateCStats emptyCStats . Container.elems $ nl
in cs { cs_score = compCV nl }
-- | Compute the mem and disk covariance.
compDetailedCV :: Node.List -> (Double, Double, Double, Double, Double, Double)
......
......@@ -205,6 +205,8 @@ iterateDepth nl il newinst nreq ixes =
-- | Function to print stats for a given phase
printStats :: String -> Cluster.CStats -> IO ()
printStats kind cs = do
printf "%s score: %.8f\n" kind (Cluster.cs_score cs)
printf "%s instances: %d\n" kind (Cluster.cs_ninst cs)
printf "%s free RAM: %d\n" kind (Cluster.cs_fmem cs)
printf "%s allocatable RAM: %d\n" kind (Cluster.cs_amem cs)
printf "%s reserved RAM: %d\n" kind (Cluster.cs_fmem cs -
......@@ -232,8 +234,13 @@ printResults fin_nl num_instances allocs sreason = do
let fin_stats = Cluster.totalResources fin_nl
fin_instances = num_instances + allocs
printf "Final score: %.8f\n" (Cluster.compCV fin_nl)
printf "Final instances: %d\n" (num_instances + allocs)
when (num_instances + allocs /= Cluster.cs_ninst fin_stats) $
do
hPrintf stderr "ERROR: internal inconsistency, allocated (%d)\
\ != counted (%d)\n" (num_instances + allocs)
(Cluster.cs_ninst fin_stats)
exitWith $ ExitFailure 1
printStats "Final" fin_stats
printf "Usage: %.5f\n" ((fromIntegral num_instances::Double) /
fromIntegral fin_instances)
......@@ -299,15 +306,13 @@ main = do
let ini_cv = Cluster.compCV nl
ini_stats = Cluster.totalResources nl
(if verbose > 2 then
printf "Initial coefficients: overall %.8f, %s\n"
ini_cv (Cluster.printStats nl)
else
printf "Initial score: %.8f\n" ini_cv)
when (verbose > 2) $ do
printf "Initial coefficients: overall %.8f, %s\n"
ini_cv (Cluster.printStats nl)
printf "Cluster RAM: %.0f\n" (Cluster.cs_tmem ini_stats)
printf "Cluster disk: %.0f\n" (Cluster.cs_tdsk ini_stats)
printf "Cluster cpus: %.0f\n" (Cluster.cs_tcpu ini_stats)
printf "Initial instances: %d\n" num_instances
printStats "Initial" ini_stats
let bad_nodes = fst $ Cluster.computeBadItems nl il
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment