Swap: Difference between revisions

From OLPC
Jump to navigation Jump to search
No edit summary
Line 1: Line 1:
[[Swap]] refers to using storage for data that does not fit into memory.
[[Swap]] refers to using storage for volatile data that does not fit into memory.


== Introduction ==
== Introduction ==

Revision as of 02:41, 10 August 2013

Swap refers to using storage for volatile data that does not fit into memory.

Introduction

The XO-1 has only 256 MiB of memory (see Hardware specifications); adding swap space may allow running more simultaneous instances of more complicated applications.

The XO-1.5, XO-1.75 and XO-4 have more memory, so swap space is rarely needed, except for special situations.

Get a Secure Digital card. You can use a throwaway SD card, these are available for very little. We say throwaway because swapping to it will tend to burn it up faster than its "usual" lifetime for photos and such. You will still be able to use the rest of the card for file storage; about 512 MB will be for swap space. Plug it into the SD card slot on the XO. You'll have to keep it plugged in the whole time while you're swapping to it; you can't remove it the way you remove a USB drive or a non-swap SD card. When it starts to slow down after a few years, you can copy any still-interesting user files off it, throw it away, and put in a new SD card.

How much swap?

In the examples below we use 64 MiB of swap. This is a reasonable amount for ordinary interactive use of an XO-1, and can substantially improve performance when demand is high.

As an example of the improvement, on 13.2.0 one can open many Sugar activities without closing the previous activity, and then switch between them with alt-tab. Without swap this is impractical.

Special situations may require more swap.

The device you use may have ample space, so using more is reasonable.

Swap to a file on a device

A file on a filesystem on an SD card or USB drive can be used for swap.

Advantages:

  • avoids dedicating a partition on external device,
  • avoids repartitioning,

Disadvantages:

  • the XO may hang if the device is removed without first turning off swap<ref name="hang">once the system is using a resource for swap, it relies on it heavily, and if the resource is lost the system may hang, so you have to make sure it isn't lost, or if it is lost use the power button to reboot.</ref>,
  • slightly less efficient<ref>swap to a file on a filesystem is less efficient than swap to partition, but not notably so; the extra CPU cost of remapping the swap I/O is minimal, and at the time the swap is used the system is already under demand.</ref>.

Recipe:

  • remove all other SD cards or USB drives, (to make the following simplest),
  • insert the SD card or USB drive<ref name="covering">if a child is to be using the laptop with swap, then it is best to use an SD card rather than a USB drive, and it may be appropriate to cover the slot with adhesive.</ref>,
  • in Terminal, as Root, copy and paste the commands:
 # find the SD card or USB drive and make a file name for it
 D=/run/media/olpc/
 E="$D$(ls $D)"
 F=$E/swap
 
 # create a 64 MiB file
 dd if=/dev/zero of="$F" bs=1M count=64
 
 # mark the file as a swap file
 sudo mkswap "$F"
 
 # start using the file
 sudo swapon $F
  • to verify the swapfile is being used:
 sudo swapon -s
  • to safely remove the device,
 sudo swapoff -a
  • repeat the steps each time you reboot,

Last tested with 13.2.0.

Swap to an entire device

An entire SD card or USB drive can be used for swap.

Advantages:

  • suited to use with a child<ref name="covering" />,

Disadvantages:

  • need to repartition the device, which loses all files, and may affect performance of the device,
  • the device should not be removed once inserted<ref name="hang" />.

Recipe:

yum install -y gparted
  • insert the SD card or USB drive, and use gparted (Applications -> System Tools -> GParted Partition Editor) to delete the manufacturer's partition and add a linux-swap partition, then add it to the filesystem table:
 eval $(blkid -o export /dev/mmcblk1p1)               # get the UUID
 echo UUID=$UUID swap swap defaults 0 0 >> /etc/fstab # add to table
 swapon -a -v                                         # turn on swap

Last tested with 13.2.0.

Swap to a file on another system, using the network block device

Swap can be added as a file on another system, with access over network connection using the network block device driver, which is available as a module.

Advantages:

  • swap space can be added when needed rather than always available,
  • additional swap space can be added at any time,
  • no damage to endurance of SD card or USB drive,

Disadvantages:

  • the XO may hang<ref name="hang" /> if the other system is shutdown, or the network connection is lost, without first turning off swap,
  • the network may be loaded,
  • disk space is needed on the other system.

Setup the other system:

 # install the nbd package
 yum install -y nbd
 
 # create a 64 MiB empty file
 dd if=/dev/zero of=/root/xo-swap bs=1048576 count=64
 
 # provide it over network block device protocol on port 1234
 nbd-server 1234 /root/xo-swap

Setup the XO:

 # install the nbd package
 yum install -y nbd
 
 # load the network block device module
 modprobe nbd
 
 # attach the network block device to the remote system
 nbd-client 10.0.0.1 1234 /dev/nbd0
 
 # make swap space on the block device
 mkswap /dev/nbd0
 
 # enable swap space
 swapon /dev/nbd0

Last tested with 13.2.0.

Swap to a file on internal device

Swap won't attach to a file on internal storage on XO-1, because of a limitation of the filesystem driver, but this can be bypassed using a loopback block device.

Advantages:

  • no additional hardware or network required.

Disadvantages:

  • the XO-1 will become slower over months instead of years<ref>the XO-1 internal storage is rated for 100,000 writes per cell, the filesystem will try to spread that across the whole device, so using the internal storage as swap will shorten the life of the internal storage, and it will become permanently slower much earlier than planned by the designers.</ref>.

Recipe:

 # set the name of the swap file
 FILE=/var/swap
 
 # create the file and preallocate the space
 dd if=/dev/zero of=$FILE bs=1M count=64
 
 # write the swap signature pattern into the file
 /sbin/mkswap $FILE
 
 # create a loopback block device representing the file
 LOOP=$(losetup --show --find $FILE)
 
 # turn on swap through the loopback device
 swapon $LOOP

Last tested on 13.2.0.

Notes

<references group=""></references>