| /* |
| * fio - the flexible io tester |
| * |
| * Copyright (C) 2005 Jens Axboe <axboe@suse.de> |
| * Copyright (C) 2006-2012 Jens Axboe <axboe@kernel.dk> |
| * |
| * The license below covers all files distributed with fio unless otherwise |
| * noted in the file itself. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| */ |
| #include <unistd.h> |
| #include <locale.h> |
| #include <time.h> |
| |
| #include "fio.h" |
| #include "hash.h" |
| #include "smalloc.h" |
| #include "verify.h" |
| #include "trim.h" |
| #include "diskutil.h" |
| #include "profile.h" |
| #include "lib/rand.h" |
| #include "memalign.h" |
| #include "server.h" |
| |
| uintptr_t page_mask; |
| uintptr_t page_size; |
| |
| static int endian_check(void) |
| { |
| union { |
| uint8_t c[8]; |
| uint64_t v; |
| } u; |
| int le = 0, be = 0; |
| |
| u.v = 0x12; |
| if (u.c[7] == 0x12) |
| be = 1; |
| else if (u.c[0] == 0x12) |
| le = 1; |
| |
| #if defined(FIO_LITTLE_ENDIAN) |
| if (be) |
| return 1; |
| #elif defined(FIO_BIG_ENDIAN) |
| if (le) |
| return 1; |
| #else |
| return 1; |
| #endif |
| |
| if (!le && !be) |
| return 1; |
| |
| return 0; |
| } |
| |
| int main(int argc, char *argv[], char *envp[]) |
| { |
| long ps; |
| |
| if (endian_check()) { |
| log_err("fio: endianness settings appear wrong.\n"); |
| log_err("fio: please report this to fio@vger.kernel.org\n"); |
| return 1; |
| } |
| |
| #if !defined(CONFIG_GETTIMEOFDAY) && !defined(CONFIG_CLOCK_GETTIME) |
| #error "No available clock source!" |
| #endif |
| |
| arch_init(envp); |
| |
| sinit(); |
| |
| /* |
| * We need locale for number printing, if it isn't set then just |
| * go with the US format. |
| */ |
| if (!getenv("LC_NUMERIC")) |
| setlocale(LC_NUMERIC, "en_US"); |
| |
| ps = sysconf(_SC_PAGESIZE); |
| if (ps < 0) { |
| log_err("Failed to get page size\n"); |
| return 1; |
| } |
| |
| page_size = ps; |
| page_mask = ps - 1; |
| |
| fio_keywords_init(); |
| |
| if (parse_options(argc, argv)) |
| return 1; |
| |
| fio_time_init(); |
| |
| if (nr_clients) |
| return fio_handle_clients(); |
| else |
| return fio_backend(); |
| } |