Commit bed50b9
ck: jbd2: add proc entry to control whether doing buffer copy-out
fix #32728070
When jbd2 tries to get write access to one buffer, and if this buffer
is under writeback with BH_Shadow flag, jbd2 will wait until this buffer
has been written to disk, but sometimes the time taken to wait may be
much long, especially disk capacity is almost full.
Here add a proc entry "force-copy", if its value is not zero, jbd2 will
always do meta buffer copy-cout, then we can eliminate the unnecessary
waiting time here, and reduce long tail latency for buffered-write.
I construct such test case below:
$cat offline.fio
; fio-rand-RW.job for fiotest
[global]
name=fio-rand-RW
filename=fio-rand-RW
rw=randrw
rwmixread=60
rwmixwrite=40
bs=4K
direct=0
numjobs=4
time_based=1
runtime=900
[file1]
size=60G
ioengine=sync
iodepth=16
$cat online.fio
; fio-seq-write.job for fiotest
[global]
name=fio-seq-write
filename=fio-seq-write
rw=write
bs=256K
direct=0
numjobs=1
time_based=1
runtime=60
[file1]
rate=50m
size=10G
ioengine=sync
iodepth=16
With this patch:
$cat /proc/fs/jbd2/sda5-8/force_copy
0
online fio almost always get such long tail latency:
Jobs: 1 (f=1), 0B/s-0B/s: [W(1)][100.0%][w=50.0MiB/s][w=200 IOPS][eta
00m:00s]
file1: (groupid=0, jobs=1): err= 0: pid=17855: Thu Nov 15 09:45:57 2018
write: IOPS=200, BW=50.0MiB/s (52.4MB/s)(3000MiB/60001msec)
clat (usec): min=135, max=4086.6k, avg=867.21, stdev=50338.22
lat (usec): min=139, max=4086.6k, avg=871.16, stdev=50338.22
clat percentiles (usec):
| 1.00th=[ 141], 5.00th=[ 143], 10.00th=[ 145],
| 20.00th=[ 147], 30.00th=[ 147], 40.00th=[ 149],
| 50.00th=[ 149], 60.00th=[ 151], 70.00th=[ 153],
| 80.00th=[ 155], 90.00th=[ 159], 95.00th=[ 163],
| 99.00th=[ 255], 99.50th=[ 273], 99.90th=[ 429],
| 99.95th=[ 441], 99.99th=[3640656]
$cat /proc/fs/jbd2/sda5-8/force_copy
1
online fio latency is much better.
Jobs: 1 (f=1), 0B/s-0B/s: [W(1)][100.0%][w=50.0MiB/s][w=200 IOPS][eta
00m:00s]
file1: (groupid=0, jobs=1): err= 0: pid=8084: Thu Nov 15 09:31:15 2018
write: IOPS=200, BW=50.0MiB/s (52.4MB/s)(3000MiB/60001msec)
clat (usec): min=137, max=545, avg=151.35, stdev=16.22
lat (usec): min=140, max=548, avg=155.31, stdev=16.65
clat percentiles (usec):
| 1.00th=[ 143], 5.00th=[ 145], 10.00th=[ 145], 20.00th=[
147],
| 30.00th=[ 147], 40.00th=[ 147], 50.00th=[ 149], 60.00th=[
149],
| 70.00th=[ 151], 80.00th=[ 155], 90.00th=[ 157], 95.00th=[
161],
| 99.00th=[ 239], 99.50th=[ 269], 99.90th=[ 420], 99.95th=[
429],
| 99.99th=[ 537]
As to the cost: because we'll always need to copy meta buffer, will
consume minor cpu time and some memory(at most 32MB for 128MB journal
size).
Signed-off-by: Xiaoguang Wang <[email protected]>
Reviewed-by: Liu Bo <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
Signed-off-by: Hao Xu <[email protected]>
Acked-by: Joseph Qi <[email protected]>
Conflicts:
fs/jbd2/journal.c1 parent bbbbf3a commit bed50b9
2 files changed
+62
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
455 | 455 | | |
456 | 456 | | |
457 | 457 | | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
458 | 461 | | |
459 | 462 | | |
460 | 463 | | |
| |||
1406 | 1409 | | |
1407 | 1410 | | |
1408 | 1411 | | |
| 1412 | + | |
| 1413 | + | |
| 1414 | + | |
| 1415 | + | |
| 1416 | + | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
| 1421 | + | |
| 1422 | + | |
| 1423 | + | |
| 1424 | + | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
| 1428 | + | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
| 1433 | + | |
| 1434 | + | |
| 1435 | + | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
| 1439 | + | |
| 1440 | + | |
| 1441 | + | |
| 1442 | + | |
| 1443 | + | |
| 1444 | + | |
| 1445 | + | |
| 1446 | + | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
| 1453 | + | |
| 1454 | + | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
1409 | 1463 | | |
1410 | 1464 | | |
1411 | 1465 | | |
| |||
1414 | 1468 | | |
1415 | 1469 | | |
1416 | 1470 | | |
| 1471 | + | |
| 1472 | + | |
1417 | 1473 | | |
1418 | 1474 | | |
1419 | 1475 | | |
| |||
1422 | 1478 | | |
1423 | 1479 | | |
1424 | 1480 | | |
| 1481 | + | |
1425 | 1482 | | |
1426 | 1483 | | |
1427 | 1484 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1227 | 1227 | | |
1228 | 1228 | | |
1229 | 1229 | | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
| 1233 | + | |
| 1234 | + | |
1230 | 1235 | | |
1231 | 1236 | | |
1232 | 1237 | | |
| |||
0 commit comments