cpu.c revision 2dc1bbeb58edc85f2829eed6729862c438ea2353
1da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe/* 2da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe * CPU engine 3da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe * 4da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe * Doesn't transfer any data, merely burns CPU cycles according to 5da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe * the settings. 6da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe * 7da751ca9665bcdeca56d2eec5b629a0953c07662Jens Axboe */ 85f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe#include "../fio.h" 95f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe#include "../os.h" 102866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe 11ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboestatic int fio_cpuio_queue(struct thread_data *td, struct io_u fio_unused *io_u) 12ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe{ 132dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe __usec_sleep(td->o.cpucycle); 14ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe return FIO_Q_COMPLETED; 15ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe} 16ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe 17ea2877a4ab0fb047a503ba0d7a0fd5393d0fb099Jens Axboestatic int fio_cpuio_setup(struct thread_data fio_unused *td) 18ea2877a4ab0fb047a503ba0d7a0fd5393d0fb099Jens Axboe{ 19ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe struct fio_file *f; 20af52b3455ad892322aab2791282b6bd4efdfdbf3Jens Axboe unsigned int i; 21ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe 222dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe td->o.size = -1; 232dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe td->io_size = td->o.size; 24ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe td->total_io_size = td->io_size; 25ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe 26ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe for_each_file(td, f, i) { 27ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe f->real_file_size = -1; 28ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe f->file_size = -1; 29ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe } 30ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe 31ea2877a4ab0fb047a503ba0d7a0fd5393d0fb099Jens Axboe return 0; 32ea2877a4ab0fb047a503ba0d7a0fd5393d0fb099Jens Axboe} 33ea2877a4ab0fb047a503ba0d7a0fd5393d0fb099Jens Axboe 342866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboestatic int fio_cpuio_init(struct thread_data *td) 352866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe{ 362dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe struct thread_options *o = &td->o; 372dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe 382dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe if (!o->cpuload) { 39ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe td_vmsg(td, EINVAL, "cpu thread needs rate (cpuload=)","cpuio"); 402866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe return 1; 41ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe } 42ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe 432dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe if (o->cpuload > 100) 442dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe o->cpuload = 100; 452866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe 46ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe /* 47ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe * set thinktime_sleep and thinktime_spin appropriately 48ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe */ 492dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe o->thinktime_blocks = 1; 502dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe o->thinktime_spin = 0; 512dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe o->thinktime = (o->cpucycle * (100 - o->cpuload)) / o->cpuload; 522866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe 532dc1bbeb58edc85f2829eed6729862c438ea2353Jens Axboe o->nr_files = o->open_files = 1; 54ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe return 0; 55ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe} 56ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe 57ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboestatic int fio_cpuio_open(struct thread_data fio_unused *td, struct fio_file *f) 58ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe{ 59ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe f->fd = 0; 602866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe return 0; 612866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe} 622866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe 635f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboestatic struct ioengine_ops ioengine = { 642866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe .name = "cpuio", 652866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe .version = FIO_IOOPS_VERSION, 66ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe .queue = fio_cpuio_queue, 672866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe .init = fio_cpuio_init, 68ea2877a4ab0fb047a503ba0d7a0fd5393d0fb099Jens Axboe .setup = fio_cpuio_setup, 69ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe .open_file = fio_cpuio_open, 70ba0fbe1029bae1de08d66a72b6d0b2505c67c438Jens Axboe .flags = FIO_SYNCIO | FIO_DISKLESSIO, 712866c82d598e30604d8a92723c664ee6ced90fb0Jens Axboe}; 725f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe 735f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboestatic void fio_init fio_cpuio_register(void) 745f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe{ 755f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe register_ioengine(&ioengine); 765f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe} 775f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe 785f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboestatic void fio_exit fio_cpuio_unregister(void) 795f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe{ 805f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe unregister_ioengine(&ioengine); 815f350952eff89948bfbf1eb6ac4d3d08a9109581Jens Axboe} 82