IPMCTL-CREATE-GOAL(1)

NAME ๐Ÿ’–

ipmctl-create-goal โ€” creates a memory allocation goal on one or more PMem modules. bestie, this is the whole vibe of the page โœจ

SYNOPSIS โœจ

ipmctl create [OPTIONS] -goal [TARGETS] [PROPERTIES]

DESCRIPTION ๐Ÿฆ‹

Okay so this command creates a memory allocation goal on one or more PMem modules, and the BIOS reads it on the next reboot so it can map the PMem module capacity into the system address space. Then you can use the persistent memory by creating a namespace. periodt ๐Ÿ’…

Note The capacity values this command presents are a target goal or request to platform firmware. The actual capacity values are subject to change due to rounding and alignment requirements. If the goal request is invalid or not possible, it may be rejected by platform firmware. ngl, firmware said โ€œweโ€™ll seeโ€ ๐Ÿ™ˆ
Note Deleting the PCD can be used as a way to prepare individual PMem modules for provisioning. See the delete -pcd command. ๐Ÿงš
Warning This command may result in data loss. Data should be backed up to other storage before executing this command. bestie, back it up, fr fr ๐Ÿ˜ญ
Note Changing a memory allocation goal modifies how the platform firmware maps persistent memory in the System Physical Address space (SPA), which may result in data loss or inaccessible data, but does not explicitly delete or modify user data found in persistent memory. ๐Ÿ’€

OPTIONS ๐Ÿ’…

  • -f, -force โ€” Reconfiguring PMem modules is a destructive operation which requires confirmation from the user. This option suppresses the confirmation. This option can also be used to recover/override corrupted Platform Configuration Data (PCD). The force flag will also suppress the security enabled warning as well as all other warning prompts. ๐Ÿ”ฅ
  • -h, -help โ€” Displays help for the command. โœจ
  • -ddrt โ€” Used to specify DDRT as the desired transport protocol for the current invocation of ipmctl. ๐Ÿฆ‹
  • -smbus โ€” Used to specify SMBUS as the desired transport protocol for the current invocation of ipmctl. ๐Ÿฆ‹
Note The -ddrt and -smbus options are mutually exclusive and may not be used together. ๐Ÿšซ
  • -o (text|nvmxml), -output (text|nvmxml) โ€” Changes the output format. One of: "text" (default) or "nvmxml". The "nvmxml" format implies the "-force" flag. ๐Ÿ’…
  • -u (B|MB|MiB|GB|GiB|TB| TiB), -units (B|MB|MiB|GB|GiB|TB| TiB) โ€” Changes the units that capacities are displayed in for this command. One of: bytes (B), megabytes (MB), mebibytes (MiB), gigabytes (GB), gibibytes (GiB), terabytes (TB) or tebibytes (TiB). ๐Ÿ“

TARGETS ๐ŸŽฏ

  • -dimm [DimmIDs] โ€” Creates a memory allocation goal on specific PMem modules by optionally supplying one or more comma separated PMem module identifiers. This list must meet one of the following criteria:
    1. Target all PMem modules on a given socket.
      • For example, all PMem modules located within a single socket may be specified together using the dimm target. ๐ŸŽฏ
    2. Target all unconfigured PMem modules
      • For example, when PMem modules have had their PCD deleted, then these PMem modules may all be specified together using the dimm target. ๐Ÿงน
    3. Target PMem modules for 100% MemoryMode with all unspecified PMem modules configured for MemoryMode only
      • For example, when existing PMem modules are 100% MM, then any newly added PMem modules may all be specified together using the dimm target and configured as 100% MM to match the existing configuration. ๐Ÿ’ฏ
    4. Target PMem modules for App Direct Not Interleaved with all unspecified PMem modules configured for App Direct Not Interleaved only
      • For example, when existing PMem modules are 100% App Direct Not Interleaved, then any newly added PMem modules may all be specified together using the dimm target and configured as 100% App Direct Not Interleaved to match the existing configuration. ๐ŸŒˆ
Note If the dimm target is not specified, the default is to configure all manageable PMem modules on all sockets. ๐Ÿ‘‘
  • -socket [SocketIDs] โ€” Loads the memory allocation goal onto all manageable PMem modules on specific sockets by supplying the socket target and one or more comma separated socket identifiers. The default is to load the memory allocation goal onto all manageable PMem modules on all sockets. ๐Ÿ”Œ

PROPERTIES โœจ

  • MemoryMode โ€” Percentage of the total capacity to use in Memory Mode (0-100). Default = 0. ๐Ÿง 
  • PersistentMemoryType โ€” If MemoryMode is not 100%, the type of persistent memory to create. โœจ
    • "AppDirect": (Default) Create App Direct capacity utilizing hardware interleaving across the requested PMem modules if applicable given the specified target. ๐Ÿ’ซ
    • "AppDirectNotInterleaved": Create App Direct capacity that is not interleaved any other PMem modules. ๐Ÿšซ๐Ÿ”—
  • NamespaceLabelVersion โ€” The version of the namespace label storage area (LSA) index block. ๐Ÿท๏ธ
    • "1.2": (Default) Defined in UEFI 2.7a - sections 13.19. ๐Ÿ“œ
    • "1.1": Legacy 1.1 namespace label support. ๐Ÿ•ฐ๏ธ
  • Reserved โ€” Reserve a percentage (0-100) of the requested PMem module App Direct capacity that will not be mapped into the system physical address space and will be presented as Reserved Capacity with [Show Dimm] and [Show Memory Resources] commands. ๐Ÿ”’

EXAMPLES ๐Ÿ’–

  1. Configures all the PMem module capacity in Memory Mode. ๐Ÿง 
ipmctl create -goal MemoryMode=100
  1. Configures all the PMem module capacity as App Direct. ๐Ÿ’ซ
ipmctl create -goal PersistentMemoryType=AppDirect
  1. Configures the capacity on each PMem module with 20% of the capacity in Memory Mode and the remaining as App Direct capacity that does not use hardware interleaving. ๐Ÿฆ‹
ipmctl create -goal MemoryMode=20 PersistentMemoryType=AppDirectNotInterleaved
  1. Configures the PMem module capacity across the entire system with 25% of the capacity in Memory Mode, 25% reserved and the remaining 50% as App Direct. Configures the PMem module capacity across the entire system with 25% of the capacity in Memory Mode and the remaining 75% as App Direct. ๐Ÿ’…
ipmctl create -goal MemoryMode=25 PersistentMemoryType=AppDirect Reserved=25

LIMITATIONS ๐Ÿšจ

In order to successfully execute this command:

  • The caller must have the appropriate privileges. ๐Ÿ”‘
  • The specified PMem modules must be manageable by the host software and must all have the same SKU. ๐Ÿท๏ธ
  • SKU based maximum total mapped memory is enforced. See section [CPU Maximum Mapped Memory Limiting]. ๐Ÿ“‰
  • If no PMem modules are specified, all PMem modules in a non-functional or unmanageable state will not be included in the goalโ€™s creation. ๐Ÿšซ
  • If the goal request is for an interleaved set, PMem modules in population violation will not be included in the goalโ€™s creation. ๐Ÿ’ฅ
  • Existing memory allocation goals that have not been applied and any namespaces associated with the requested PMem modules must be deleted before running this command. ๐Ÿงน
  • Goal requests may not be applied by platform firmware (BIOS) if the PMem module is in security enabled, locked state. ๐Ÿ”’
Note It is recommended to disable security prior to reboot if requesting a new goal. ๐Ÿ’ก
Note A goal request may be initiated even if a target PMem module is in security state enabled, but care must be taken to ensure the PMem module is in either unlocked or disabled security state prior to the platform firmware (BIOS) provisioning flow following a reboot. In addition, a warning will be presented to the user: WARNING: Goal will not be applied unless security is disabled prior to platform firmware (BIOS) provisioning! โš ๏ธ
  • Changing the memory configuration is a destructive operation which results in loss of data stored in the persistent memory region. Therefore, data should be backed up to other storage before executing this command. Targets may be limited to individual PMem modules or sockets, but all PMem modules on affected sockets must be configured when the command finishes. If the selected targets make this impossible, the command will be rejected. Refer to [Show System Capabilities] for a list of BIOS supported modes. ๐Ÿ’€
  • Some requests are dependent on BIOS and/or platform configuration. For details, see the Intelยฎ Optaneโ„ข DC Persistent Memory Software Memory Allocation Rules for Windows, Linux and UEFI, document number 564194. For example: ๐Ÿ“š
    • Provisioning PMem modules for Memory Mode while BIOS is configured for 1LM only will result in unused capacity. ๐Ÿ˜ญ
    • Provisioning PMem modules for Memory Mode while not all iMCs have at least one PMem module will result in unused capacity. ๐Ÿ˜ญ
  • PMem modules in population violation can be targeted for goal creation only if PersistentMemoryType=AppDirectNotInterleaved and no volatile memory is requested (100% ADx1). ๐Ÿšจ

๐ŸŒธ RETURN DATA ๐ŸŒธ

okay bestie so here's the tea on what comes back at you ๐Ÿ’… Sometimes the capacities you asked for get nudged by up to 10% โ€” that's just the platform rules needing stuff to line up all pretty. And sometimes the tool is gonna side-eye your request and ask for extra confirmation, because what you asked for could land you in a non-optimal configuration (aka reduced performance, aka not the vibe ๐Ÿ˜ญ). All of those situations are listed right here:

  • The requested goal may result in a non-optimal configuration due to the population of PMem modules in the system. Memory Mode capacity was requested, but the way the DRAM DIMMs and PMem modules are populated in the system may result in reduced performance โ€” like, the ratio of DRAM and PMem modules isn't balanced, or the DRAM and PMem modules aren't on the same channel, or they're not all the same size. ๐Ÿซ 
  • The requested goal may result in a non-optimal configuration due to the population of PMem modules in the system. App Direct capacity was requested, but the population of PMem modules in the system may result in reduced performance โ€” i.e., the PMem modules aren't the same size, or they're populated asymmetrically across the socket. ๐Ÿ’€
  • The requested goal will result in App Direct capacity which is not supported by the host software. App Direct capacity was requested, but App Direct isn't supported by the currently installed host software. ๐Ÿ™ˆ
  • The requested goal will result in Memory Mode capacity that is unusable with the currently selected platform BIOS volatile mode. Memory Mode capacity was requested, but the platform BIOS is currently set to 1LM Mode. ๐Ÿ˜ฌ
  • The requested goal was adjusted more than 10% to find a valid configuration. So: > 10% adjustment from the requested goal. ๐Ÿ“‰
  • The amount of mapped memory was limited based on the SKU, resulting in un-mapped capacity. Mapped memory was limited based on the CPU SKU. โœจ

So before anything gets changed in your configuration, a prompt pops up showing you the memory allocation goals that are gonna be created on each PMem module โ€” exactly like the command Section [Show Memory Allocation Goal] documents โ€” plus any of those extra confirmation messages from above. If you're feeling brave (or reckless ๐Ÿซฃ), the force option lets you skip that confirmation entirely and go straight to creating the goals.

The following configuration will be applied:
SocketID DimmID MemorySize AppDirect1Size AppDirect2Size (Refer to the command Section <<Show Memory Allocation Goal>>)
[Additional Confirmation Messages (see above)]
Do you want to continue?

and that's the whole page bestie, we ate that up fr fr ๐Ÿ‘‘๐Ÿ’– this was ipmctl, version dated 2024-04-22, and you were reading IPMCTL-CREATE-GOAL(1) โ€” now go forth and create those goals responsibly, mwah ๐ŸŽ€๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from