Closed
Description
System information
Type | Version/Name |
---|---|
Distribution Name | Fedora |
Distribution Version | 37 |
Kernel Version | 6.1.11-200.fc37.x86_64 |
Architecture | x86_64 |
OpenZFS Version | 2.1.8 |
Describe the problem you're observing
When I have a log-generating program and want to run grep on its output, it never finishes.
Describe how to reproduce the problem
A reproducer is this log generator in go, which can easily be used to trigger this condition. When I pipe its output into a file and run grep on it while it’s running, grep cannot run until the generator is stopped. I can reproduce this inside a plain Fedora 37 VM with 4 GB of memory, a completely empty pool on an empty virtual disk. Setting zfs_dmu_offset_next_sync=0
eliminates this problem. It was introduced in #12724
Mailing list link: https://zfsonlinux.topicbox.com/groups/zfs-discuss/T696e33a9741edf03/reading-buffered-data-causes-io-storm
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
seq := make([]uint64, 20)
var number int
for {
for i := 0; i < 19; i++ {
seq[i] = seq[i+1]
}
seq[19] = rand.Uint64()
number++
fmt.Printf("{\"level\":\"debug\",\"log\":\"Sequence %v\",\"number\":%d,\"my-time\":\"%v\"}\n", seq, number, time.Now())
time.Sleep(time.Millisecond)
}
}