The mountinfo parser implemented via `fmt.Sscanf()` is slower than the one using `strings.Split()` and `strconv.Atoi()`. This rewrite helps to speed it up to a factor of 8x, here is a result from `go bench`: > BenchmarkParsingScanf-4 300 22294112 ns/op > BenchmarkParsingSplit-4 3000 2780703 ns/op I tried other approaches, such as using `fmt.Sscanf()` for the first three (integer) fields and `strings.Split()` for the rest, but it slows things down considerably: > BenchmarkParsingMixed-4 1000 8827058 ns/op Note the old code uses `fmt.Sscanf` first, then a linear search for the '-' field, then a split for the last 3 fields. The new code relies on a single split. One other thing is, the new code is more future proof as it skips extra optional fields before the separator (currently there are none). I have also added more comments to aid in future development. Finally, the test data is fixed to not have white space before the first field. Based on a similar change in Moby, https://github.com/moby/moby/pull/36091 [v2: remove no-op break statement to silence staticcheck] Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
4.2 KiB
4.2 KiB