155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak/* 255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * Copyright (c) International Business Machines Corp., 2001-2006 355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * 455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * This program is free software; you can redistribute it and/or modify 555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * it under the terms of the GNU General Public License as published by 655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * the Free Software Foundation; either version 2 of the License, or 755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * (at your option) any later version. 855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * 955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * This program is distributed in the hope that it will be useful, 1055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * but WITHOUT ANY WARRANTY; without even the implied warranty of 1155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 1255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * the GNU General Public License for more details. 1355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * 1455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * You should have received a copy of the GNU General Public License 1555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * along with this program; if not, write to the Free Software 164548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 1755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak */ 1855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#ifndef _UTIL_H_ 1955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define _UTIL_H_ 2055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include "config.h" 2255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <sys/time.h> 2455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <sys/resource.h> 2555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#ifdef HAVE_SYS_VFS_H 2755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <sys/vfs.h> 2855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#endif 2955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <sys/statvfs.h> 3055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <unistd.h> 3155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <stdlib.h> 3255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <assert.h> 3355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <string.h> 3455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <pthread.h> 3555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_sleep(unsigned secs); 3855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid *ffsb_malloc(size_t size); 3955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid *ffsb_realloc(void *ptr, size_t size); 4055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakchar *ffsb_strdup(const char *str); 4155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaksize_t ffsb_strnlen(const char *str, size_t maxlen); 4255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 4355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_mkdir(char *dirname); 4455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_getrusage(struct rusage *ru_self, struct rusage *ru_children); 4555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_sync(void); 4655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid *ffsb_align_4k(void *ptr); 4755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakchar *ffsb_printsize(char *buf, double size, int bufsize); 4855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 4955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakint ffsb_system(char *command); 5055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_milli_sleep(unsigned time); 5155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_micro_sleep(unsigned time); 5255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_unbuffer_stdout(void); 5355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_bench_gettimeofday(void); 5455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_bench_getpid(void); 5555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 5655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakuint64_t ffsb_get_filesize(char *name); 5755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 5855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modaktypedef struct { 5955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak unsigned required_count; 6055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak unsigned current_count; 6155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak pthread_mutex_t plock; 6255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak pthread_cond_t pcond; 6355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} ffsb_barrier_t ; 6455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 6555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_barrier_init(ffsb_barrier_t *fb, unsigned count); 6655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid ffsb_barrier_wait(ffsb_barrier_t *fb); 6755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 6855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakdouble cpu_so_far(void); 6955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakdouble time_so_far(void); 7055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakdouble cpu_so_far_children(void); 7155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakfloat getfsutil(char *dirname); 7255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakuint64_t getfsutil_size(char *dirname); 7355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 7455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakstruct timeval tvsub(struct timeval t1, struct timeval t0); 7555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakstruct timeval tvadd(struct timeval t1, struct timeval t0); 7655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakdouble tvtodouble(struct timeval *t); 7755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 7855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 7955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define max(a, b) (((a) > (b)) ? (a) : (b)) 8055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 8155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#ifndef timersub 8255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define timersub(a, b, result) \ 8355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak do { \ 8455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 8555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 8655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak \ 8755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak if ((result)->tv_usec < 0) { \ 8855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak (result)->tv_sec--; \ 8955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak (result)->tv_usec += 1000000; \ 9055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak } \ 9155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak } while (0) 9255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#endif /* timersub */ 9355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 9455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#endif /* _UTIL_H_ */ 95