From 0469cada224ea4a171736f842f8d63c416f0e691 Mon Sep 17 00:00:00 2001 From: hadaq Date: Sat, 1 May 2010 12:05:40 +0000 Subject: [PATCH] Initial revision --- disks/Makefile | 16 +++ disks/cleanup.pl | 257 +++++++++++++++++++++++++++++++++++++++++++ disks/daq_disks | Bin 0 -> 44557 bytes disks/disks.c | 276 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 549 insertions(+) create mode 100644 disks/Makefile create mode 100755 disks/cleanup.pl create mode 100755 disks/daq_disks create mode 100644 disks/disks.c diff --git a/disks/Makefile b/disks/Makefile new file mode 100644 index 0000000..7dc6494 --- /dev/null +++ b/disks/Makefile @@ -0,0 +1,16 @@ +CPPFLAGS = -I/home/hadaq/soft/evtbuild/include +LDFLAGS = -L/home/hadaq/soft/evtbuild/lib +LIBS = -lhadaq -lcompat -lrt + +daq_disks: disks.o + $(CC) -o daq_disks $(LDFLAGS) disks.o $(LIBS) + +disks.o: disks.c + $(CC) -c $(CPPFLAGS) -c disks.c + +clean: + rm -f daq_disks *~ core *.o + + + + diff --git a/disks/cleanup.pl b/disks/cleanup.pl new file mode 100755 index 0000000..a9b77ad --- /dev/null +++ b/disks/cleanup.pl @@ -0,0 +1,257 @@ +#!/usr/bin/perl -w + +use strict; +use Getopt::Long; +use Data::Dumper; +use threads; +use threads::shared; +use IO::Socket; +use IO::Select; + +# Assume that there are four (or less) EB processes running per server. +# Each process writes to disks about 40 MB/s. +# Total rate: 4 procs x 40 MB/s x 60 sec x 60 min = 0.5 TB/hour +# +# Total disk space per server: 2 TB x 22 disks = 44 TB +# 20 % of total disk space: 8 TB which means 4000 files (of 2 GB size) +# or 8 TB = 16 hours of running assuming 0.5 TB/hour +# It should be enough to remove 250 files each 30 minutes +# if the limit of 20 % is reached. +# +# The following we are not going to do (we simply rm old files from disk): +# Secondly, we have to move files from the disks with numbers equal to +# EB proc numbers (if these disks are getting full) to other disks. +# If less than 20% disk space left -> we move the files (0.5 TB) to other disks. +# 0.5 TB / 2 GB = 250 files to move +# + +my $threshold = 20; # free disk space in % +my $opt_test = 0; +my $opt_verb = 0; + +GetOptions ('t|test' => \$opt_test, + 'v|verb' => \$opt_verb); + +my %disks_hash; # Hash of disks with their available free space +my $disks_href = \%disks_hash; + +my $status : shared = "OK"; +my @screenPID; + +our $server_port = '50501'; +our $protocol = 'tcp'; + +threads->new( \&statusServer); + +while(1){ + &checkDisks(); + &cleanup(); + + sleep(600); # 10 minutes +} + +exit(0); + +########################### END OF MAIN ######################### + +sub cleanup(){ + + my $tot_space = 0; + my $free_space = 0; + + #- Loop over disk numbers + foreach my $num (1..22){ + $tot_space = $tot_space + $disks_href->{$num}->{'tot'}; + $free_space = $free_space + $disks_href->{$num}->{'free'}; + } + + my $free_all = int(100*$free_space/$tot_space); + + $status = ""; + + print "Total free disk space: $free_all\n" if( $opt_verb ); + + if( $free_all < $threshold ){ + $status = "WARNING - cleaning up, total free disk space: $free_all"; + &rmData("/data*/data/*", 500); + } + else{ + $status = "OK - total free disk space: $free_all"; + } + + # There are special data disks, where + # EB procs start to write their first files before EB procs + # got disk numbers from daq_disks process. + # The numbers of these disks are equal to the numbers of + # shared mem segments of EB procs. + # We have to take special care of cleaning these disks up. + + my @eb_list; + + #- Get EB numbers from shared mem segment names + foreach my $num (1..16){ + my $shmem = "/dev/shm/daq_evtbuild" . $num . ".shm"; + + #- If the shared memory segment exists + if( -e $shmem ){ + push(@eb_list, $num); + } + } + + #- Check free disk space on the disks with the numbers from @eb_list + foreach my $ebnum (@eb_list){ + my $free = $disks_href->{$ebnum}->{'free'}; + my $tot = $disks_href->{$ebnum}->{'tot'}; + + #- If free space is below 20% + if( 100 * $free / $tot < 20 ){ + my $path = sprintf("/data%02d/data/*", $ebnum); + + &rmData("/data*/data/*", 100); + } + } +} + +sub rmData() +{ + #- Remove old data + + my ($path, $numOfFiles) = @_; + + my @data = glob($path); + + #- Get the files sorted by size. File with largest size comes first. + my @sorted_data = sort {-M $b <=> -M $a} @data; + + my $file_counter = 0; + + foreach my $hldfile (@sorted_data){ + my $cmd = "rm $hldfile"; + print "exe: $cmd\n" if( $opt_verb ); + #system($cmd); + + if($file_counter >= $numOfFiles){ + last; + } + + $file_counter++; + + sleep(1); + } + + exit(0); +} + +sub checkDisks() +{ + + my @df_info = `df -m`; + + foreach my $line (@df_info){ + + my ($fsys, $tot, $used, $avail, $pers, $mount) = split(/ +/, $line); + + chomp($mount); + + #- Loop over disk numbers + foreach my $num (1..22){ + my $diskName = sprintf("/data%02d", $num); + + if($diskName eq $mount){ + #- Same free space for given '/dataxx' disk + $disks_href->{$num}->{'tot'} = $tot; + $disks_href->{$num}->{'free'} = $avail; + } + } + } +} + +sub statusServer{ my $server_socket; + my $client_socket; + my $selector; + + unless (defined( $server_socket = + IO::Socket::INET->new( LocalPort => $server_port, + Proto => 'tcp', + Listen => SOMAXCONN ) )) + { + print "ERROR: Cannot start status server!\n"; + } + + $selector = new IO::Select( $server_socket ); + + while(1) { + + # wait 5 seconds for connections + while (my @file_handles = $selector->can_read( 5 )) { + + foreach my $file_handle (@file_handles) { + + if($file_handle == $server_socket) { + + # create a new socket for this transaction + unless (defined( $client_socket = $server_socket->accept() )) + { + print "ERROR: Cannot open socket to send status!\n"; + } + + print $client_socket $status; + + close( $client_socket ); + } + } + } + } +} + +sub mvData() +{ + #- Move old data + # + # This is required for special data disks, where + # EB procs start to write their first files before EB procs + # got disk numbers from daq_disks process. + + my @eb_list; + + #- Get EB numbers from shared mem segment names + foreach my $num (1..16){ + my $shmem = "/dev/shm/daq_evtbuild" . $num . ".shm"; + + #- If the shared memory segment exists + if( -e $shmem ){ + push(@eb_list, $num); + } + } + + #- Check free disk space on the disks with the numbers from @eb_list + foreach my $ebnum (@eb_list){ + my $free = $disks_href->{$ebnum}->{'free'}; + my $tot = $disks_href->{$ebnum}->{'tot'}; + + #- If free space is below 20% + if( 100 * $free / $tot < 20 ){ + + my $diskName = sprintf("/data%02d", $ebnum); + + my @data = glob("$diskName/data/*"); + + #- In this sorting, oldest file comes first + my @sorted_data = sort {-M $b <=> -M $a} @data; + + #- In this sorting, disk with largest free space comes first + my @disk_nums = sort { $disks_hash{$b}{'free'} cmp $disks_hash{$a}{'free'} } keys %$disks_href; + + #- Move 0.5 TB (250 files of 2 GB size) to other disks + my $i_file = 0; + my $i_disk = 0; + + foreach my $file (@sorted_data){ + + my $free_space = $disks_href->{$disk_nums[$i_disk]}->{'free'}; + + #print "empty_disk: $empty_disk, $fspace\n"; + } + } + } +} diff --git a/disks/daq_disks b/disks/daq_disks new file mode 100755 index 0000000000000000000000000000000000000000..ec4d215407c37950ad0055d885fc73b0205ba687 GIT binary patch literal 44557 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 literal 0 HcmV?d00001 diff --git a/disks/disks.c b/disks/disks.c new file mode 100644 index 0000000..edf9d20 --- /dev/null +++ b/disks/disks.c @@ -0,0 +1,276 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "shmtrans.h" +#include "worker.h" + +#define BUFFSIZE = 10000 + +FILE *popen(const char *, const char *); +char *strdup(const char *); + +const char data[22][8] = {"/data01", "/data02", "/data03", "/data04", "/data05", + "/data06", "/data07", "/data08", "/data09", "/data10", + "/data11", "/data12", "/data13", "/data14", "/data15", + "/data16", "/data17", "/data18", "/data19", "/data20", + "/data21", "/data22"}; + +const char space[] = " "; + +char diskNum[] = "diskNum"; + +int data_disks[22]; /* Available disk space */ + +char shmemBase[] = "daq_evtbuild"; /* Base name for shared memory segments */ +int shmem_nums[16]; /* Numbers for found shared memory segments */ +int nrOfShmSegms; /* Total number of found shared memory segments */ + +typedef struct TheArgsS { + int sleepTime; /*seconds*/ + int debug; +} TheArgs; + +static void usage(const char *progName) +{ + printf( "Usage: %s [-h] : Print help.", progName); + printf( " [-s