SAP on IBM i – Update week 29 2013: SAP Memory Model on IBM i
Welcome to the SAP on IBM i update! With this update, we would like to introduce you to profile parameter ES/TABLE, which can be used to switch the shared memory implementation on IBM i.
While ES/TABLE=UNIX_STD is the default and used to be significantly faster in IBM i releases prior to IBM i 6.1, the alternative ES/TABLE=SHM_SEGS can be significantly faster in IBM i releases 6.1 and higher when hardware with a large number of processors is used. We have seen significant improvements on systems with more than 16 processors.
Before you can change your SAP system to ES/TABLE=SHM_SEGS, you must ensure that your system is at IBM i 6.1 or higher, install the downward-compatible kernel 7.20 patch at level 220 or above and switch to the new user concept (see SAP Note 1149318). When changing the profile parameter ES/TABLE to SHM_SEGS, you also need to consider profile parameters ES/SHM_BASE_ADDR and as4/MAXSHR64. Profile parameter ES/SHM_BASE_ADDR defines the starting address for extended memory, and its value should be large enough to avoid overlapping with the SAP buffers. Profile parameter as4/MAXSHR64 defines the maximum number of 256 MB segments, and its value must be large enough so that the resulting addresses calculated on top of ES/SHM_BASE_ADDR fit into the address range that is spanned by as4/MAXSHR64. For a better understanding of the calculations, you might want to look at the presentation at https://scn.sap.com/docs/DOC-44113.
To calculate a good value for ES/SHM_BASE_ADDR, you first need to find the highest shared memory address used by your SAP buffers. You can find that by executing ABAP program RSTUNSHM in transaction SE38 and sorting the output list by the address. Depending on your buffer settings, you will get an address such as 07000002A00829E0. You must generously round up to a free address, in this case we recommend ES/SHM_BASE_ADDR=0x0700001000000000 (the prefix ‘0x’ indicates a hexadecimal number).
You now need to consider the value for as4/MAXSHR64. The default value of 256 represents 64 GB (256 * 256 MB). If you calculate the highest possible address for 64 GB, you end up with a hexadecimal value of 0x0000001000000000. If you map this to the value of ES/SHM_BASE_ADDR, you can see that the maximum allowed distance from the segment start (defined by as4/MAXSHR64) is the same as the beginning of the extended memory (defined by
ES/SHM_BASE_ADDR). If you try to start your system with these settings, you will receive errors very soon. In order to allow more extended memory, you need to set as4/MAXSHR64 to a value higher than 256, for example as4/MAXSHR64=2048. This value represents 512 GB (2048 * 256 MB), and with that the highest possible distance from the segment start is 0x0000008000000000, so you have enough address space for up to 448 GB of extended memory. Note that the space is not actually allocated on the system unless it is really needed. These values only represent addresses, so setting as4/MAXSHR64 too high usually does not hurt (it was intended as a sort of protection in case of kernel errors).
Profile parameter ES/TABLE and its related parameters are also discussed in SAP Note 808607 in the section 1.1.8. “Improvements as of IBM Version i6.1”.