[Skiboot] [PATCH] external/mambo: support mambo COW mode for PMEM disk
Michael Neuling
mikey at neuling.org
Tue Feb 25 08:14:50 AEDT 2020
On Tue, 2020-02-18 at 14:16 -0600, Aaron Sawdey wrote:
> I've added support in mambo's "memory mmap" command to have a "cow" mode
> which just uses MAP_PRIVATE instead of MAP_SHARED on the file so that writes
> to the memory region are not sent back to the file. This allows multiple
> mambo instances to share the same filesystem image.
>
> This is implemented by having a PMEM_MODES environment variable. If this
> is set, it is expected to contain a comma separated list of modes (rw or cow)
> for the list of files in PMEM_DISK. If there are fewer modes than files, the
> remaining files default to "rw".
I'm not a big fan of the COW name. It suggests the writes are going somewhere. I
realise this is the name used in mambo, but I'm not super keen on it. "PRIVATE"
might be a better name.
Can we call this (singular) PMEM_MODE since we have PMEM_DISK?
Can you also include an example ie
export PMEM_DISK="mydisk1, mydisk2"
export PMEM_MODE="rw, cow"
Other than that, the code looks good.
Mikey
>
> Thanks,
> Aaron
>
>
> Signed-off-by: Aaron Sawdey <acsawdey at linux.ibm.com>
> diff --git a/external/mambo/skiboot.tcl b/external/mambo/skiboot.tcl
> index 8d1cfc66..07c38ab2 100644
> --- a/external/mambo/skiboot.tcl
> +++ b/external/mambo/skiboot.tcl
> @@ -300,20 +300,31 @@ set pmem_sizes ""
> if { [info exists env(PMEM_VOLATILE)] } {
> set pmem_sizes [split $env(PMEM_VOLATILE) ","]
> }
> +set pmem_modes ""
> +if { [info exists env(PMEM_MODES)] } {
> + set pmem_modes [split $env(PMEM_MODES) ","]
> +}
> set pmem_root [mysim of addchild $root_node "pmem" ""]
> mysim of addprop $pmem_root int "#address-cells" 2
> mysim of addprop $pmem_root int "#size-cells" 2
> mysim of addprop $pmem_root empty "ranges" ""
> # Start above where XICS normally is at 0x1A0000000000
> set pmem_start [expr 0x20000000000]
> +set pmem_file_ix 0
> foreach pmem_file $pmem_files { # PMEM_DISK
> set pmem_file [string trim $pmem_file]
> set pmem_size [file size $pmem_file]
> - if {[catch {mysim memory mmap $pmem_start $pmem_size $pmem_file rw}]} {
> + if { [expr [llength $pmem_modes] > $pmem_file_ix] } {
> + set pmem_mode [lindex $pmem_modes $pmem_file_ix]
> + } else {
> + set pmem_mode "rw"
> + }
> + if {[catch {mysim memory mmap $pmem_start $pmem_size $pmem_file
> $pmem_mode}]} {
> puts "ERROR: pmem: 'mysim mmap' command needs newer mambo"
> exit
> }
> set pmem_start [pmem_node_add $pmem_root $pmem_start $pmem_size]
> + set pmem_file_ix [expr $pmem_file_ix + 1]
> }
> foreach pmem_size $pmem_sizes { # PMEM_VOLATILE
> set pmem_start [pmem_node_add $pmem_root $pmem_start $pmem_size]
>
More information about the Skiboot
mailing list