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