1 /* 2 * fio - the flexible io tester 3 * 4 * Copyright (C) 2005 Jens Axboe <axboe (at) suse.de> 5 * Copyright (C) 2006-2012 Jens Axboe <axboe (at) kernel.dk> 6 * 7 * The license below covers all files distributed with fio unless otherwise 8 * noted in the file itself. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 * 23 */ 24 #include <unistd.h> 25 #include <locale.h> 26 #include <time.h> 27 28 #include "fio.h" 29 #include "smalloc.h" 30 31 int main(int argc, char *argv[], char *envp[]) 32 { 33 int ret = 1; 34 35 compiletime_assert(TD_NR <= TD_ENG_FLAG_SHIFT, "TD_ENG_FLAG_SHIFT"); 36 37 if (initialize_fio(envp)) 38 return 1; 39 40 #if !defined(CONFIG_GETTIMEOFDAY) && !defined(CONFIG_CLOCK_GETTIME) 41 #error "No available clock source!" 42 #endif 43 44 if (fio_server_create_sk_key()) 45 goto done; 46 47 if (parse_options(argc, argv)) 48 goto done_key; 49 50 /* 51 * line buffer stdout to avoid output lines from multiple 52 * threads getting mixed 53 */ 54 setvbuf(stdout, NULL, _IOLBF, 0); 55 56 fio_time_init(); 57 58 if (nr_clients) { 59 set_genesis_time(); 60 61 if (fio_start_all_clients()) 62 goto done_key; 63 ret = fio_handle_clients(&fio_client_ops); 64 } else 65 ret = fio_backend(NULL); 66 67 done_key: 68 fio_server_destroy_sk_key(); 69 done: 70 deinitialize_fio(); 71 return ret; 72 } 73