We are using 3.0.33 kernel and verification is done on ARM cortex a9. On Fri, Jul 27, 2012 at 12:33 PM, naveen yadav <yad.naveen@xxxxxxxxx> wrote: > Hi All, > > > I am testing the cgroup block IO attributes in multiple threads scenario. > I tried testing Throttling policy (max read/write bytes per second per device) > that can be set using the following attribute- > "blkio.throttle.write_bps_device" > "blkio.throttle.read_bps_device" > but I am not getting appropriate bandwidth readings, in case of > process and threads. > > The following is my kernel configuration- > # CONFIG_RCU_BOOST is not set > # CONFIG_IKCONFIG is not set > CONFIG_LOG_BUF_SHIFT=17 > CONFIG_CGROUPS=y > # CONFIG_CGROUP_DEBUG is not set > # CONFIG_CGROUP_FREEZER is not set > CONFIG_CGROUP_DEVICE=y > # CONFIG_CPUSETS is not set > # CONFIG_CGROUP_CPUACCT is not set > CONFIG_RESOURCE_COUNTERS=y > CONFIG_CGROUP_MEM_RES_CTLR=y > CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y > CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y > # CONFIG_CGROUP_PERF is not set > CONFIG_CGROUP_SCHED=y > CONFIG_FAIR_GROUP_SCHED=y > CONFIG_RT_GROUP_SCHED=y > CONFIG_BLK_CGROUP=y > CONFIG_DEBUG_BLK_CGROUP=y > # CONFIG_NAMESPACES is not set > CONFIG_BLK_DEV_THROTTLING=y > CONFIG_CFQ_GROUP_IOSCHED=y > > Below is the procedure that I followed for testing- > first of all I mounted the cgroup blkio on /mnt > $mount -t cgroup -o blkio none /mnt > $mount | grep "cgroup" > ==> output > none on /sys/fs/cgroup type cgroup (rw,relatime,cpu) > none on /mnt type cgroup (rw,relatime,blkio) > > The default readings were taken through dd command > $dd if=linux.3.0.20.tgz of=/dev/null bs=4096 count=51200 > 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 6.041795 seconds, 18.4MB/s > $dd if=/dev/zero of=test1 bs=4096 count=51200 > 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 31.203680 seconds, 6.4MB/s > > Then I made two groups in /mnt named g1 and g2 and set the bandwidth - > $echo "8:0 2097152" > /mnt/g1/blkio.throttle.read_bps_device //2MB > $echo "8:0 16777216" > /mnt/g2/blkio.throttle.read_bps_device //16MB > $echo "8:0 1048576" > /mnt/g1/blkio.throttle.write_bps_device //1MB > $echo "8:0 5242880" > /mnt/g2/blkio.throttle.write_bps_device //5MB > > Test program - > //////////////////////////////////////////////////////////////////////////////////// > #define MAX_NAME_LEN 16 > #define NO_THREADS 2 > > volatile char flag=0; > struct sigaction sigact; > static char count=0; > > void *threadFunc(void *arg) > { > char cmd[100]; > sprintf(cmd,"dd if=/dev/zero of=ThreadTest%d bs=4096 count=51200",++count); > while(flag != 2); > system("echo 3 > /proc/sys/vm/drop_caches"); > > system("dd if=Linux.3.0.20.tgz of=/dev/null bs=4096 count=51200"); > system("echo 3 > /proc/sys/vm/drop_caches"); > system(cmd); > while(1); > return NULL; > } > > static void signal_handler(int sig) { > printf("Caught signal SIGUSR1 : %d\n",sig); > flag = 1; > } > > void init_signals(void) { > sigact.sa_handler = signal_handler; > sigemptyset(&sigact.sa_mask); > sigact.sa_flags = 0; > sigaction(SIGUSR1, &sigact, (struct sigaction *)NULL); > } > > int main(int argc, char *argv[]) > { > pid_t pid; > pthread_t pth[2]; > struct sched_param mysched; > char name[MAX_NAME_LEN + 1]; > int i; > int j; > > init_signals(); > mysched.sched_priority = 19; > > for (i=0; i<3; ++i) { > pid = fork(); > if (pid == 0) { > sprintf(name, "%d",i); > prctl(PR_SET_NAME, (unsigned long)&name); > > if (argc==2 && !strcmp(argv[1], "FIFO")) { > sched_setscheduler(0, SCHED_FIFO, &mysched); > } else if (argc==2 && !strcmp(argv[1], "RR")) { > sched_setscheduler(0, SCHED_RR, &mysched); > } > printf("\nPID=%d, Sched Policy=%d\n", > getpid(),sched_getscheduler ); > > sleep(30); > printf("Starting Thread Creation\n"); > > for(j=0;j<NO_THREADS;j++) { > pthread_create(&pth[j],NULL,threadFunc,NULL); > } > > while(!flag); > printf("InProcess\n"); > system("echo 3 > /proc/sys/vm/drop_caches"); > system("dd if=Linux.3.0.20.tgz of=/dev/null bs=4096 count=51200"); > system("echo 3 > /proc/sys/vm/drop_caches"); > system("dd if=/dtv/usb/sda1/temp of=ProcessTest bs=4096 count=51200"); > flag++; > > for(j=0;j<NO_THREADS;j++) { > pthread_join(pth[j], NULL); > } > } > } > return 0; > } > //////////////////////////////////////////////////////////////////////////////////////////////////////// > > ProcedureProcedure to run: > > linux#> ./cgroup_thread_test_arm_blk > cgroup_thread_test_arm_blk cgroup_thread_test_arm_blk3 > linux#> ./cgroup_thread_test_arm_blk > > PID=130, Sched Policy=0 > linux#> > PID=132, Sched Policy=0 > > PID=131, Sched Policy=0 > > linux#> echo 130 > /mnt/g1/tasks > linux#> echo 131 > /mnt/g2/tasks > linux#> Starting Thread Creation > Starting Thread Creation > Starting Thread Creation > > linux#> > linux#> kill -SIGUSR1 130 > linux#> Caught signal SIGUSR1 : 10 > InProcess > 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 56.019700 seconds, 2.0MB/s > 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 30.881699 seconds, 6.5MB/s > 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 63.842881 seconds, 1.7MB/s > 63.844210 seconds, 1.7MB/s > 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 62.031691 seconds, 3.2MB/s > 62.029856 seconds, 3.2MB/s > > linux#> kill -SIGUSR1 131 > linux#> Caught signal SIGUSR1 : 10 > InProcess > 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 11.231604 seconds, 9.9MB/s > 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 38.505295 seconds, 5.2MB/s > 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 28419+1 records in > 28419+1 records out > 116405611 bytes (111.0MB) copied, 28.580193 seconds, 3.9MB/s > 28.578926 seconds, 3.9MB/s > 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 267.614328 seconds, 765.3KB/s > 51200+0 records in > 51200+0 records out > 209715200 bytes (200.0MB) copied, 269.800526 seconds, 759.1KB/s > > The limits assigned to the cgroups are not followed by process. > > > > Thanks -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>