linux/Documentation/filesystems/xip.txt
<<
>>
Prefs
   1Execute-in-place for file mappings
   2----------------------------------
   3
   4Motivation
   5----------
   6File mappings are performed by mapping page cache pages to userspace. In
   7addition, read&write type file operations also transfer data from/to the page
   8cache.
   9
  10For memory backed storage devices that use the block device interface, the page
  11cache pages are in fact copies of the original storage. Various approaches
  12exist to work around the need for an extra copy. The ramdisk driver for example
  13does read the data into the page cache, keeps a reference, and discards the
  14original data behind later on.
  15
  16Execute-in-place solves this issue the other way around: instead of keeping
  17data in the page cache, the need to have a page cache copy is eliminated
  18completely. With execute-in-place, read&write type operations are performed
  19directly from/to the memory backed storage device. For file mappings, the
  20storage device itself is mapped directly into userspace.
  21
  22This implementation was initially written for shared memory segments between
  23different virtual machines on s390 hardware to allow multiple machines to
  24share the same binaries and libraries.
  25
  26Implementation
  27--------------
  28Execute-in-place is implemented in three steps: block device operation,
  29address space operation, and file operations.
  30
  31A block device operation named direct_access is used to retrieve a
  32reference (pointer) to a block on-disk. The reference is supposed to be
  33cpu-addressable, physical address and remain valid until the release operation
  34is performed. A struct block_device reference is used to address the device,
  35and a sector_t argument is used to identify the individual block. As an
  36alternative, memory technology devices can be used for this.
  37
  38The block device operation is optional, these block devices support it as of
  39today:
  40- dcssblk: s390 dcss block device driver
  41
  42An address space operation named get_xip_mem is used to retrieve references
  43to a page frame number and a kernel address. To obtain these values a reference
  44to an address_space is provided. This function assigns values to the kmem and
  45pfn parameters. The third argument indicates whether the function should allocate
  46blocks if needed.
  47
  48This address space operation is mutually exclusive with readpage&writepage that
  49do page cache read/write operations.
  50The following filesystems support it as of today:
  51- ext2: the second extended filesystem, see Documentation/filesystems/ext2.txt
  52
  53A set of file operations that do utilize get_xip_page can be found in
  54mm/filemap_xip.c . The following file operation implementations are provided:
  55- aio_read/aio_write
  56- readv/writev
  57- sendfile
  58
  59The generic file operations do_sync_read/do_sync_write can be used to implement
  60classic synchronous IO calls.
  61
  62Shortcomings
  63------------
  64This implementation is limited to storage devices that are cpu addressable at
  65all times (no highmem or such). It works well on rom/ram, but enhancements are
  66needed to make it work with flash in read+write mode.
  67Putting the Linux kernel and/or its modules on a xip filesystem does not mean
  68they are not copied.
  69
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.