|Mandalika's scratchpad||[ Work blog @Oracle | My Music Compositions ]|
A memory mapped (mmap'd) file is a shared memory object, or a file with some portion or the whole file was mapped to virtual memory segments in the address space of an OS process. Here is one way to figure out if a given object (file or shared memory object) was memory mapped in a process or not.
And here is an example. We are about to check a log file and a shared memory segment in a Siebel object manager's process address space.
# pfiles 8251 8251: siebmtshmw /siebel/siebsrvr/admin/Siebel81.isve02.s .. 1: S_IFREG mode:0744 dev:256,65539 ino:246660 uid:1234 gid:30 size:0 O_WRONLY|O_APPEND|O_CREAT /siebel/siebsrvr/enterprises/Siebel81/isve02/log/StdErrOut/stderrout_8251_23311913.log ... 9: S_IFREG mode:0700 dev:256,65539 ino:246640 uid:1234 gid:30 size:6889472 O_RDWR|O_CREAT|O_EXCL /siebel/siebsrvr/admin/Siebel81.isve02.shm .. # pmap -sx 8251 | grep 246660 # <== stderrout_8251_23311913.log file was not a memory mapped file # pmap -sx 8251 | grep 246640 F6400000 64 64 - - 8K r--s- dev:256,65539 ino:246640 F6410000 136 136 - - - r--s- dev:256,65539 ino:246640 F6432000 128 128 - - 8K r--s- dev:256,65539 ino:246640 ... <== Siebel81.isve02.shm was a memory mapped object
Labels: how-to solaris mmap
After all these years of software evolution, it is odd to see not much improvement in the area of software installation. Customers do not seem to mind dealing with different, complex installers. Nevertheless this whole process can be simplified to save time, effort and energy.
In an ideal world, a software installer is supposed to have just one function - copying the software bits to a designated location and nothing else. However today we interact with different installers that does variety of things -- some install the pre-compiled binaries, few come in ready-to-extract zip archives, few others compile the binary on-the-fly and install the binary. Most of the enterprise software installers configure the software as part of the installation process where as few installers install the software and simply quit leaving the configuration step for the experts. Some of the installers hard-code the hostname, IP address, absolute paths of certain files etc., into some of the files on target system, which makes it hard to re-use the software home directory on a different server. Few installers do sensible job by not tying anything to the host system where the software is being installed.
Here is my partial wish list of features for a software installer. I think it is enough to make a point.
— Idempotent installations : install the software once, run anywhere. Customers should be able to move the resulting home directories from one host to any location on another host without worrying about the underlying changes to the location of the home directory, hostname, IP address etc., One example is the Oracle RDBMS installation. Once installed, the ORACLE_HOME can be zipped up, moved to another host, extracted and used right away. ORACLE_HOME usually contains the binaries. Installation specific configuration is stored outside of ORACLE_HOME. Optional Oracle Grid Control configuration appears to be saved under ORACLE_HOME, which is an aberration though it can be easily reconfigured once moved to another host.
— Simplicity : providing the entire directory structure in an extractable compressed archive file will remove one or more layers of dependency that the software installer has. For example, some of the installers require Java run-time to show the graphical interface for the installer. I recently encountered an installer executable that has private/unsupported symbols statically linked to it. When those private interfaces were removed in a later version of the operating environment, installer crashed and failed to make any progress. Had the software been provided in an extractable archive, software would have been readily available in the latter case. It appears that Oracle Corporation is moving in the right direction by releasing WebLogic 12c software as a zip file.
— De-couple software installation from configuration : there should be clear separation between the installation and configuration. Once the software is in place, relevant folks can always configure the software as directed and needed. The customer just needs a simple tool or script to configure the software.
=> Off-topic: providing a web interface is even better. It gives the flexibility to configure the software from anywhere in the same network.
— Contain everything in a single top-level directory : it makes patching easier even if the top-level directory was moved to a different location or host. No point in spreading the pieces of software into multiple locations anyway. Going back to the example of ORACLE_HOME, one shortcoming in Oracle RDBMS installation is that few directories/files such as oraInventory reside outside of ORACLE_HOME - so, when moving ORACLE_HOME to another host, it is necessary to move all relevant files that are outside of ORACLE_HOME as well for successful database software patching.
With careful planning/design, Release Engineering can be as creative and innovative as the rest of the teams in delivering a software product out of the door --- but I guess it is up to the customers to demand that attitude.
PS: This blog post can be improved a lot. However since it is mostly about an opinion and a wish list, there is not much motivation to put more effort into it. And of course it is a generic discussion - nothing specific to a particular software or corporation.