<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 23, 2021 at 11:40 PM Petr Vorel <<a href="mailto:pvorel@suse.cz">pvorel@suse.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Richie,<br>
<br>
[Cc automated-testing ML ]<br>
> These files do not appear in any runtest file nor are they called from<br>
> anywhere else.<br>
<br>
A bit of googling Documentation/controllers/io-throttle.txt mentioned in README<br>
was sent to kernel ML in 2008 [1] for 2.6.26-rc6, from this time our memory<br>
tests originated [2]. But it looks like it never got merged<br>
(<linux/blk-io-throttle.h> mentioned in patch "i/o bandwidth controller<br>
infrastructure" [3] didn't get into git).<br>
<br>
myfunctions-io.sh uses /dev/blockioctl, which IMHO never got into mainline.<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">Thanks to provide the details info.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span class="gmail_default"></span>Acked-by: Li Wang <<a href="mailto:liwang@redhat.com" target="_blank">liwang@redhat.com</a>></div><div class="gmail_default" style="font-size:small"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
IMHO it should have never even got in. Thanks for asking for delete.<br>
<br>
<span class="gmail_default" style="font-size:small"></span>Acked-by: Petr Vorel <<a href="mailto:pvorel@suse.cz" target="_blank">pvorel@suse.cz</a>><br>
<br>
Kind regards,<br>
Petr<br>
<br>
[1] <a href="https://lists.linuxfoundation.org/pipermail/containers/2008-June/011372.html" rel="noreferrer" target="_blank">https://lists.linuxfoundation.org/pipermail/containers/2008-June/011372.html</a><br>
[2] <a href="https://lists.linuxfoundation.org/pipermail/containers/2008-June/011384.html" rel="noreferrer" target="_blank">https://lists.linuxfoundation.org/pipermail/containers/2008-June/011384.html</a><br>
[3] <a href="https://lists.linuxfoundation.org/pipermail/containers/2008-June/011373.html" rel="noreferrer" target="_blank">https://lists.linuxfoundation.org/pipermail/containers/2008-June/011373.html</a><br>
<br>
> Signed-off-by: Richard Palethorpe <<a href="mailto:rpalethorpe@suse.com" target="_blank">rpalethorpe@suse.com</a>><br>
> ---<br>
<br>
> .../kernel/controllers/io-throttle/.gitignore |   1 -<br>
>  .../kernel/controllers/io-throttle/Makefile   |  32 --<br>
>  .../kernel/controllers/io-throttle/README     |  56 ----<br>
>  .../io-throttle/io_throttle_testplan.txt      |  36 ---<br>
>  .../kernel/controllers/io-throttle/iobw.c     | 281 ------------------<br>
>  .../controllers/io-throttle/myfunctions-io.sh |  61 ----<br>
>  .../io-throttle/run_io_throttle_test.sh       | 123 --------<br>
>  7 files changed, 590 deletions(-)<br>
>  delete mode 100644 testcases/kernel/controllers/io-throttle/.gitignore<br>
>  delete mode 100644 testcases/kernel/controllers/io-throttle/Makefile<br>
>  delete mode 100644 testcases/kernel/controllers/io-throttle/README<br>
>  delete mode 100644 testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt<br>
>  delete mode 100644 testcases/kernel/controllers/io-throttle/iobw.c<br>
>  delete mode 100755 testcases/kernel/controllers/io-throttle/myfunctions-io.sh<br>
>  delete mode 100755 testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh<br>
<br>
> diff --git a/testcases/kernel/controllers/io-throttle/.gitignore b/testcases/kernel/controllers/io-throttle/.gitignore<br>
> deleted file mode 100644<br>
> index 6836f7b74..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/.gitignore<br>
> +++ /dev/null<br>
> @@ -1 +0,0 @@<br>
> -/iobw<br>
> diff --git a/testcases/kernel/controllers/io-throttle/Makefile b/testcases/kernel/controllers/io-throttle/Makefile<br>
> deleted file mode 100644<br>
> index ceeba7362..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/Makefile<br>
> +++ /dev/null<br>
> @@ -1,32 +0,0 @@<br>
> -#<br>
> -#    kernel/controllers/io-throttle testcase suite Makefile.<br>
> -#<br>
> -#    Copyright (C) 2009, Cisco Systems Inc.<br>
> -#<br>
> -#    This program is free software; you can redistribute it and/or modify<br>
> -#    it under the terms of the GNU General Public License as published by<br>
> -#    the Free Software Foundation; either version 2 of the License, or<br>
> -#    (at your option) any later version.<br>
> -#<br>
> -#    This program is distributed in the hope that it will be useful,<br>
> -#    but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
> -#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br>
> -#    GNU General Public License for more details.<br>
> -#<br>
> -#    You should have received a copy of the GNU General Public License along<br>
> -#    with this program; if not, write to the Free Software Foundation, Inc.,<br>
> -#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>
> -#<br>
> -# Ngie Cooper, July 2009<br>
> -#<br>
> -<br>
> -top_srcdir           ?= ../../../..<br>
> -<br>
> -include $(top_srcdir)/include/mk/<a href="http://testcases.mk" rel="noreferrer" target="_blank">testcases.mk</a><br>
> -include $(abs_srcdir)/../Makefile.inc<br>
> -<br>
> -INSTALL_TARGETS              :=  run_io_throttle_test.sh myfunctions-io.sh<br>
> -<br>
> -LDLIBS                       += -lm -lcontrollers<br>
> -<br>
> -include $(top_srcdir)/include/mk/<a href="http://generic_leaf_target.mk" rel="noreferrer" target="_blank">generic_leaf_target.mk</a><br>
> diff --git a/testcases/kernel/controllers/io-throttle/README b/testcases/kernel/controllers/io-throttle/README<br>
> deleted file mode 100644<br>
> index e5980fb6c..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/README<br>
> +++ /dev/null<br>
> @@ -1,56 +0,0 @@<br>
> -TEST SUITE:<br>
> -<br>
> -The directory io-throttle contains the tests related to block device I/O<br>
> -bandwdith controller.<br>
> -<br>
> -More testcases are expected to be added in future.<br>
> -<br>
> -TESTS AIM:<br>
> -<br>
> -The aim of the tests is to check the block device I/O throttling functionality<br>
> -for cgroups.<br>
> -<br>
> -FILES DESCRIPTION:<br>
> -<br>
> -iobw.c<br>
> ----------------<br>
> -Simple benchmark to generate parallel streams of direct I/O (O_DIRECT). This<br>
> -benchmark fork()s one task per stream. Each task creates a separate file in the<br>
> -current working directory, fills it with data using O_DIRECT writes and re-read<br>
> -the whole file always in O_DIRECT mode. Different timestamps are used to<br>
> -evaluate per-task I/O rate and total I/O rate (seen by the parent).<br>
> -<br>
> -myfunctions.sh<br>
> -----------<br>
> -This file contains the functions which are common for the io-throttle tests.<br>
> -For ex.  the setup and cleanup functions which do the setup for running the<br>
> -test and do the cleanup once the test finishes. The setup() function creates<br>
> -/dev/blockioctl directory and mounts cgroup filesystem on it with memory<br>
> -controller. It then creates a number(n) of groups in /dev/blockioctl. The<br>
> -cleanup function does a complete cleanup of the system.<br>
> -<br>
> -Most of the error scenarios have been taken care of for a sane cleanup of the<br>
> -system. However if cleanup fails in any case, just manually execute the<br>
> -commands written in cleanup function in myfunctions.sh.<br>
> -One of the most common causes of failed cleanup is that you have done cd into<br>
> -any of the groups in controller dir tree.<br>
> -<br>
> -run_io_throttle_test.sh<br>
> -------------------<br>
> -This script creates different scenarios for I/O bandwidth controller testing<br>
> -and fires (n) tasks in different groups to write and read different I/O streams<br>
> -etc. It waits for the return status from tasks and reports test pass/fail<br>
> -accordingly.<br>
> -<br>
> -Makefile<br>
> ---------<br>
> -The usual makefile for this directory<br>
> -<br>
> -PASS/FAIL CRITERION:<br>
> -==================<br>
> -The test cases are intelligent enough in deciding the pass or failure of a<br>
> -test.<br>
> -<br>
> -README:<br>
> ---------<br>
> -This file.<br>
> diff --git a/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt b/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt<br>
> deleted file mode 100644<br>
> index fa5b85b42..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/io_throttle_testplan.txt<br>
> +++ /dev/null<br>
> @@ -1,36 +0,0 @@<br>
> -The I/O bandwidth controller testplan includes a complete set of testcases to<br>
> -verify the effectiveness of the block device I/O throttling capabilities for<br>
> -cgroups.<br>
> -<br>
> -I/O bandwidth limitations are imposed by the testcase script and verified doing<br>
> -I/O activity on a limited block device. Tests are supposed to be passed if the<br>
> -I/O rates of all the different workloads always respect the I/O limitations.<br>
> -<br>
> -TESTCASE DESCRIPTION:<br>
> -====================<br>
> -First of all we evaluate the physical I/O bandwidth (physical-io-bw) of the<br>
> -block device where the current working directory resides.<br>
> -<br>
> -Based on the physical I/O bandwidth three cgroups are created: cgroup-1,<br>
> -cgroup-2, cgroup-3. Cgroups use respectively the following I/O bandwidth<br>
> -limitations:<br>
> -- cgroup-1: physical-io-bw / 2<br>
> -- cgroup-2: physical-io-bw / 4<br>
> -- cgroup-3: physical-io-bw / 8<br>
> -<br>
> -Each test is considered passed only if the I/O limitations above are respected.<br>
> -<br>
> -Currently the following different scenarios are tested:<br>
> -- 1 single stream per cgroup using leaky-bucket I/O throttling<br>
> -- 1 single stream per cgroup using token-bucket I/O throttling<br>
> -- 2 parallel streams per cgroup using leaky-bucket I/O throttling<br>
> -- 2 parallel streams per cgroup using token-bucket I/O throttling<br>
> -- 4 parallel streams per cgroup using leaky-bucket I/O throttling<br>
> -- 4 parallel streams per cgroup using token-bucket I/O throttling<br>
> -<br>
> -For any other information please refer to<br>
> -Documentation/controllers/io-throttle.txt in kernel documentation.<br>
> -<br>
> -Questions?<br>
> -----------<br>
> -Send email to: <a href="mailto:righi.andrea@gmail.com" target="_blank">righi.andrea@gmail.com</a><br>
> diff --git a/testcases/kernel/controllers/io-throttle/iobw.c b/testcases/kernel/controllers/io-throttle/iobw.c<br>
> deleted file mode 100644<br>
> index e4d9c9bb6..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/iobw.c<br>
> +++ /dev/null<br>
> @@ -1,281 +0,0 @@<br>
> -/*<br>
> - * iobw.c - simple I/O bandwidth benchmark<br>
> - *<br>
> - * This program is free software; you can redistribute it and/or<br>
> - * modify it under the terms of the GNU General Public<br>
> - * License as published by the Free Software Foundation; either<br>
> - * version 2 of the License, or (at your option) any later version.<br>
> - *<br>
> - * This program is distributed in the hope that it will be useful,<br>
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
> - * General Public License for more details.<br>
> - *<br>
> - * You should have received a copy of the GNU General Public<br>
> - * License along with this program; if not, write to the<br>
> - * Free Software Foundation, Inc., 59 Temple Place - Suite 330,<br>
> - * Boston, MA 021110-1307, USA.<br>
> - *<br>
> - * Copyright (C) 2008 Andrea Righi <<a href="mailto:righi.andrea@gmail.com" target="_blank">righi.andrea@gmail.com</a>><br>
> - */<br>
> -<br>
> -#define _GNU_SOURCE<br>
> -#define __USE_GNU<br>
> -<br>
> -#include <errno.h><br>
> -#include <stdio.h><br>
> -#include <stdlib.h><br>
> -#include <fcntl.h><br>
> -#include <signal.h><br>
> -#include <string.h><br>
> -#include <unistd.h><br>
> -#include <limits.h><br>
> -#include <sys/types.h><br>
> -#include <sys/stat.h><br>
> -#include <sys/time.h><br>
> -#include <sys/wait.h><br>
> -<br>
> -#ifndef PAGE_SIZE<br>
> -#define PAGE_SIZE sysconf(_SC_PAGE_SIZE)<br>
> -#endif<br>
> -<br>
> -#define align(x,a)           __align_mask(x,(typeof(x))(a)-1)<br>
> -#define __align_mask(x,mask) (((x)+(mask))&~(mask))<br>
> -#define kb(x)                        ((x) >> 10)<br>
> -<br>
> -const char usage[] = "Usage: iobw [-direct] threads chunk_size data_size\n";<br>
> -const char child_fmt[] = "(%s) task %3d: time %4lu.%03lu bw %7lu KiB/s (%s)\n";<br>
> -const char parent_fmt[] =<br>
> -    "(%s) parent %d: time %4lu.%03lu bw %7lu KiB/s (%s)\n";<br>
> -<br>
> -static int directio = 0;<br>
> -static size_t data_size = 0;<br>
> -static size_t chunk_size = 0;<br>
> -<br>
> -typedef enum {<br>
> -     OP_WRITE,<br>
> -     OP_READ,<br>
> -     NUM_IOPS,<br>
> -} iops_t;<br>
> -<br>
> -static const char *iops[] = {<br>
> -     "WRITE",<br>
> -     "READ ",<br>
> -     "TOTAL",<br>
> -};<br>
> -<br>
> -static int threads;<br>
> -pid_t *children;<br>
> -<br>
> -char *mygroup;<br>
> -<br>
> -static void print_results(int id, iops_t op, size_t bytes, struct timeval *diff)<br>
> -{<br>
> -     fprintf(stdout, id ? child_fmt : parent_fmt,<br>
> -             mygroup, id, diff->tv_sec, diff->tv_usec / 1000,<br>
> -             (bytes / (diff->tv_sec * 1000000L + diff->tv_usec))<br>
> -             * 1000000L / 1024, iops[op]);<br>
> -}<br>
> -<br>
> -static void thread(int id)<br>
> -{<br>
> -     struct timeval start, stop, diff;<br>
> -     int fd, i, ret;<br>
> -     size_t n;<br>
> -     void *buf;<br>
> -     int flags = O_CREAT | O_RDWR | O_LARGEFILE;<br>
> -     char filename[32];<br>
> -<br>
> -     ret = posix_memalign(&buf, PAGE_SIZE, chunk_size);<br>
> -     if (ret < 0) {<br>
> -             fprintf(stderr,<br>
> -                     "ERROR: task %d couldn't allocate %zu bytes (%s)\n",<br>
> -                     id, chunk_size, strerror(errno));<br>
> -             exit(1);<br>
> -     }<br>
> -     memset(buf, 0xaa, chunk_size);<br>
> -<br>
> -     snprintf(filename, sizeof(filename), "%s-%d-iobw.tmp", mygroup, id);<br>
> -     if (directio)<br>
> -             flags |= O_DIRECT;<br>
> -     fd = open(filename, flags, 0600);<br>
> -     if (fd < 0) {<br>
> -             fprintf(stderr, "ERROR: task %d couldn't open %s (%s)\n",<br>
> -                     id, filename, strerror(errno));<br>
> -             free(buf);<br>
> -             exit(1);<br>
> -     }<br>
> -<br>
> -     /* Write */<br>
> -     lseek(fd, 0, SEEK_SET);<br>
> -     n = 0;<br>
> -     gettimeofday(&start, NULL);<br>
> -     while (n < data_size) {<br>
> -             i = write(fd, buf, chunk_size);<br>
> -             if (i < 0) {<br>
> -                     fprintf(stderr, "ERROR: task %d writing to %s (%s)\n",<br>
> -                             id, filename, strerror(errno));<br>
> -                     ret = 1;<br>
> -                     goto out;<br>
> -             }<br>
> -             n += i;<br>
> -     }<br>
> -     gettimeofday(&stop, NULL);<br>
> -     timersub(&stop, &start, &diff);<br>
> -     print_results(id + 1, OP_WRITE, data_size, &diff);<br>
> -<br>
> -     /* Read */<br>
> -     lseek(fd, 0, SEEK_SET);<br>
> -     n = 0;<br>
> -     gettimeofday(&start, NULL);<br>
> -     while (n < data_size) {<br>
> -             i = read(fd, buf, chunk_size);<br>
> -             if (i < 0) {<br>
> -                     fprintf(stderr, "ERROR: task %d reading to %s (%s)\n",<br>
> -                             id, filename, strerror(errno));<br>
> -                     ret = 1;<br>
> -                     goto out;<br>
> -             }<br>
> -             n += i;<br>
> -     }<br>
> -     gettimeofday(&stop, NULL);<br>
> -     timersub(&stop, &start, &diff);<br>
> -     print_results(id + 1, OP_READ, data_size, &diff);<br>
> -out:<br>
> -     close(fd);<br>
> -     unlink(filename);<br>
> -     free(buf);<br>
> -     exit(ret);<br>
> -}<br>
> -<br>
> -static void spawn(int id)<br>
> -{<br>
> -     pid_t pid;<br>
> -<br>
> -     pid = fork();<br>
> -     switch (pid) {<br>
> -     case -1:<br>
> -             fprintf(stderr, "ERROR: couldn't fork thread %d\n", id);<br>
> -             exit(1);<br>
> -     case 0:<br>
> -             thread(id);<br>
> -     default:<br>
> -             children[id] = pid;<br>
> -     }<br>
> -}<br>
> -<br>
> -void signal_handler(int sig)<br>
> -{<br>
> -     char filename[32];<br>
> -     int i;<br>
> -<br>
> -     for (i = 0; i < threads; i++)<br>
> -             if (children[i])<br>
> -                     kill(children[i], SIGKILL);<br>
> -<br>
> -     for (i = 0; i < threads; i++) {<br>
> -             struct stat mystat;<br>
> -<br>
> -             snprintf(filename, sizeof(filename), "%s-%d-iobw.tmp",<br>
> -                      mygroup, i);<br>
> -             if (stat(filename, &mystat) < 0)<br>
> -                     continue;<br>
> -             unlink(filename);<br>
> -     }<br>
> -<br>
> -     fprintf(stdout, "received signal %d, exiting\n", sig);<br>
> -     exit(0);<br>
> -}<br>
> -<br>
> -unsigned long long memparse(char *ptr, char **retptr)<br>
> -{<br>
> -     unsigned long long ret = strtoull(ptr, retptr, 0);<br>
> -<br>
> -     switch (**retptr) {<br>
> -     case 'G':<br>
> -     case 'g':<br>
> -             ret <<= 10;<br>
> -     case 'M':<br>
> -     case 'm':<br>
> -             ret <<= 10;<br>
> -     case 'K':<br>
> -     case 'k':<br>
> -             ret <<= 10;<br>
> -             (*retptr)++;<br>
> -     default:<br>
> -             break;<br>
> -     }<br>
> -     return ret;<br>
> -}<br>
> -<br>
> -int main(int argc, char *argv[])<br>
> -{<br>
> -     struct timeval start, stop, diff;<br>
> -     char *end;<br>
> -     int i;<br>
> -<br>
> -     if (argv[1] && strcmp(argv[1], "-direct") == 0) {<br>
> -             directio = 1;<br>
> -             argc--;<br>
> -             argv++;<br>
> -     }<br>
> -     if (argc != 4) {<br>
> -             fprintf(stderr, usage);<br>
> -             exit(1);<br>
> -     }<br>
> -     if ((threads = atoi(argv[1])) == 0) {<br>
> -             fprintf(stderr, usage);<br>
> -             exit(1);<br>
> -     }<br>
> -     chunk_size = align(memparse(argv[2], &end), PAGE_SIZE);<br>
> -     if (*end) {<br>
> -             fprintf(stderr, usage);<br>
> -             exit(1);<br>
> -     }<br>
> -     data_size = align(memparse(argv[3], &end), PAGE_SIZE);<br>
> -     if (*end) {<br>
> -             fprintf(stderr, usage);<br>
> -             exit(1);<br>
> -     }<br>
> -<br>
> -     /* retrieve group name */<br>
> -     mygroup = getenv("MYGROUP");<br>
> -     if (!mygroup) {<br>
> -             fprintf(stderr,<br>
> -                     "ERROR: undefined environment variable MYGROUP\n");<br>
> -             exit(1);<br>
> -     }<br>
> -<br>
> -     children = malloc(sizeof(pid_t) * threads);<br>
> -     if (!children) {<br>
> -             fprintf(stderr, "ERROR: not enough memory\n");<br>
> -             exit(1);<br>
> -     }<br>
> -<br>
> -     /* handle user interrupt */<br>
> -     signal(SIGINT, signal_handler);<br>
> -     /* handle kill from shell */<br>
> -     signal(SIGTERM, signal_handler);<br>
> -<br>
> -     fprintf(stdout, "chunk_size %zuKiB, data_size %zuKiB\n",<br>
> -             kb(chunk_size), kb(data_size));<br>
> -     fflush(stdout);<br>
> -<br>
> -     gettimeofday(&start, NULL);<br>
> -     for (i = 0; i < threads; i++)<br>
> -             spawn(i);<br>
> -     for (i = 0; i < threads; i++) {<br>
> -             int status;<br>
> -             wait(&status);<br>
> -             if (!WIFEXITED(status))<br>
> -                     exit(1);<br>
> -     }<br>
> -     gettimeofday(&stop, NULL);<br>
> -<br>
> -     timersub(&stop, &start, &diff);<br>
> -     print_results(0, NUM_IOPS, data_size * threads * NUM_IOPS, &diff);<br>
> -     fflush(stdout);<br>
> -     free(children);<br>
> -<br>
> -     exit(0);<br>
> -}<br>
> diff --git a/testcases/kernel/controllers/io-throttle/myfunctions-io.sh b/testcases/kernel/controllers/io-throttle/myfunctions-io.sh<br>
> deleted file mode 100755<br>
> index bf4bb2b9a..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/myfunctions-io.sh<br>
> +++ /dev/null<br>
> @@ -1,61 +0,0 @@<br>
> -#!/bin/sh<br>
> -#<br>
> -# This program is free software; you can redistribute it and/or<br>
> -# modify it under the terms of the GNU General Public<br>
> -# License as published by the Free Software Foundation; either<br>
> -# version 2 of the License, or (at your option) any later version.<br>
> -#<br>
> -# This program is distributed in the hope that it will be useful,<br>
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
> -# General Public License for more details.<br>
> -#<br>
> -# You should have received a copy of the GNU General Public<br>
> -# License along with this program; if not, write to the<br>
> -# Free Software Foundation, Inc., 59 Temple Place - Suite 330,<br>
> -# Boston, MA 021110-1307, USA.<br>
> -#<br>
> -# Copyright (C) 2008 Andrea Righi <<a href="mailto:righi.andrea@gmail.com" target="_blank">righi.andrea@gmail.com</a>><br>
> -#<br>
> -# usage . myfunctions.sh<br>
> -<br>
> -setup()<br>
> -{<br>
> -     # create testcase cgroups<br>
> -     if [ -e /dev/blockioctl ]; then<br>
> -             echo "WARN: /dev/blockioctl already exist! overwriting."<br>
> -             cleanup<br>
> -     fi<br>
> -     mkdir /dev/blockioctl<br>
> -     mount -t cgroup -o blockio cgroup /dev/blockioctl<br>
> -     if [ $? -ne 0 ]; then<br>
> -             echo "ERROR: could not mount cgroup filesystem " \<br>
> -                     " on /dev/blockioctl. Exiting test."<br>
> -             cleanup<br>
> -             exit 1<br>
> -     fi<br>
> -     for i in `seq 1 3`; do<br>
> -             if [ -e /dev/blockioctl/cgroup-$i ]; then<br>
> -                     rmdir /dev/blockioctl/cgroup-$i<br>
> -                     echo "WARN: earlier cgroup-$i found and removed"<br>
> -             fi<br>
> -             mkdir /dev/blockioctl/cgroup-$i<br>
> -             if [ $? -ne 0 ]; then<br>
> -                     echo "ERROR: could not create cgroup-$i" \<br>
> -                             "Check your permissions. Exiting test."<br>
> -                     cleanup<br>
> -                     exit 1<br>
> -             fi<br>
> -     done<br>
> -}<br>
> -<br>
> -cleanup()<br>
> -{<br>
> -     echo "Cleanup called"<br>
> -     for i in `seq 1 3`; do<br>
> -             rmdir /dev/blockioctl/cgroup-$i<br>
> -             rm -f /tmp/cgroup-$i.out<br>
> -     done<br>
> -     umount /dev/blockioctl<br>
> -     rmdir /dev/blockioctl<br>
> -}<br>
> diff --git a/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh b/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh<br>
> deleted file mode 100755<br>
> index c855fd052..000000000<br>
> --- a/testcases/kernel/controllers/io-throttle/run_io_throttle_test.sh<br>
> +++ /dev/null<br>
> @@ -1,123 +0,0 @@<br>
> -#!/bin/bash<br>
> -#<br>
> -# This program is free software; you can redistribute it and/or<br>
> -# modify it under the terms of the GNU General Public<br>
> -# License as published by the Free Software Foundation; either<br>
> -# version 2 of the License, or (at your option) any later version.<br>
> -#<br>
> -# This program is distributed in the hope that it will be useful,<br>
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
> -# General Public License for more details.<br>
> -#<br>
> -# You should have received a copy of the GNU General Public<br>
> -# License along with this program; if not, write to the<br>
> -# Free Software Foundation, Inc., 59 Temple Place - Suite 330,<br>
> -# Boston, MA 021110-1307, USA.<br>
> -#<br>
> -# Copyright (C) 2008 Andrea Righi <<a href="mailto:righi.andrea@gmail.com" target="_blank">righi.andrea@gmail.com</a>><br>
> -#<br>
> -# Usage: ./run_io_throttle_test.sh<br>
> -# Description: test block device I/O bandwidth controller functionalities<br>
> -<br>
> -. ./myfunctions-io.sh<br>
> -<br>
> -trap cleanup SIGINT<br>
> -<br>
> -BUFSIZE=16m<br>
> -DATASIZE=64m<br>
> -<br>
> -setup<br>
> -<br>
> -# get the device name of the entire mounted block device<br>
> -dev=`df -P . | sed '1d' | cut -d' ' -f1 | sed 's/[p]*[0-9]*$//'`<br>
> -<br>
> -# evaluate device bandwidth<br>
> -export MYGROUP=<br>
> -phys_bw=`./iobw -direct 1 $BUFSIZE $DATASIZE | grep TOTAL | awk '{print $7}'`<br>
> -if [ $? -ne 0 ]; then<br>
> -     echo "ERROR: could not evaluate i/o bandwidth of $dev. Exiting test."<br>
> -     cleanup<br>
> -     exit 1<br>
> -fi<br>
> -echo ">> physical i/o bandwidth limit is: $phys_bw KiB/s"<br>
> -# show cgroup i/o bandwidth limits<br>
> -for i in `seq 1 3`; do<br>
> -     MYGROUP=cgroup-$i<br>
> -     echo "($MYGROUP) max i/o bw: " \<br>
> -             "$(($phys_bw / `echo 2^$i | bc`)) KiB/s + O_DIRECT"<br>
> -done<br>
> -<br>
> -for tasks in 1 2 4; do<br>
> -for strategy in 0 1; do<br>
> -     # set bw limiting rules<br>
> -     if [ -f /dev/blockioctl/blockio.bandwidth ]; then<br>
> -             io_throttle_file=blockio.bandwidth<br>
> -     elif [ -f /dev/blockioctl/blockio.bandwidth-max ]; then<br>
> -             io_throttle_file=blockio.bandwidth-max<br>
> -     else<br>
> -             echo "ERROR: unknown kernel ABI. Exiting test."<br>
> -             cleanup<br>
> -             exit 1<br>
> -     fi<br>
> -     for i in `seq 1 3`; do<br>
> -             limit=$(($phys_bw * 1024 / `echo 2^$i | bc`))<br>
> -             IOBW[$i]=$(($limit / 1024))<br>
> -             /bin/echo $dev:$limit:$strategy:$limit > \<br>
> -                     /dev/blockioctl/cgroup-$i/${io_throttle_file}<br>
> -             if [ $? -ne 0 ]; then<br>
> -                     echo "ERROR: could not set i/o bandwidth limit for cgroup-$i. Exiting test."<br>
> -                     cleanup<br>
> -                     exit 1<br>
> -             fi<br>
> -     done<br>
> -<br>
> -     # run benchmark<br>
> -     if [ $tasks -eq 1 ]; then<br>
> -             stream="stream"<br>
> -     else<br>
> -             stream="streams"<br>
> -     fi<br>
> -     echo -n ">> testing $tasks parallel $stream per cgroup "<br>
> -     if [ $strategy -eq 0 ]; then<br>
> -             echo "(leaky-bucket i/o throttling)"<br>
> -     else<br>
> -             echo "(token-bucket i/o throttling)"<br>
> -     fi<br>
> -     for i in `seq 1 3`; do<br>
> -             MYGROUP=cgroup-$i<br>
> -             /bin/echo $$ > /dev/blockioctl/$MYGROUP/tasks<br>
> -             if [ $? -ne 0 ]; then<br>
> -                     echo "ERROR: could not set i/o bandwidth limit for cgroup-$i. Exiting test."<br>
> -                     cleanup<br>
> -                     exit 1<br>
> -             fi<br>
> -             # exec i/o benchmark<br>
> -             ./iobw -direct $tasks $BUFSIZE $DATASIZE > /tmp/$MYGROUP.out &<br>
> -             PID[$i]=$!<br>
> -     done<br>
> -     /bin/echo $$ > /dev/blockioctl/tasks<br>
> -<br>
> -     # wait for children completion<br>
> -     for i in `seq 1 3`; do<br>
> -             MYGROUP=cgroup-$i<br>
> -             wait ${PID[$i]}<br>
> -             ret=$?<br>
> -             if [ $ret -ne 0 ]; then<br>
> -                     echo "ERROR: error code $ret during test $tasks.$strategy.$i. Exiting test."<br>
> -                     cleanup<br>
> -                     exit 1<br>
> -             fi<br>
> -             iorate=`grep parent /tmp/${MYGROUP}.out | awk '{print $7}'`<br>
> -             diff=$((${IOBW[$i]} - $iorate))<br>
> -             echo "($MYGROUP) i/o-bw ${IOBW[$i]} KiB/s, i/o-rate $iorate KiB/s, err $diff KiB/s"<br>
> -             if [ ${IOBW[$i]} -ge $iorate ]; then<br>
> -                     echo "TPASS   Block device I/O bandwidth controller: test $tasks.$strategy.$i PASSED";<br>
> -             else<br>
> -                     echo "TFAIL   Block device I/O bandwidth controller: test $tasks.$strategy.$i FAILED";<br>
> -             fi<br>
> -     done<br>
> -done<br>
> -done<br>
> -<br>
> -cleanup<br>
<br>
-- <br>
Mailing list info: <a href="https://lists.linux.it/listinfo/ltp" rel="noreferrer" target="_blank">https://lists.linux.it/listinfo/ltp</a><br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>