Recent changes (master)
The following changes since commit 4fe721ac83e84df7c6be07394d1963fd1ec5d9a6:
os/os-dragonfly: sync with header file changes in upstream (2018-04-10 09:17:22 -0600)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to c479640d6208236744f0562b1e79535eec290e2b:
Merge branch 'proc_group' of https://github.com/sitsofe/fio (2018-04-13 17:25:35 -0600)
----------------------------------------------------------------
Jens Axboe (1):
Merge branch 'proc_group' of https://github.com/sitsofe/fio
Sitsofe Wheeler (7):
windows: update EULA
windows: prepare for Windows build split
windows: target Windows 7 and add support for more than 64 CPUs
doc: add Windows processor group behaviour and Windows target option configure/Makefile: make Cygwin force less
appveyor: make 32 bit build target XP + minor fixes
doc: add cpus_allowed reference to log_compression_cpus
HOWTO | 47 +++-- Makefile | 3 - README | 11 +- appveyor.yml | 4 +- configure | 29 ++- fio.1 | 47 +++-- os/os-windows-7.h | 367 +++++++++++++++++++++++++++++++++++ os/os-windows-xp.h | 70 +++++++ os/os-windows.h | 85 +------- os/windows/eula.rtf | Bin 1075 -> 1077 bytes os/windows/posix.c | 2 + os/windows/posix/include/arpa/inet.h | 2 + os/windows/posix/include/poll.h | 9 + server.c | 6 +- 14 files changed, 551 insertions(+), 131 deletions(-) create mode 100644 os/os-windows-7.h create mode 100644 os/os-windows-xp.h
---
Diff of recent changes:
HOWTO +31 -16
@@ -2377,24 +2377,27 @@ Threads, processes and job synchronization Set the I/O priority class. See man :manpage:`ionice(1)`. -.. option:: cpumask=int - - Set the CPU affinity of this job. The parameter given is a bit mask of - allowed CPUs the job may run on. So if you want the allowed CPUs to be 1 - and 5, you would pass the decimal value of (1 << 1 | 1 << 5), or 34. See man - :manpage:`sched_setaffinity(2)`. This may not work on all supported - operating systems or kernel versions. This option doesn't work well for a - higher CPU count than what you can store in an integer mask, so it can only - control cpus 1-32. For boxes with larger CPU counts, use - :option:`cpus_allowed`. - .. option:: cpus_allowed=str Controls the same options as :option:`cpumask`, but accepts a textual - specification of the permitted CPUs instead. So to use CPUs 1 and 5 you - would specify ``cpus_allowed=1,5``. This option also allows a range of CPUs - to be specified -- say you wanted a binding to CPUs 1, 5, and 8 to 15, you - would set ``cpus_allowed=1,5,8-15``. + specification of the permitted CPUs instead and CPUs are indexed from 0. So + to use CPUs 0 and 5 you would specify ``cpus_allowed=0,5``. This option also + allows a range of CPUs to be specified -- say you wanted a binding to CPUs + 0, 5, and 8 to 15, you would set ``cpus_allowed=0,5,8-15``. + + On Windows, when ``cpus_allowed`` is unset only CPUs from fio's current + processor group will be used and affinity settings are inherited from the + system. An fio build configured to target Windows 7 makes options that set + CPUs processor group aware and values will set both the processor group + and a CPU from within that group. For example, on a system where processor + group 0 has 40 CPUs and processor group 1 has 32 CPUs, ``cpus_allowed`` + values between 0 and 39 will bind CPUs from processor group 0 and + ``cpus_allowed`` values between 40 and 71 will bind CPUs from processor + group 1. When using ``cpus_allowed_policy=shared`` all CPUs specified by a + single ``cpus_allowed`` option must be from the same processor group. For + Windows fio builds not built for Windows 7, CPUs will only be selected from + (and be relative to) whatever processor group fio happens to be running in + and CPUs from other processor groups cannot be used. .. option:: cpus_allowed_policy=str
@@ -2411,6 +2414,17 @@ Threads, processes and job synchronization enough CPUs are given for the jobs listed, then fio will roundrobin the CPUs in the set. +.. option:: cpumask=int + + Set the CPU affinity of this job. The parameter given is a bit mask of + allowed CPUs the job may run on. So if you want the allowed CPUs to be 1 + and 5, you would pass the decimal value of (1 << 1 | 1 << 5), or 34. See man + :manpage:`sched_setaffinity(2)`. This may not work on all supported + operating systems or kernel versions. This option doesn't work well for a + higher CPU count than what you can store in an integer mask, so it can only + control cpus 1-32. For boxes with larger CPU counts, use + :option:`cpus_allowed`. + .. option:: numa_cpu_nodes=str Set this job running on specified NUMA nodes' CPUs. The arguments allow
@@ -2921,7 +2935,8 @@ Measurements and reporting Define the set of CPUs that are allowed to handle online log compression for the I/O jobs. This can provide better isolation between performance - sensitive jobs, and background compression work. + sensitive jobs, and background compression work. See + :option:`cpus_allowed` for the format used. .. option:: log_store_compressed=bool
Makefile +0 -3
@@ -59,9 +59,6 @@ ifdef CONFIG_LIBHDFS SOURCE += engines/libhdfs.c endif -ifdef CONFIG_64BIT_LLP64 - CFLAGS += -DBITS_PER_LONG=32 -endif ifdef CONFIG_64BIT CFLAGS += -DBITS_PER_LONG=64 endif
README +7 -4
@@ -172,15 +172,18 @@ directory. How to compile fio on 64-bit Windows: 1. Install Cygwin (http://www.cygwin.com/). Install **make** and all - packages starting with **mingw64-i686** and **mingw64-x86_64**. Ensure - **mingw64-i686-zlib** and **mingw64-x86_64-zlib** are installed if you wish + packages starting with **mingw64-x86_64**. Ensure + **mingw64-x86_64-zlib** are installed if you wish to enable fio's log compression functionality. 2. Open the Cygwin Terminal. 3. Go to the fio directory (source files). 4. Run ``make clean && make -j``. -To build fio on 32-bit Windows, run ``./configure --build-32bit-win`` before -``make``. +To build fio for 32-bit Windows, ensure the -i686 versions of the previously +mentioned -x86_64 packages are installed and run ``./configure +--build-32bit-win`` before ``make``. To build an fio that supports versions of +Windows below Windows 7/Windows Server 2008 R2 also add ``--target-win-ver=xp`` +to the end of the configure line that you run before doing ``make``. It's recommended that once built or installed, fio be run in a Command Prompt or other 'native' console such as console2, since there are known to be display and
appveyor.yml +2 -2
@@ -10,10 +10,10 @@ environment: CONFIGURE_OPTIONS: - platform: x86 PACKAGE_ARCH: i686 - CONFIGURE_OPTIONS: --build-32bit-win + CONFIGURE_OPTIONS: --build-32bit-win --target-win-ver=xp install: - - '%CYG_ROOT%\setup-x86_64.exe --quiet-mode --no-shortcuts --only-site --site "%CYG_MIRROR%" --packages "mingw64-%PACKAGE_ARCH%-zlib" > NULL' + - '%CYG_ROOT%\setup-x86_64.exe --quiet-mode --no-shortcuts --only-site --site "%CYG_MIRROR%" --packages "mingw64-%PACKAGE_ARCH%-zlib" > NUL' - SET PATH=%CYG_ROOT%\bin;%PATH% #��NB: Changed env variables persist to later sections build_script:
configure +19 -10
@@ -167,6 +167,8 @@ for opt do ;; --build-32bit-win) build_32bit_win="yes" ;; + --target-win-ver=*) target_win_ver="$optarg" + ;; --build-static) build_static="yes" ;; --enable-gfio) gfio_check="yes"
@@ -213,6 +215,7 @@ if test "$show_help" = "yes" ; then echo "--cc= Specify compiler to use" echo "--extra-cflags= Specify extra CFLAGS to pass to compiler" echo "--build-32bit-win Enable 32-bit build on Windows" + echo "--target-win-ver= Minimum version of Windows to target (XP or 7)" echo "--build-static Build a static fio" echo "--esx Configure build options for esx" echo "--enable-gfio Enable building of gtk gfio"
@@ -329,20 +332,27 @@ CYGWIN*) cc="x86_64-w64-mingw32-gcc" fi fi - if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then - output_sym "CONFIG_32BIT" + + target_win_ver=$(echo "$target_win_ver" | tr '[:lower:]' '[:upper:]') + if test -z "$target_win_ver"; then + # Default Windows API target + target_win_ver="7" + fi + if test "$target_win_ver" = "XP"; then + output_sym "CONFIG_WINDOWS_XP" + elif test "$target_win_ver" = "7"; then + output_sym "CONFIG_WINDOWS_7" + CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0601" else - output_sym "CONFIG_64BIT_LLP64" + fatal "Unknown target Windows version" fi + # We need this to be output_sym'd here because this is Windows specific. # The regular configure path never sets this config. output_sym "CONFIG_WINDOWSAIO" # We now take the regular configuration path without having exit 0 here. # Flags below are still necessary mostly for MinGW. socklen_t="yes" - sfaa="yes" - sync_sync="yes" - cmp_swap="yes" rusage_thread="yes" fdatasync="yes" clock_gettime="yes" # clock_monotonic probe has dependency on this
@@ -350,11 +360,7 @@ CYGWIN*) gettimeofday="yes" sched_idle="yes" tcp_nodelay="yes" - tls_thread="yes" - static_assert="yes" ipv6="yes" - mkdir_two="no" - echo "BUILD_CFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak ;; esac
@@ -498,6 +504,9 @@ fi print_config "Operating system" "$targetos" print_config "CPU" "$cpu" print_config "Big endian" "$bigendian" +if test ! -z "$target_win_ver"; then + print_config "Target Windows version" "$target_win_ver" +fi print_config "Compiler" "$cc" print_config "Cross compile" "$cross_compile" echo
fio.1 +32 -15
67 lines not on this page · raw message
os/os-windows-7.h new file +367 -0
367 lines not on this page · raw message
os/os-windows-xp.h new file +70 -0
70 lines not on this page · raw message
os/os-windows.h +7 -78
132 lines not on this page · raw message
os/windows/eula.rtf binary +0 -0
os/windows/posix.c +2 -0
@@ -959,6 +959,7 @@ in_addr_t inet_network(const char *cp)return hbo; } +#ifdef CONFIG_WINDOWS_XP const char *inet_ntop (int af,const void *restrict src,char *restrict dst,socklen_t size) {
@@ -1039,3 +1040,4 @@ int inet_pton(int af, const char *restrict src, void *restrict dst) return ret; } +#endif /* CONFIG_WINDOWS_XP */
os/windows/posix/include/arpa/inet.h +2 -0
@@ -12,8 +12,10 @@ typedef int in_addr_t;in_addr_t inet_network (const char *cp); +#ifdef CONFIG_WINDOWS_XP const char *inet_ntop (int af,const void *restrict src,char *restrict dst,socklen_t size);int inet_pton (int af,const char *restrict src,void *restrict dst); +#endif #endif /* ARPA_INET_H */
os/windows/posix/include/poll.h +9 -0
@@ -1,8 +1,11 @@ #ifndef POLL_H #define POLL_H +#include <winsock2.h> + typedef int nfds_t; +#ifdef CONFIG_WINDOWS_XP struct pollfd { int fd;
@@ -10,6 +13,12 @@ struct pollfdshort revents; }; +#define POLLOUT 1 +#define POLLIN 2 +#define POLLERR 0 +#define POLLHUP 1 +#endif /* CONFIG_WINDOWS_XP */ +int poll (struct pollfd fds[],nfds_t nfds,int timeout);#endif /* POLL_H */
server.c +3 -3
@@ -2144,14 +2144,14 @@ static int fio_init_server_ip(void)#endif if (use_ipv6) { -const void *src = &saddr_in6.sin6_addr; +void *src = &saddr_in6.sin6_addr; addr = (struct sockaddr *) &saddr_in6; socklen =sizeof (saddr_in6); saddr_in6.sin6_family =AF_INET6 ; str =inet_ntop (AF_INET6 , src, buf,sizeof (buf)); }else { -const void *src = &saddr_in.sin_addr; +void *src = &saddr_in.sin_addr; addr = (struct sockaddr *) &saddr_in; socklen =sizeof (saddr_in);
@@ -2219,7 +2219,7 @@ static int fio_init_server_connection(void)if (!bind_sock) {char *p, port[16 ]; -const void *src; +void *src;int af;if (use_ipv6) {