1

我在 linux 上使用 FIO 工具来运行一些 IO。我有兴趣查看作为 FIO 命令的一部分生成的数据内容。

我的命令:

sudo fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=write --bs=4k --direct=0 --size=512M --numjobs=1 --runtime=240 --group_reporting --filename=venkata --buffer_compress_percentage=50 --output=fioad

我有兴趣了解如何使用 50% 压缩缓冲区选项生成数据。有没有办法查看/输出 FIO IO 输入数据?

4

1 回答 1

0

有没有办法查看/输出 FIO IO 输入数据?

venkata只需使用类似的工具检查 I/O 在 () 上执行的文件hexdump?我要注意的一件事是,因为您的 I/O 文件有 512 兆字节大,您几乎肯定会想要使用-nhexdump 的标志或将输出传输到 less 以防止终端溢出...这是一个安全的简化示例作业使分析更快/更容易:

$ fio --name=bufcontents --filename=/tmp/fio.tmp --size=4k --bs=4k --buffer_compress_percentage=50
bufcontents: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
[...]
Run status group 0 (all jobs):
   READ: bw=4000KiB/s (4096kB/s), 4000KiB/s-4000KiB/s (4096kB/s-4096kB/s), io=4096B (4096B), run=1-1msec
$ hexdump -C /tmp/fio.tmp
00000000  35 e0 28 cc 38 a0 99 16  06 9c 6a a9 f2 cd e9 0a  |5.(.8.....j.....|
00000010  80 53 2a 07 09 e5 0d 15  70 4a 25 f7 0b 39 9d 18  |.S*.....pJ%..9..|
00000020  4e a9 ac d9 8e ab 9d 13  29 95 8e 86 9b 48 4e 12  |N.......)....HN.|
00000030  a5 52 3d 26 cc 05 db 1b  54 2a 75 db 9a 4d d8 1d  |.R=&....T*u..M..|
00000040  4a a5 44 c6 f8 9b 39 00  a9 94 23 c6 5c d0 90 0c  |J.D...9...#.\...|
00000050  95 f2 6f ce f9 b6 c2 13  52 7e 83 40 a7 6f ce 07  |..o.....R~.@.o..|
00000060  ca 6f e7 28 b3 2d e4 10  f9 ed 37 ad 42 f1 48 0f  |.o.(.-....7.B.H.|
00000070  bf 7d aa 5e 8c c7 d6 00  b7 cf f5 4c 9c a9 cd 08  |.}.^.......L....|
00000080  f6 39 c3 a1 b8 8e 8c 18  3e 67 3d 77 f5 40 ef 0b  |.9......>g=w.@..|
00000090  e7 ac 48 fb 7f 2c 35 1c  9c 95 f5 a8 eb a7 d7 19  |..H..,5.........|
000000a0  b3 b2 50 aa 82 20 89 0f  56 96 f0 fb e7 ce d4 03  |..P.. ..V.......|
000000b0  ca 12 53 b4 e4 9b e0 17  59 62 25 0d 53 b9 0f 0e  |..S.....Yb%.S...|
000000c0  4b 2c 78 b0 97 70 47 13  89 85 e9 df d6 15 6a 09  |K,x..pG.......j.|
000000d0  b1 b0 38 19 c6 d2 c0 0e  16 96 ce 6a bc 0d 0c 15  |..8........j....|
000000e0  c2 d2 4e 42 50 4c dd 08  58 da e8 9e 62 88 c1 15  |..NBPL..X...b...|
000000f0  4b 1b b1 e6 97 e1 ee 00  69 a3 30 6f da e8 9e 17  |K.......i.0o....|
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  a8 71 09 48 d3 ad 5f c5  35 2e 2d b0 b5 51 5a 13  |.q.H.._.5.-..QZ.|
[...]

(十六进制的 100 是十进制的 256,十六进制的 200 是十进制的 512 等)

或者,由于您在 Stack Overflow 上提出了这个问题(用于编程问题),fio 是开源的,并且fio 源代码在 GitHub 上可用,我们可以在那里阅读源代码(请注意,您没有说您是哪个版本的 fio使用所以我将假设最新的写作瓷砖是 fio-3.21):

  • https://github.com/axboe/fio/blob/fio-3.21/io_u.c#L2166(in):当非零时,fio将尝试重复调用fill_io_buffer(),直到它创建了一个块大小的缓冲区数据. 在示例作业中,您将块大小设置为 4k(因此最小和最大块大小均为 4k)并将为 512(其默认值)。因此将被调用 8 次,每次调用和参数为 512。io_u.ccompress_percentagefill_random_buf_percentage()compress_chunkfill_random_buf_percentage()segmentlen
  • https://github.com/axboe/fio/blob/fio-3.21/lib/rand.c#L137(in) :这计算__fill_random_buf_percentage()rand.c它正在填充的需要随机数据的段的百分比,其余的是设置为零(默认)或buffer_pattern(如果设置)。在您的示例中,前 256 个字节将是随机数据,接下来的 256 个字节将为零。
于 2020-08-09T07:03:17.170 回答