[Libguestfs] libnbd flamegraph Odd benchmark results

Richard W.M. Jones rjones at redhat.com
Sun May 30 17:12:21 UTC 2021


On Sun, May 30, 2021 at 09:27:18PM +0530, Abhay Raj Singh wrote:
> 
> 
>     The question (for you!) is how we can choose better settings, and
>     whether we should choose
> 
>  
>  In my opinion configuration resolution will be best if resolved in the
> following order of increasing priority/weightage.
> 1. Auto-detect depending on the system parameters.
> Auto-detection of best params is a must IMO as there's
> enough diversity in server hardware that one size won't fit
> all can be implemented without much effort(excluding benchmarking).

What are the inputs to this formula?  I think the only ones we can
portably get are: number of cores, total memory.  Free memory
possibly, although it's a slippery concept (is that "free" before or
after the page cache is freed?)  Other inputs that could make a
difference, such as number of NUMA nodes, size of L2/L3 cache, core
clock rate, ... are difficult to get reliably and portably.

Still, if the formula is clear and understandable to users it could be
fine.

> 2. Configuration file: A yaml, toml, or any other simple format
> - Load a different config file with *nbdcopy --file=custom-config.yaml*
> - Maybe generate the default config file having values from the auto-detect
> phase.
> nbdcopy --generate-config
> 
> ~/.config/nbdcopy/config.yaml (used to get values)
> ~/.config/nbdcopy/example.yaml (generated for reference from auto)

I think this part is a horrible idea for several reasons:

- Adds hidden state: As an end user you need to know the configuration
  file exists.  And if end users have problems we need them to send us
  the configuration file, and my experience with virt-v2v tells me
  that follow-up questions about bugs are rarely answered.

- Scripts will behave differently depending on where they are running.

- Any script or program consuming nbdcopy must disable the config file
  processing.  It will be completely unwanted for them to depend on
  the random contents of a config file that could greatly affect (or
  even break) the program.

- Adds much complexity to the implementation of the tool.

- Yaml etc are awful formats for configuration files in general.

Rich.

> 3. CLI params
> A quick way to override configuration file params
> ex: functionally same
> `nbdcopy --requests=4 --config=custom-config.yaml`
> `nbdcopy --config=custom-config.yaml --requests=4`
> 
> The flow of initialization:
> Read config file ----override ---> CLI params --- missing params -->
> auto-detect fill
> or
> easier implementation:
> auto-detect fill --- override ---> config file --- override ---> CLI params
> 
> 
> The rationale for choosing configuration file method:
> - Easier to use avoiding long commands (less typing, scripts easier to read)
> - Easy switch between multiple configurations and override them.
> - Documentation and configuration in the same place
> So easier for someone else to understand why certain parameters were chosen.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org




More information about the Libguestfs mailing list