170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/******************************************************************************/
270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/*                                                                            */
370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* Copyright (c) 2009 FUJITSU LIMITED                                         */
470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/*                                                                            */
570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* This program is free software;  you can redistribute it and/or modify      */
670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* it under the terms of the GNU General Public License as published by       */
770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* the Free Software Foundation; either version 2 of the License, or          */
870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* (at your option) any later version.                                        */
970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/*                                                                            */
1070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* This program is distributed in the hope that it will be useful,            */
1170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
1270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                  */
1370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* the GNU General Public License for more details.                           */
1470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/*                                                                            */
1570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* You should have received a copy of the GNU General Public License          */
1670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* along with this program;  if not, write to the Free Software               */
174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
1870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/*                                                                            */
1970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/* Author: Miao Xie <miaox@cn.fujitsu.com>                                    */
2070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/*                                                                            */
2170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak/******************************************************************************/
2270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
2370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <stdio.h>
2470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <stdlib.h>
2570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <unistd.h>
2670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <string.h>
2770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <ctype.h>
2870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <getopt.h>
2970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <err.h>
3070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <signal.h>
3170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <sys/types.h>
3270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <sys/stat.h>
3370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include <fcntl.h>
3470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
3570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#include "../cpuset_lib/common.h"
3670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
3770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak#define BUFFER_SIZE 100
3870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
3970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modakvolatile int end;
4070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
4170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modakvoid sighandler1(UNUSED int signo)
4270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak{
4370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak}
4470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
4570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modakvoid sighandler2(UNUSED int signo)
4670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak{
4770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	end = 1;
4870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak}
4970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
5070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modakint page_cache_hog(void)
5170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak{
5270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	int fd = -1;
5370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	char buff[BUFFER_SIZE];
5470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	char path[BUFFER_SIZE];
5570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	int ret = 0;
5670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
5770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sprintf(path, "%s", "DATAFILE");
5870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	fd = open(path, O_RDONLY);
5970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (fd == -1) {
6070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		warn("open %s failed", path);
6170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		return -1;
6270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	}
6370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
64354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	while ((ret = read(fd, buff, sizeof(buff))) > 0) ;
6570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (ret == -1)
6670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		warn("read %s failed", path);
6770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
6870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	close(fd);
6970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	return ret;
7070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak}
7170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
7270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modakint mem_hog(void)
7370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak{
7470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sigset_t sigset;
7570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	int fd;
7670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	int ret = 0;
7770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
7870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (sigemptyset(&sigset) < 0)
7970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		err(1, "sigemptyset()");
8070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sigsuspend(&sigset);
8170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
8270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	while (!end) {
8370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		ret = page_cache_hog();
8470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
8570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		fd = open("./myfifo", O_WRONLY);
8670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		if (fd == -1)
87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			err(1, "open fifo failed");
8870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
8970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		if (ret) {
9070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak			if (write(fd, "0", 1) == -1)
9170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak				warn("write fifo failed.");
9270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		} else {
9370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak			if (write(fd, "1", 1) == -1)
9470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak				warn("write fifo failed.");
9570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		}
9670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
9770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		close(fd);
9870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
9970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		sigsuspend(&sigset);
10070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	}
10170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
10270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	return ret;
10370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak}
10470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
10570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modakint main(void)
10670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak{
10770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	struct sigaction sa1, sa2;
10870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
10970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sa1.sa_handler = sighandler1;
11070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (sigemptyset(&sa1.sa_mask) < 0)
11170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		err(1, "sigemptyset()");
11270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
11370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sa1.sa_flags = 0;
11470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (sigaction(SIGUSR1, &sa1, NULL) < 0)
11570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		err(1, "sigaction()");
11670259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
11770259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sa2.sa_handler = sighandler2;
11870259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (sigemptyset(&sa2.sa_mask) < 0)
11970259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		err(1, "sigemptyset()");
12070259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
12170259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	sa2.sa_flags = 0;
12270259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	if (sigaction(SIGUSR2, &sa2, NULL) < 0)
12370259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak		err(1, "sigaction()");
12470259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak
12570259d6e7ec2569972fb663ea85f959c4f2b4f81subrata_modak	return mem_hog();
126ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
127