blob: 25a9a10bbdf216a0ac90fa88621dcb7cb753800e [file] [log] [blame]
/*
* Copyright (c) International Business Machines Corp., 2001-2004
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _FFSB_H_
#define _FFSB_H_
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include "config.h"
#include "ffsb_op.h"
#include "ffsb_tg.h"
#include "ffsb_fs.h"
/*
* The main thread wakes up once in so many seconds to check elapsed
* time this is a tunable for that sleep interval in seconds
*/
#define FFSB_TG_WAIT_TIME (1)
#define MARK printf("MARK FUNC: %s() @ %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
struct results {
struct rusage before;
struct rusage after;
double runtime;
double cputime;
double cpu_before;
double cpu_after;
double cpu_total;
};
struct ffsb_tg;
struct ffsb_fs;
typedef struct profile_config {
struct config_options *global;
struct container *fs_container;
struct container *tg_container;
} profile_config_t;
typedef struct ffsb_config {
unsigned time;
unsigned num_filesys;
unsigned num_threadgroups;
int num_totalthreads; /* gets calculated after init() */
struct ffsb_tg *groups;
struct ffsb_fs *filesystems;
struct profile_config *profile_conf;
char *callout; /* we will try and exec this */
struct results results;
} ffsb_config_t;
void init_ffsb_config(ffsb_config_t *fc, unsigned num_fs, unsigned num_tg);
/*
* this is kind of like a special case "constructor" which is only
* used by fs-aging code to build a fake config for the aging tg
*/
void init_ffsb_config_1fs(ffsb_config_t *fc, struct ffsb_fs *fs,
struct ffsb_tg *tg);
void destroy_ffsb_config(ffsb_config_t *fc);
/* getters/setters, parser only should use setters */
void fc_set_time(ffsb_config_t *fc, unsigned time);
void fc_set_num_totalthreads(ffsb_config_t *fc, int num);
/* num is zero-based */
/* get a particular threadgroup object */
struct ffsb_tg *fc_get_tg(ffsb_config_t *fc, unsigned num);
/* get a particular filesystem object */
struct ffsb_fs *fc_get_fs(ffsb_config_t *fc, unsigned num);
void fc_set_callout(ffsb_config_t *fc, char *callout);
char *fc_get_callout(ffsb_config_t *fc);
#endif