From 96649c716d92ccb8e0ba6b215678ca775cb25cd9 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 16 Dec 2015 14:54:19 +0100 Subject: [PATCH] Remove obsolete block_bench test This test is deprecated according to its author and test/blk/bench shall be used instead. Ref #1824 --- repos/os/src/test/block_bench/main.cc | 213 ------------------------ repos/os/src/test/block_bench/target.mk | 3 - 2 files changed, 216 deletions(-) delete mode 100644 repos/os/src/test/block_bench/main.cc delete mode 100644 repos/os/src/test/block_bench/target.mk diff --git a/repos/os/src/test/block_bench/main.cc b/repos/os/src/test/block_bench/main.cc deleted file mode 100644 index 035512596..000000000 --- a/repos/os/src/test/block_bench/main.cc +++ /dev/null @@ -1,213 +0,0 @@ -/* - * \brief Block driver interface test - * \author Sebastian Sumpf - * \date 2011-08-11 - * - * Test block device, read blocks add one to the data, write block back, read - * block again and compare outputs - */ - -/* - * Copyright (C) 2011-2013 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU General Public License version 2. - */ - -/* Genode includes */ -#include -#include -#include -#include -#include -#include - -using namespace Genode; - -enum { VERBOSE = 0 }; - -/* - * Do a bench for a specific access command and request size - * - * \param timer timer for measurements - * \param request_size number of bytes per request - * \param source block session packet sink - * \param block_size block size of the targeted device - * \param max_lba maximum logical block address of the device - */ -static void run_benchmark( - Timer::Session & timer, - Genode::size_t request_size, - Block::Session::Tx::Source * source, - size_t block_size, - unsigned max_lba, - void * buf, - bool write) -{ - /* - * request_size: how many bytes are accessed by one command - * block_size: raw block size that is used by the drive (not the software) - * block_count: how many raw blocks are accessed by one command - */ - size_t const block_count = request_size / block_size; - /* - * The goal is to get 5 test repetitions that took 2 s < time < 2.3 s, - * each. Thus we start with count = 32 and then adjust the count - * for a retry if the test time is not in range. - */ - unsigned tmp_bytes = 64 * request_size;; - unsigned bytes = 0; - unsigned ms = 0; - unsigned reps = 0; - float sec = 0; - float mb_per_sec = 0; - while (1) - { - size_t num_requests = tmp_bytes / request_size; - if ((num_requests * block_count) >= max_lba) { PERR("X"); while(1); } - - /* do measurement */ - unsigned const time_before_ms = timer.elapsed_ms(); - for (unsigned i = 0; i < num_requests; i++) - { - /* create packet */ - addr_t const lba = i * block_count; - Block::Packet_descriptor p( - source->alloc_packet(request_size), - write ? Block::Packet_descriptor::WRITE : - Block::Packet_descriptor::READ, - lba, block_count); - - /* simulate payload */ - void * pptr = source->packet_content(p); - if (write) memcpy(pptr, buf, request_size); - - /* submit packet */ - source->submit_packet(p); - p = source->get_acked_packet(); - if (!p.succeeded()) { - PERR("could not access block %lu", lba); - while (1) ; - } - /* simulate payload */ - if (!write) memcpy(buf, pptr, request_size); - - /* release packet */ - source->release_packet(p); - } - /* read results */ - unsigned const time_after_ms = timer.elapsed_ms(); - ms = time_after_ms - time_before_ms; - - /* trial log */ - if (VERBOSE) - printf("%s %u bytes in %u ms\n", - write ? "written" : "read", tmp_bytes, ms); - - /* check if test time in range */ - if (ms < 2000 || ms >= 2300) { - /* - * adjust transfer amount according to measured time - * - * FIXME implement static inertia - */ - tmp_bytes = (((float) 2150 / ms) * tmp_bytes); - tmp_bytes &= 0xfffffe00; /* align to 512 byte blocks */ - } else { - /* if new result is better than the last one do update */ - float const tmp_mb = ((float)tmp_bytes / 1000) / 1000; - float const tmp_sec = (float)ms / 1000; - float const tmp_mb_per_sec = (float)tmp_mb / tmp_sec; - if (tmp_mb_per_sec > mb_per_sec) { - sec = tmp_sec; - mb_per_sec = tmp_mb_per_sec; - bytes = tmp_bytes; - } - /* check if we need more repetitions */ - reps++; - if (reps == 5) break; - } - } - unsigned const sec_left = sec; - unsigned const sec_right = 1000 * ((float)sec - sec_left); - unsigned const mb_per_sec_left = mb_per_sec; - unsigned const mb_per_sec_right = 1000 * ((float)mb_per_sec - mb_per_sec_left); - PLOG(" %10zu %10u %u.%03u %10u.%03u", request_size, bytes, sec_left, sec_right, mb_per_sec_left, mb_per_sec_right); -} - -void print_bench_head() -{ - printf("\n"); - printf("bytes/block bytes sec MB/sec\n"); - printf("----------------------------------------------\n"); -} - -int main(int argc, char **argv) -{ - using namespace Genode; - - printf("AHCI bench\n"); - printf("==========\n"); - - enum { TX_BUF_SIZE = 2 * 1024 * 1024 }; - - /* get block connection */ - Genode::Allocator_avl block_alloc(Genode::env()->heap()); - Block::Connection _blk_con(&block_alloc, TX_BUF_SIZE); - Block::Session::Tx::Source * source = _blk_con.tx(); - - /* check block-connection info */ - Genode::size_t _blk_size = 0; - Block::sector_t blk_cnt = 0; - Block::Session::Operations ops; - _blk_con.info(&blk_cnt, &_blk_size, &ops); - if (!ops.supported(Block::Packet_descriptor::READ)) { - PERR("Block device not readable!"); - while(1); } - if (!ops.supported(Block::Packet_descriptor::WRITE)) { - PERR("Block device not writeable!"); - while(1); } - - /* data for payload simulation */ - enum { BUF_SIZE = 1 * 1024 * 1024 }; - void * buf = env()->heap()->alloc(BUF_SIZE); - for (unsigned o = 0; o < BUF_SIZE; o += sizeof(unsigned)) - *(unsigned volatile *)((addr_t)buf + o) = 0x12345678; - - static Timer::Connection timer; - - long const request_sizes[] = { - 1048576, 262144, 16384, 8192, 4096, 2048, 1024, 512, 0 }; - - /* - * Benchmark reading from SATA device - */ - - printf("\n"); - printf("read\n"); - printf("~~~~\n"); - print_bench_head(); - - for (unsigned i = 0; request_sizes[i]; i++) - run_benchmark(timer, request_sizes[i], source, _blk_size, blk_cnt, buf, 0); - - /* - * Benchmark writing to SATA device - * - * Attention: Original data will be overridden on target drive - */ - - printf("\n"); - printf("write\n"); - printf("~~~~~\n"); - print_bench_head(); - - for (unsigned i = 0; request_sizes[i]; i++) - run_benchmark(timer, request_sizes[i], source, _blk_size, blk_cnt, buf, 1); - - printf("\n"); - printf("benchmark finished\n"); - sleep_forever(); - return 0; -} - diff --git a/repos/os/src/test/block_bench/target.mk b/repos/os/src/test/block_bench/target.mk deleted file mode 100644 index 1ae545300..000000000 --- a/repos/os/src/test/block_bench/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -TARGET = test-block_bench -SRC_CC = main.cc -LIBS = base