Compare commits

...

No commits in common. "c8" and "c10s" have entirely different histories.
c8 ... c10s

11 changed files with 1275 additions and 584 deletions

View File

@ -1 +0,0 @@
cad3b3d78c5c2c9a116ee53642eec17a77c5ead2 SOURCES/fio-3.19.tar.bz2

49
.gitignore vendored
View File

@ -1 +1,48 @@
SOURCES/fio-3.19.tar.bz2
/fio-2.*.tar.bz2
/fio-2.0.13.tar.gz
/fio-2.0.15.tar.gz
/fio-2.1.tar.gz
/fio-2.1.2.tar.gz
/fio-2.1.3.tar.gz
/fio-3.0.tar.bz2
/fio-3.1.tar.bz2
/fio-3.2.tar.bz2
/fio-3.3.tar.bz2
/fio-3.4.tar.bz2
/fio-3.6.tar.bz2
/fio-3.7.tar.bz2
/fio-3.8.tar.bz2
/fio-3.12.tar.bz2
/fio-3.13.tar.bz2
/fio-3.14.tar.bz2
/fio-3.15.tar.bz2
/fio-3.16.tar.bz2
/fio-3.17.tar.bz2
/fio-3.18.tar.bz2
/fio-3.19.tar.bz2
/fio-3.20.tar.bz2
/fio-3.21.tar.bz2
/fio-3.23.tar.bz2
/fio-3.24.tar.bz2
/fio-3.25.tar.bz2
/fio-3.26.tar.bz2
/fio-3.27.tar.bz2
/fio-3.27.tar.bz2.asc
/fio-3.28.tar.bz2
/fio-3.28.tar.bz2.asc
/fio-3.29.tar.bz2
/fio-3.29.tar.bz2.asc
/fio-3.30.tar.bz2
/fio-3.30.tar.bz2.asc
/fio-3.31.tar.bz2
/fio-3.31.tar.bz2.asc
/fio-3.32.tar.bz2
/fio-3.32.tar.bz2.asc
/fio-3.33.tar.bz2
/fio-3.33.tar.bz2.asc
/fio-3.34.tar.bz2
/fio-3.34.tar.bz2.asc
/fio-3.35.tar.bz2
/fio-3.35.tar.bz2.asc
/fio-3.36.tar.bz2
/fio-3.36.tar.bz2.asc

860
F7D358FB2971E0A6.asc Normal file
View File

@ -0,0 +1,860 @@
pub rsa4096 2011-10-17 [SC]
C0FC392DCADE26D975FA5E4AF7D358FB2971E0A6
uid Jens Axboe <axboe@kernel.dk>
uid [jpeg image of size 5172]
sub rsa4096 2011-10-17 [E]
2C5DCF0DAFBC972930D1DE5F28C8BEF174494BD8
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
mA36L4ShYnujbVLmjyarBGRBCqrhRbAT1orY88yOirrVADov9l1fFsXa9++aVuBZ
BCBaCW2PB4nj0PaZVEOFUR/rUi1n/nNQ658Giw7uo/yYS4r7MKTr65vw4GnQtk1J
mJYHH1K3T0QMAZCQpGEclSsE8QzqBhwM+MmaNZb6yPdIGw9JlH7iUJHPobQNagTu
PydBgZlOKgaG5qPK2m6mwbc2XL8Jwiq56yLhstg0SgIXyM9NYaUPS085pykQWKOg
plkkfMr+dehSt9gnFSyQ3LUVltzWHTxgG/KcojtpjOjf1Fe/FnQeblooMRim72sd
aw+JAhwEEAEIAAYFAk6oZLkACgkQ4PNz83v5CZo54w/+MCK3zx4B3beGRoYqDXYZ
YDvfJB7hCkUHRMHST6Y10L3oh5HxE5bzUInu0h8C/E6LQj4RMqKz+UGqRgCE8rSC
/LtfVgaCRq/SqjC07mbx60M1BWfS+ww33MPeAPtiG5HHDNq7fLZs/mdCVlT6YU9W
XHDWr2EMAm3BKF5U9WAhQb1d01ueNd/an0JYIp7OZfcI4k5o8kh+x9H7vY6S6cLb
Ses7lpt6HBQoeziKnRRghkHH6AISLOFpyr3DkIULKTBoBID872pTHc7LCCpdyROV
F+Mx2yd7bZV/BBvL2MgkLEkWBQesqo7xs6UV0yjEn6HOblC6oDXnSxgkR7cuW0Zw
ehU2+nRBI96YX52vBKwg7/V5X+qQz2BeLT+mio7KhMKRxA94h8kUgD2i6SBVAVmZ
XLLiwKD5TbiaztcNXQPSFBadCx1phZbpaDNu2WLQN62y+PsNSBoz6CNs/lD3nV5r
LtinNOaAf5LXZkZHMIOxPQx0TvNL/abGXJ+0XTudtVgkqgi0MyNYJbGTbBckRjmT
jjnDI7WUxrZoyMWNBYR1FK4JuugHEg3mhTxmxzft+e6/6kbkx50Ni/ujB4Oz/KCm
xCYFAw+OnivvXGQqcJ9U1YJZA4WBzRpXGMezmbkOodNCggu1Z0ql2myz1LBZY7O/
4crH5y/P7vIpRaWfgOBDKnaJAhwEEwECAAYFAk6ml/0ACgkQwaRgcltRy8/Mog/6
AkoDNOsu0NEMnPymTrd3u85D2SyUrOGYYBtwh/Uv7O7ZiNVw5VyYKFx+ffZhDG44
wtkx9+gUG58O6VA39P8cKWxMM43I7jhi4aAmDaXy/ic3WTOiR9c4oTzeVBtV3zgT
VI4Hd5iEiNqSwYClODGzAOfh7oVEwFZ5kmX5n0KW08E+vuQ+vBcwt5nNyb+mIn4e
k4UavKP3Rs0KqNDLqssKkDWW/I8T0cnr3ooHJxoRG7LrmfZEZxAD/2sSMH3v1lxV
Aq2Xq3mM3KfM1p95qRJ+PgHDoosBfDArDenhAg1WM6ewuJyMiXSDuXiaCPiPS4y4
4lvEy5zZmvtqXdoI4dAH34qOvXrWHx8Pk/hhYKIzD5D712PyKQbpoifKH9TfQbd3
QStbR2GO97QLJ1BhOQ1pwqjTUOouf+jZPNpgDRMjVB5DSiQh7co6bNBrwqn3DgeU
Jp3QdGkxhQ4iBFWJELnyIWhv8ftq5zSAhEMeBqhdSDbOZuhFKM0UeJ8TZJqTmGc9
lvz7tUjhbAEMzrrsimnrhZ2NzKszvtxNlQHpC4xUwkIeD/d9HKoJgzRDTqPg8bg0
n2hqPtWhNDL7Qgq6CToKXgdoNQlD+tNOY0jdSoHi6SRbEtftXKDObz2/Jx2LVQMU
3InKnwQiLqMd28F/F8X/H9P5+G39nTYHnmGyg9IZT3mJAjoEEwEIACQCGwMCHgEC
F4AFCwkIBwMFFQoJCAsFFgIDAQAFAk6by5sCGQEACgkQ99NY+ylx4KaVYRAAwuCH
OG7iwOSMfQ4LYiuxlzcdf7Y/tkyJAX6R8t6a5eT9sDOZBmpPnoL40emJLsHqqRTU
HqzS/GRdaqbQb6pvgVNXrC5CZ/+w5pgqksY34twgbNSnUahwh8sI8Ee41qEJRc4o
CFC8Q4GhlJOhLXyntHqUm+ejz7073xBRNfRYZJVPROCaSfo6p3zT69JCzqJxVcvC
6TmARF91Io23pCxLvQVbW6dm4zblrLAorELZnzo5JgXcG35L7uI0lekeSo7KHH4f
CCMX+m776ms6aBwG4S6ZzI/jHd7rGzB382t2lHEXRFkcws5uSaTnpKToN970YD/W
pfDqESouJaqIDLAfk3ouOxwuSIBKybB50oY4WXOtGnItMYod9rsTIbm1Kc0S7Iyv
VRuTSfZBgKetAOlK59r6FKTMLiBS6rzmky2IVQknBfoRXX8HfeAxENsRPvatuuQp
OfwmpES9n0gEOKfwe4I8FVU8CmeDqix4ZXcWWZSRayo//HneMYFBgrK06nMDM/xL
e/JfV8nGIRF9hkW57Ka+2XlqWyOLGZg0nRjr1fP9exPzXnxlXts47gXINcBSVDus
MWVbxSMY0MMkgXKwnEyoW/SSWNAwfV3q0rX02dcJX25QH/0rv7anjX5L4nOr8D88
jjlkZYYhORNuOn4RxqzRx3Qh5FoMtKIxQN7N4j/R04fThQEQAAEBAAAAAAAAAAAA
AAAA/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL
DBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBD
AQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjL/wAARCACWAHADASIAAhEBAxEB/8QAHwAAAQUBAQEB
AQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR
BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW
l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo
6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz
UvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
Z2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6
wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEA
PwDktbunu5mmkYlnOTXPSHmte/OF5NYzmtJsqAzNQsMmpqibqaxNCBfkcr2bpU0I
ycUyRNw9+1SokkSxyujKrnAJGM/SkzajKzsy9FHxVyGLkcUWyBkBFaVpYz3DhYIX
kY9lXNc8mezThZXPd/hnNDJ4KtY4iN0TMsgHrnP8iK7CvB/D2q3XhGdpJdStrcN/
rLZj5rN6ZVen1yK19W+MM8kLRabYqhIwZZj/ACUH+tVGdo2Z5VfBTnVbhqmZHxGk
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
Sg5mvNyIumY=
=uQ7E
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,187 +0,0 @@
From e1bcd541f63f9029f6c50116831303ad06292edc Mon Sep 17 00:00:00 2001
From: Song Liu <songliubraving@fb.com>
Date: Sun, 17 May 2020 22:39:49 -0700
Subject: [PATCH] Add option latency_run to continue enable latency_target
Currently, latency_target run will exist once fio find the highest queue
depth that meets latency_target. Add option latency_run. If set, fio will
continue running and try to meet latency_target by adusting queue depth.
Signed-off-by: Song Liu <songliubraving@fb.com>
---
HOWTO | 7 +++++++
cconv.c | 2 ++
fio.1 | 5 +++++
fio.h | 1 +
io_u.c | 18 +++++++++++++++++-
options.c | 10 ++++++++++
server.h | 2 +-
thread_options.h | 2 ++
8 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/HOWTO b/HOWTO
index 430c7b62..f0b4ffe4 100644
--- a/HOWTO
+++ b/HOWTO
@@ -2551,6 +2551,13 @@ I/O latency
defaults to 100.0, meaning that all I/Os must be equal or below to the value
set by :option:`latency_target`.
+.. option:: latency_run=bool
+
+ Used with :option:`latency_target`. If false (default), fio will find
+ the highest queue depth that meets :option:`latency_target` and exit. If
+ true, fio will continue running and try to meet :option:`latency_target`
+ by adjusting queue depth.
+
.. option:: max_latency=time
If set, fio will exit the job with an ETIMEDOUT error if it exceeds this
diff --git a/cconv.c b/cconv.c
index 48218dc4..449bcf7b 100644
--- a/cconv.c
+++ b/cconv.c
@@ -288,6 +288,7 @@ void convert_thread_options_to_cpu(struct thread_options *o,
o->latency_window = le64_to_cpu(top->latency_window);
o->max_latency = le64_to_cpu(top->max_latency);
o->latency_percentile.u.f = fio_uint64_to_double(le64_to_cpu(top->latency_percentile.u.i));
+ o->latency_run = le32_to_cpu(top->latency_run);
o->compress_percentage = le32_to_cpu(top->compress_percentage);
o->compress_chunk = le32_to_cpu(top->compress_chunk);
o->dedupe_percentage = le32_to_cpu(top->dedupe_percentage);
@@ -487,6 +488,7 @@ void convert_thread_options_to_net(struct thread_options_pack *top,
top->latency_window = __cpu_to_le64(o->latency_window);
top->max_latency = __cpu_to_le64(o->max_latency);
top->latency_percentile.u.i = __cpu_to_le64(fio_double_to_uint64(o->latency_percentile.u.f));
+ top->latency_run = __cpu_to_le32(o->latency_run);
top->compress_percentage = cpu_to_le32(o->compress_percentage);
top->compress_chunk = cpu_to_le32(o->compress_chunk);
top->dedupe_percentage = cpu_to_le32(o->dedupe_percentage);
diff --git a/fio.1 b/fio.1
index a2379f98..3a7a359b 100644
--- a/fio.1
+++ b/fio.1
@@ -2275,6 +2275,11 @@ The percentage of I/Os that must fall within the criteria specified by
defaults to 100.0, meaning that all I/Os must be equal or below to the value
set by \fBlatency_target\fR.
.TP
+.BI latency_run \fR=\fPbool
+Used with \fBlatency_target\fR. If false (default), fio will find the highest
+queue depth that meets \fBlatency_target\fR and exit. If true, fio will continue
+running and try to meet \fBlatency_target\fR by adjusting queue depth.
+.TP
.BI max_latency \fR=\fPtime
If set, fio will exit the job with an ETIMEDOUT error if it exceeds this
maximum latency. When the unit is omitted, the value is interpreted in
diff --git a/fio.h b/fio.h
index bbf057c1..7610026d 100644
--- a/fio.h
+++ b/fio.h
@@ -377,6 +377,7 @@ struct thread_data {
unsigned int latency_qd_high;
unsigned int latency_qd_low;
unsigned int latency_failed;
+ unsigned int latency_stable_count;
uint64_t latency_ios;
int latency_end_run;
diff --git a/io_u.c b/io_u.c
index aa8808b8..ae1438fd 100644
--- a/io_u.c
+++ b/io_u.c
@@ -1391,6 +1391,7 @@ static bool __lat_target_failed(struct thread_data *td)
td->latency_qd_low--;
td->latency_qd = (td->latency_qd + td->latency_qd_low) / 2;
+ td->latency_stable_count = 0;
dprint(FD_RATE, "Ramped down: %d %d %d\n", td->latency_qd_low, td->latency_qd, td->latency_qd_high);
@@ -1440,6 +1441,21 @@ static void lat_target_success(struct thread_data *td)
td->latency_qd_low = td->latency_qd;
+ if (td->latency_qd + 1 == td->latency_qd_high) {
+ /*
+ * latency_qd will not incease on lat_target_success(), so
+ * called stable. If we stick with this queue depth, the
+ * final latency is likely lower than latency_target. Fix
+ * this by increasing latency_qd_high slowly. Use a naive
+ * heuristic here. If we get lat_target_success() 3 times
+ * in a row, increase latency_qd_high by 1.
+ */
+ if (++td->latency_stable_count >= 3) {
+ td->latency_qd_high++;
+ td->latency_stable_count = 0;
+ }
+ }
+
/*
* If we haven't failed yet, we double up to a failing value instead
* of bisecting from highest possible queue depth. If we have set
@@ -1459,7 +1475,7 @@ static void lat_target_success(struct thread_data *td)
* Same as last one, we are done. Let it run a latency cycle, so
* we get only the results from the targeted depth.
*/
- if (td->latency_qd == qd) {
+ if (!o->latency_run && td->latency_qd == qd) {
if (td->latency_end_run) {
dprint(FD_RATE, "We are done\n");
td->done = 1;
diff --git a/options.c b/options.c
index b18cea33..da401aed 100644
--- a/options.c
+++ b/options.c
@@ -3672,6 +3672,16 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_LATPROF,
},
+ {
+ .name = "latency_run",
+ .lname = "Latency Run",
+ .type = FIO_OPT_BOOL,
+ .off1 = offsetof(struct thread_options, latency_run),
+ .help = "Keep adjusting queue depth to match latency_target",
+ .def = "0",
+ .category = FIO_OPT_C_IO,
+ .group = FIO_OPT_G_LATPROF,
+ },
{
.name = "invalidate",
.lname = "Cache invalidate",
diff --git a/server.h b/server.h
index 279b6917..de01a5c8 100644
--- a/server.h
+++ b/server.h
@@ -48,7 +48,7 @@ struct fio_net_cmd_reply {
};
enum {
- FIO_SERVER_VER = 82,
+ FIO_SERVER_VER = 83,
FIO_SERVER_MAX_FRAGMENT_PDU = 1024,
FIO_SERVER_MAX_CMD_MB = 2048,
diff --git a/thread_options.h b/thread_options.h
index c78ed43d..09ccd5b2 100644
--- a/thread_options.h
+++ b/thread_options.h
@@ -324,6 +324,7 @@ struct thread_options {
unsigned long long latency_target;
unsigned long long latency_window;
fio_fp64_t latency_percentile;
+ uint32_t latency_run;
unsigned int sig_figs;
@@ -612,6 +613,7 @@ struct thread_options_pack {
uint64_t latency_window;
uint64_t max_latency;
fio_fp64_t latency_percentile;
+ uint32_t latency_run;
uint32_t sig_figs;
--
2.17.0

View File

@ -1,37 +0,0 @@
From 8644ef7c4c49aa6d6492b3b250a06b841496d7fd Mon Sep 17 00:00:00 2001
From: Bart Van Assche <bvanassche@acm.org>
Date: Sat, 27 Jun 2020 07:26:24 -0700
Subject: [PATCH] Unbreak the pmemblk engine
Reported-by: Yi Zhang <yi.zhang@redhat.com>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
Fixes: e9c7be0e32e6 ("pmemblk: Fix a memory leak")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
engines/pmemblk.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/engines/pmemblk.c b/engines/pmemblk.c
index 730f4d7..e2eaa15 100644
--- a/engines/pmemblk.c
+++ b/engines/pmemblk.c
@@ -220,14 +220,14 @@ static fio_pmemblk_file_t pmb_open(const char *pathspec, int flags)
pmb->pmb_nblocks = pmemblk_nblock(pmb->pmb_pool);
fio_pmemblk_cache_insert(pmb);
+ } else {
+ free(path);
}
pmb->pmb_refcnt += 1;
pthread_mutex_unlock(&CacheLock);
- free(path);
-
return pmb;
error:
--
2.9.5

View File

@ -1,28 +0,0 @@
From 2e3fb343ec883674a4927f2da983759bf90a0671 Mon Sep 17 00:00:00 2001
From: Song Liu <songliubraving@fb.com>
Date: Sun, 17 May 2020 22:46:21 -0700
Subject: [PATCH] init: fix unit of latency_window
latency_window has unit of microseconds, and is compared against
usec_window. Therefore, there is no need to fix it up to nanoseconds.
Signed-off-by: Song Liu <songliubraving@fb.com>
---
init.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/init.c b/init.c
index b5315334..0431f700 100644
--- a/init.c
+++ b/init.c
@@ -956,7 +956,6 @@ static int fixup_options(struct thread_data *td)
*/
o->max_latency *= 1000ULL;
o->latency_target *= 1000ULL;
- o->latency_window *= 1000ULL;
return ret;
}
--
2.17.0

View File

@ -1,56 +0,0 @@
From 3721c7fe276dbbc93e584359f87913e58f96626e Mon Sep 17 00:00:00 2001
From: Sitsofe Wheeler <sitsofe@yahoo.com>
Date: Mon, 6 Dec 2021 20:02:53 +0000
Subject: [PATCH] os: detect PMULL support before enabling accelerated crc32c
on ARM
Issue #1239 shows a crash on a FUJITSU/A64FX ARM platform at the
following line:
crc/crc32c-arm64.c:
64 t1 = (uint64_t)vmull_p64(crc1, k2);
On armv8 PMULL crypto instructions like vmull_p64 are defined as
optional (see
https://github.com/google/crc32c/pull/6#issuecomment-328713398 and
https://github.com/dotnet/runtime/issues/35143#issuecomment-617263508 ).
Avoid the crash by gating use of the hardware accelerated ARM crc32c
path behind runtime detection of PMULL.
Fixes: https://github.com/axboe/fio/issues/1239
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
Signed-off-by: Pavel Reichl <preichl@redhat.com>
---
os/os-linux.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/os/os-linux.h b/os/os-linux.h
index 808f1d02..3001140c 100644
--- a/os/os-linux.h
+++ b/os/os-linux.h
@@ -20,6 +20,9 @@
#ifdef ARCH_HAVE_CRC_CRYPTO
#include <sys/auxv.h>
+#ifndef HWCAP_PMULL
+#define HWCAP_PMULL (1 << 4)
+#endif /* HWCAP_PMULL */
#ifndef HWCAP_CRC32
#define HWCAP_CRC32 (1 << 7)
#endif /* HWCAP_CRC32 */
@@ -405,7 +408,8 @@ static inline bool os_cpu_has(cpu_features feature)
#ifdef ARCH_HAVE_CRC_CRYPTO
case CPU_ARM64_CRC32C:
hwcap = getauxval(AT_HWCAP);
- have_feature = (hwcap & HWCAP_CRC32) != 0;
+ have_feature = (hwcap & (HWCAP_PMULL | HWCAP_CRC32)) ==
+ (HWCAP_PMULL | HWCAP_CRC32);
break;
#endif
default:
--
2.38.1

View File

@ -1,178 +0,0 @@
From fd56c235caa42870e6dc33d661514375ea95ffc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Wild?= <wild.andre.ae@gmail.com>
Date: Fri, 14 Aug 2020 15:52:09 +0200
Subject: [PATCH] thread_options: Use unsigned int type for exit_what and
stonewall
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fixes: 64402a8 ("Expand choices for exitall")
Fixes: https://github.com/axboe/fio/issues/1065
Signed-off-by: André Wild <wild.andre.ae@gmail.com>
---
cconv.c | 8 ++++----
examples/exitwhat.fio | 8 ++++----
fio.1 | 29 +++++++++++++++++++++--------
server.h | 2 +-
thread_options.h | 9 ++++-----
5 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/cconv.c b/cconv.c
index 2469389b..4b0c3490 100644
--- a/cconv.c
+++ b/cconv.c
@@ -237,8 +237,8 @@ void convert_thread_options_to_cpu(struct thread_options *o,
o->loops = le32_to_cpu(top->loops);
o->mem_type = le32_to_cpu(top->mem_type);
o->mem_align = le32_to_cpu(top->mem_align);
- o->exit_what = le16_to_cpu(top->exit_what);
- o->stonewall = le16_to_cpu(top->stonewall);
+ o->exit_what = le32_to_cpu(top->exit_what);
+ o->stonewall = le32_to_cpu(top->stonewall);
o->new_group = le32_to_cpu(top->new_group);
o->numjobs = le32_to_cpu(top->numjobs);
o->cpus_allowed_policy = le32_to_cpu(top->cpus_allowed_policy);
@@ -437,8 +437,8 @@ void convert_thread_options_to_net(struct thread_options_pack *top,
top->loops = cpu_to_le32(o->loops);
top->mem_type = cpu_to_le32(o->mem_type);
top->mem_align = cpu_to_le32(o->mem_align);
- top->exit_what = cpu_to_le16(o->exit_what);
- top->stonewall = cpu_to_le16(o->stonewall);
+ top->exit_what = cpu_to_le32(o->exit_what);
+ top->stonewall = cpu_to_le32(o->stonewall);
top->new_group = cpu_to_le32(o->new_group);
top->numjobs = cpu_to_le32(o->numjobs);
top->cpus_allowed_policy = cpu_to_le32(o->cpus_allowed_policy);
diff --git a/examples/exitwhat.fio b/examples/exitwhat.fio
index a1099f0f..c91d7375 100644
--- a/examples/exitwhat.fio
+++ b/examples/exitwhat.fio
@@ -1,7 +1,7 @@
# We want to run fast1 as long as slow1 is running, but also have a cumulative
# report of fast1 (group_reporting=1/new_group=1). exitall=1 would not cause
# fast1 to stop after slow1 is done. Setting exit_what=stonewall will cause
-# alls jobs up until the next stonewall=1 setting to be stopped, when job slow1
+# alls jobs up until the next stonewall setting to be stopped, when job slow1
# finishes.
# In this example skipping forward to slow2/fast2. slow2 has exit_what=all set,
# which means all jobs will be cancelled when slow2 finishes. In particular,
@@ -15,7 +15,7 @@ group_reporting=1
exitall=1
[slow1]
-rw=r
+rw=read
numjobs=1
ioengine=sync
new_group=1
@@ -32,8 +32,8 @@ iodepth=32
rate=300,300,300
[slow2]
-stonewall=1
-rw=w
+stonewall
+rw=write
numjobs=1
ioengine=sync
new_group=1
diff --git a/fio.1 b/fio.1
index cdd105d7..1c90e4a5 100644
--- a/fio.1
+++ b/fio.1
@@ -2569,7 +2569,8 @@ been exceeded before retrying operations.
Wait for preceding jobs in the job file to exit, before starting this
one. Can be used to insert serialization points in the job file. A stone
wall also implies starting a new reporting group, see
-\fBgroup_reporting\fR.
+\fBgroup_reporting\fR. Optionally you can use `stonewall=0` to disable or
+`stonewall=1` to enable it.
.TP
.BI exitall
By default, fio will continue running all other jobs when one job finishes.
@@ -2577,15 +2578,27 @@ Sometimes this is not the desired action. Setting \fBexitall\fR will instead
make fio terminate all jobs in the same group, as soon as one job of that
group finishes.
.TP
-.BI exit_what
+.BI exit_what \fR=\fPstr
By default, fio will continue running all other jobs when one job finishes.
-Sometimes this is not the desired action. Setting \fBexit_all\fR will instead
+Sometimes this is not the desired action. Setting \fBexitall\fR will instead
make fio terminate all jobs in the same group. The option \fBexit_what\fR
-allows to control which jobs get terminated when \fBexitall\fR is enabled. The
-default is \fBgroup\fR and does not change the behaviour of \fBexitall\fR. The
-setting \fBall\fR terminates all jobs. The setting \fBstonewall\fR terminates
-all currently running jobs across all groups and continues execution with the
-next stonewalled group.
+allows you to control which jobs get terminated when \fBexitall\fR is enabled.
+The default value is \fBgroup\fR.
+The allowed values are:
+.RS
+.RS
+.TP
+.B all
+terminates all jobs.
+.TP
+.B group
+is the default and does not change the behaviour of \fBexitall\fR.
+.TP
+.B stonewall
+terminates all currently running jobs across all groups and continues
+execution with the next stonewalled group.
+.RE
+.RE
.TP
.BI exec_prerun \fR=\fPstr
Before running this job, issue the command specified through
diff --git a/server.h b/server.h
index de01a5c8..efa70e7c 100644
--- a/server.h
+++ b/server.h
@@ -48,7 +48,7 @@ struct fio_net_cmd_reply {
};
enum {
- FIO_SERVER_VER = 83,
+ FIO_SERVER_VER = 84,
FIO_SERVER_MAX_FRAGMENT_PDU = 1024,
FIO_SERVER_MAX_CMD_MB = 2048,
diff --git a/thread_options.h b/thread_options.h
index 3fe48ecc..14f1cbe9 100644
--- a/thread_options.h
+++ b/thread_options.h
@@ -202,8 +202,8 @@ struct thread_options {
unsigned long long max_latency;
- unsigned short exit_what;
- unsigned short stonewall;
+ unsigned int exit_what;
+ unsigned int stonewall;
unsigned int new_group;
unsigned int numjobs;
os_cpu_mask_t cpumask;
@@ -494,8 +494,8 @@ struct thread_options_pack {
uint32_t mem_type;
uint32_t mem_align;
- uint16_t exit_what;
- uint16_t stonewall;
+ uint32_t exit_what;
+ uint32_t stonewall;
uint32_t new_group;
uint32_t numjobs;
/*
@@ -546,7 +546,6 @@ struct thread_options_pack {
uint32_t lat_percentiles;
uint32_t slat_percentiles;
uint32_t percentile_precision;
- uint32_t pad3;
fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];
uint8_t read_iolog_file[FIO_TOP_STR_MAX];
--
2.17.0

View File

@ -1,52 +0,0 @@
From 640150c1b2c3cdbdd8baa5f1f3e7214a5c9a6533 Mon Sep 17 00:00:00 2001
From: Vincent Fu <vincent.fu@wdc.com>
Date: Tue, 31 Mar 2020 07:26:16 -0400
Subject: [PATCH] stat: eliminate extra log samples
b2a432bfbb6d inadvertently added extra log samples.
$ ./fio-canonical/fio --name=test --time_based --runtime=10s --write_lat_log=fio-07-b2a432 --log_avg_msec=1000 --size=1G --rw=rw
test: (g=0): rw=rw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.17-93-gb2a4
Starting 1 process
...
$ cat fio-07-b2a432_clat.1.log
1000, 5851, 0, 0, 0
1000, 2551, 1, 0, 0
1000, 5028, 1, 0, 0
2000, 4175, 0, 0, 0
2000, 3214, 1, 0, 0
2000, 60619, 0, 0, 0
...
There should only be two lines at each timestamp (one for reads, one for
writes), but the first two timestamps have three lines each.
The cause is an inadvertent change in stat.c:add_log_sample() of
__add_stat_to_log to _add_stat_to_log. Reverting to the two-underscore
version resolves this issue.
Fixes: https://github.com/axboe/fio/issues/947
Fixes: b2a432bfbb6d ("Per-command priority: Priority logging and libaio/io_uring cmdprio_percentage")
Signed-off-by: Vincent Fu <vincent.fu@wdc.com>
---
stat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stat.c b/stat.c
index d8c01d14..efa811d2 100644
--- a/stat.c
+++ b/stat.c
@@ -2749,7 +2749,7 @@ static unsigned long add_log_sample(struct thread_data *td,
return diff;
}
- _add_stat_to_log(iolog, elapsed, td->o.log_max != 0, priority_bit);
+ __add_stat_to_log(iolog, ddir, elapsed, td->o.log_max != 0, priority_bit);
iolog->avg_last[ddir] = elapsed - (this_window - iolog->avg_msec);
return iolog->avg_msec;
--
2.17.1

View File

@ -1,33 +1,83 @@
Name: fio
Version: 3.19
Version: 3.36
Release: 4%{?dist}
Summary: Multithreaded IO generation tool
Group: Applications/System
License: GPLv2
License: GPL-2.0-only
URL: http://git.kernel.dk/?p=fio.git;a=summary
Source: http://brick.kernel.dk/snaps/%{name}-%{version}.tar.bz2
Source0: http://brick.kernel.dk/snaps/%{name}-%{version}.tar.bz2
Source1: https://brick.kernel.dk/snaps/%{name}-%{version}.tar.bz2.asc
Source2: https://git.kernel.org/pub/scm/docs/kernel/pgpkeys.git/plain/keys/F7D358FB2971E0A6.asc
Patch0: fio-eliminate-extra-log-samples.patch
Patch1: 0001-Unbreak-the-pmemblk-engine.patch
Patch2: 0001-init-fix-unit-of-latency_window.patch
Patch3: 0001-Add-option-latency_run-to-continue-enable-latency_ta.patch
Patch4: 0001-thread_options-Use-unsigned-int-type-for-exit_what-a.patch
Patch5: 0001-os-detect-PMULL-support-before-enabling-accelerated-.patch
%if 0%{?rhel} && 0%{?rhel} < 10
%bcond_without nbd
%ifarch x86_64 ppc64le
%bcond_without pmem
%endif
%ifnarch %{arm} %{ix86}
%bcond_without rbd
%bcond_without rados
%endif
%else
%bcond nbd 1
%ifarch x86_64 ppc64le
%bcond pmem %{undefined rhel}
%endif
%ifnarch %{arm} %{ix86}
%bcond rbd 1
%bcond rados 1
%endif
%endif
BuildRequires: gcc
BuildRequires: gnupg2
BuildRequires: libaio-devel
BuildRequires: zlib-devel
BuildRequires: python3-devel
%ifarch x86_64
BuildRequires: libpmem-devel
BuildRequires: libpmemblk-devel
BuildRequires: python3-devel
%if %{with nbd}
BuildRequires: libnbd-devel
%endif
BuildRequires: libcurl-devel
BuildRequires: openssl-devel
%if %{with pmem}
BuildRequires: libpmem-devel
%endif
%if %{with rbd}
BuildRequires: librbd1-devel
%endif
%ifnarch %{arm}
BuildRequires: numactl-devel
BuildRequires: librdmacm-devel
%endif
BuildRequires: make
# Don't create automated dependencies for the fio engines.
# https://bugzilla.redhat.com/show_bug.cgi?id=1884954
%global __provides_exclude_from ^%{_libdir}/fio/
# Main fio package has soft dependencies on all the engine
# subpackages, but allows the engines to be uninstalled if not needed
# or if the dependencies are too onerous.
Recommends: %{name}-engine-libaio
Recommends: %{name}-engine-http
%if %{with nbd}
Recommends: %{name}-engine-nbd
%endif
%if %{with pmem}
Recommends: %{name}-engine-dev-dax
Recommends: %{name}-engine-libpmem
%endif
%if %{with rados}
Recommends: %{name}-engine-rados
%endif
%if %{with rbd}
Recommends: %{name}-engine-rbd
%endif
%ifnarch %{arm}
Recommends: %{name}-engine-rdma
%endif
%description
fio is an I/O tool that will spawn a number of threads or processes doing
@ -37,66 +87,337 @@ otherwise parameters given to them overriding that setting is given.
The typical use of fio is to write a job file matching the io load
one wants to simulate.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%package engine-libaio
Summary: Linux libaio engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
pathfix.py -i %{__python3} -pn \
doc/conf.py \
%description engine-libaio
Linux libaio engine for %{name}.
%package engine-http
Summary: HTTP engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-http
HTTP engine for %{name}.
%if %{with nbd}
%package engine-nbd
Summary: Network Block Device engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-nbd
Network Block Device (NBD) engine for %{name}.
%endif
%if %{with pmem}
%package engine-dev-dax
Summary: PMDK dev-dax engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-dev-dax
dev-dax engine for %{name}.
Read and write using device DAX to a persistent memory device
(e.g., /dev/dax0.0) through the PMDK libpmem library.
%endif
%if %{with pmem}
%package engine-libpmem
Summary: PMDK pmemblk engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-libpmem
libpmem engine for %{name}.
Read and write using mmap I/O to a file on a filesystem mounted with DAX
on a persistent memory device through the PMDK libpmem library.
%endif
%if %{with rados}
%package engine-rados
Summary: Rados engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-rados
Rados engine for %{name}.
%endif
%if %{with rbd}
%package engine-rbd
Summary: Rados Block Device engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-rbd
Rados Block Device (RBD) engine for %{name}.
%endif
%ifnarch %{arm}
%package engine-rdma
Summary: RDMA engine for %{name}.
Requires: %{name}%{?_isa} = %{version}-%{release}
%description engine-rdma
RDMA engine for %{name}.
%endif
%prep
%autosetup -p1
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%{__python3} %{_rpmconfigdir}/redhat/pathfix.py -i %{__python3} -pn \
tools/fio_jsonplus_clat2csv \
tools/fiologparser.py \
tools/hist/*.py \
tools/plot/fio2gnuplot \
t/*.py
t/steadystate_tests.py
# Edit /usr/local/lib path in os/os-linux.h to match Fedora conventions.
sed -e 's,/usr/local/lib/,%{_libdir}/,g' -i os/os-linux.h
%build
./configure --disable-optimizations
%if %{with nbd}
./configure --disable-optimizations --enable-libnbd --dynamic-libengines
%else
./configure --disable-optimizations --dynamic-libengines
%endif
EXTFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" make V=1 %{?_smp_mflags}
%install
make install prefix=%{_prefix} mandir=%{_mandir} DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
make install prefix=%{_prefix} mandir=%{_mandir} libdir=%{_libdir}/fio DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
%files
%doc README REPORTING-BUGS COPYING HOWTO examples
%doc README.rst REPORTING-BUGS HOWTO.rst examples
%doc MORAL-LICENSE GFIO-TODO SERVER-TODO STEADYSTATE-TODO
%license COPYING
%dir %{_datadir}/%{name}
%dir %{_libdir}/fio/
%{_bindir}/*
%{_mandir}/man1/*
%{_datadir}/%{name}/*
%if %{with pmem}
%files engine-dev-dax
%{_libdir}/fio/fio-dev-dax.so
%endif
%files engine-http
%{_libdir}/fio/fio-http.so
%files engine-libaio
%{_libdir}/fio/fio-libaio.so
%if %{with pmem}
%files engine-libpmem
%{_libdir}/fio/fio-libpmem.so
%endif
%if %{with nbd}
%files engine-nbd
%{_libdir}/fio/fio-nbd.so
%endif
%if %{with rados}
%files engine-rados
%{_libdir}/fio/fio-rados.so
%endif
%if %{with rbd}
%files engine-rbd
%{_libdir}/fio/fio-rbd.so
%endif
%ifnarch %{arm}
%files engine-rdma
%{_libdir}/fio/fio-rdma.so
%endif
%changelog
* Mon Oct 31 2022 Pavel Reichl <preichl@redhat.com> - 3.19-4
- crc32c_arm64(): fio killed by SIGILL
Fix rhbz#1954143
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 3.36-4
- Bump release for June 2024 mass rebuild
* Thu Aug 20 2020 Eric Sandeen <sandeen@redhat.com> 3.19-3
- Fix regression in stonewall (#1869305)
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.36-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Jul 14 2020 Eric Sandeen <sandeen@redhat.com> 3.19-2
- Fix regression in pmemblk engine (#1846843)
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.36-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Apr 20 2020 Eric Sandeen <sandeen@redhat.com> 3.19-1
- Rebase to new upstream + bugfix
* Fri Oct 20 2023 Pavel Reichl <preichl@redhat.com> - 3.36.1
- Rebase to upstream version 3.36
- Related: rhbz#2245247
* Fri Jun 07 2019 Eric Sandeen <sandeen@redhat.com> 3.7-5
- Rebuild w/ tests in place (#1681954)
* Tue Oct 03 2023 Pavel Reichl <preichl@redhat.com> - 3.35-5
- Convert License tag to SPDX format
* Wed Aug 01 2018 Charalampos Stratakis <cstratak@redhat.com> - 3.7-3
- Fix python shebangs in a more portable way
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.35-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Mon Jun 25 2018 Eric Sandeen <sandeen@redhat.com> 3.7-2
- Re-add python3 shebang patch (#1561477)
* Thu Jul 06 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 3.35-3
- Re-enable rados, rbd on ppc64le
* Mon Jun 12 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 3.35-2
- Drop libpmem support from RHEL 10+ builds
* Wed May 24 2023 Pavel Reichl <preichl@redhat.com> - 3.35-1
- New upstream version (RHBZ#2209407)
* Fri Mar 24 2023 Pavel Reichl <preichl@redhat.com> - 3.34-1
- New upstream version (RHBZ#2178183)
- Drop support for pmeblk https://github.com/axboe/fio/commit/04c1cdc
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.33-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Mon Nov 07 2022 Pavel Reichl <preichl@redhat.com> - 3.33-1
- New upstream version (RHBZ#2140453)
* Thu Sep 08 2022 Davide Cavalca <dcavalca@fedoraproject.org> - 3.32-3
- Make it buildable on RHEL again
* Wed Sep 07 2022 Amit Shah <amitshah@fedoraproject.org> - 3.32-2
- Allow building without nbd, rbd, rados support
* Wed Sep 07 2022 Davide Cavalca <dcavalca@fedoraproject.org> - 3.32-1
- New upstream version (RHBZ#2033897)
* Wed Aug 10 2022 Eric Sandeen <sandeen@redhat.com> - 3.31-1
- New upstream version
- Revert with/without change below, does not pass build
* Wed Jul 27 2022 Amit Shah <amitshah@fedoraproject.og> - 3.30-3
- Allow building without nbd, rbd, rados support
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.30-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Apr 07 2022 Eric Sandeen <sandeen@redhat.com> - 3.30-1
- New upstream version
* Wed Jan 26 2022 Eric Sandeen <sandeen@redhat.com> - 3.29-1
- New upstream version
- Drop librbd for ppc64le as ceph no longer builds for that arch
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.28-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Tue Sep 14 2021 Sahana Prasad <sahana@redhat.com> - 3.28-2
- Rebuilt with OpenSSL 3.0.0
* Thu Sep 09 2021 Eric Sandeen <sandeen@redhat.com> - 3.28-1
- New upstream version
* Mon Aug 23 2021 Eric Sandeen <sandeen@redhat.com> - 3.27-3
- Fix FTBFS for new kernel headers (raw device support is gone)
- Fix crash with --enghelp option
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.27-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Thu Jun 17 2021 Eric Sandeen <sandeen@redhat.com> - 3.27-1
- New upstream version
- Add signature check
* Tue May 18 2021 Eric Sandeen <sandeen@redhat.com> - 3.26-2
- Another fix for dynamic engines (#1956963)
* Fri Mar 12 2021 Eric Sandeen <sandeen@redhat.com> - 3.26-1
- New upstream version
* Mon Feb 08 2021 Eric Sandeen <sandeen@redhat.com> - 3.25-3
- Fix segfault with external IO engines and multiple threads
- Enable dev-dax, pmemblk, libpmem engines for ppc64le
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.25-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Dec 04 2020 Eric Sandeen <sandeen@redhat.com> 3.25-1
- New upstream version
* Thu Nov 12 2020 Eric Sandeen <sandeen@redhat.com> 3.24-1
- New upstream version
- Fix dynamic engine loading (#bz1894616)
* Mon Oct 05 2020 Richard W.M. Jones <rjones@redhat.com> 3.23-5
- Disable automatic provides for fio engines (RHBZ#1884954).
- Apply patch to change SONAME of fio engines (see comment 8 of above bug).
* Thu Oct 01 2020 Richard W.M. Jones <rjones@redhat.com> 3.23-3
- Add soft dependencies from main package to all the subpackages.
* Thu Oct 01 2020 Richard W.M. Jones <rjones@redhat.com> 3.23-2
- Enable dynamically loaded engines support.
- Move license to %%license section.
* Tue Sep 08 2020 Eric Sandeen <sandeen@redhat.com> 3.23-1
- New upstream version
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.21-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 20 2020 Eric Sandeen <sandeen@redhat.com> 3.21-1
- New upstream version
* Wed Jun 03 2020 Eric Sandeen <sandeen@redhat.com> 3.20-1
- New upstream version
* Fri May 15 2020 Martin Bukatovic <mbukatov@redhat.com> 3.19-3
- Enable http engine. (#1836323)
* Thu Apr 16 2020 Eric Sandeen <sandeen@redhat.com> 3.19-2
- Bugfix update: stat: eliminate extra log samples
* Thu Mar 12 2020 Eric Sandeen <sandeen@redhat.com> 3.19-1
- New upstream version
* Thu Feb 13 2020 Eric Sandeen <sandeen@redhat.com> 3.18-1
- New upstream version
- Fix gcc10 build
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.17-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Mon Dec 16 2019 Eric Sandeen <sandeen@redhat.com> 3.17-1
- New upstream version
* Wed Nov 06 2019 Richard W.M. Jones <rjones@redhat.com> 3.16-2
- Enable Network Block Device (libnbd) engine.
* Sat Sep 21 2019 Eric Sandeen <sandeen@redhat.com> 3.16-1
- New upstream version
* Fri Aug 16 2019 Eric Sandeen <sandeen@redhat.com> 3.15-1
- New upstream version
* Thu Aug 08 2019 Eric Sandeen <sandeen@redhat.com> 3.14-3
- Make all scripts explicitly call python3 (#1738819)
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.14-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed May 22 2019 Eric Sandeen <sandeen@redhat.com> 3.14-1
- New upstream version
* Thu Feb 14 2019 Eric Sandeen <sandeen@redhat.com> 3.13-1
- New upstream version
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.12-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Thu Jan 17 2019 Eric Sandeen <sandeen@redhat.com> 3.12-1
- New upstream version
* Wed Aug 22 2018 Eric Sandeen <sandeen@redhat.com> 3.8-1
- New upstream version
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Fri Jun 01 2018 Eric Sandeen <sandeen@redhat.com> 3.7-1
- New upstream version
* Fri Jun 01 2018 Eric Sandeen <sandeen@redhat.com> 3.6-3
- Complete the conversion to python3
* Wed May 16 2018 Eric Sandeen <sandeen@redhat.com> 3.6-2
- Make all python scripts python3 compliant and explicit (#1561477)
- Make all python scripts python3 compliant and explicit
* Wed Apr 18 2018 Eric Sandeen <sandeen@redhat.com> 3.6-1
- New upstream version

2
sources Normal file
View File

@ -0,0 +1,2 @@
SHA512 (fio-3.36.tar.bz2) = 925cab44619991052085216253c9c5637f7319f52d92f4cc946df60ab1a964dbfa0bbb0ecd171d6dc21ae1402375a6cf1e7b8ac94df0c03889f849aeb2da8890
SHA512 (fio-3.36.tar.bz2.asc) = 2f2ad2065d8557ac3d6b67b8158443e087817aec8f5f22975741786b97354db30f963b8aac2927eb98183e6890be8b07415318573bd8557ea33ef1efd10ebe74