Swap: Difference between revisions
(Add recipe for swapping to SD card) |
No edit summary |
||
(42 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
[[Swap]] refers to using storage for volatile data that does not fit into memory. |
|||
Swap on SD cards is broken in many XO software releases. When the bug is present, the XO forcibly unmounts the SD card at suspend, which loses the swap file, and breaks all applications that touched the swap, most notoriously X11. It also often overwrites the first blocks of your SD card with zeros or gibberish, which makes them no longer work until you reformat them entirely. NOT FUN! |
|||
= Introduction = |
|||
The SD suspend bug(s) are fixed in Joyride releases 2263 and later (maybe others) and in Build 710 or later of the preceding |
|||
releases. Having the bug fixed allows an SD card to be used as swap space (for demand paging), making your small RAM seem larger and your XO more responsive. |
|||
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 recipe below WILL NOT WORK if you have the XO's original software release, or the "Update.1" release. Use at your own risk! |
|||
The XO-1.5, XO-1.75 and XO-4 have more memory, so swap space is rarely needed, except for special situations. |
|||
== How To Swap (Page) To An SD Card == |
|||
Get a [[Secure Digital card]]. |
|||
Use a recent joyride software release (this requires getting your XO a [[Activation and developer keys|developer key]], which is a good idea anyway since it unlocks your machine and puts you in control of it). Get a throwaway 1GB SD card. Available for |
|||
You can use a throwaway SD card, these are available for |
|||
$3-$20 depending where you go. I say throwaway because swapping to it |
|||
very little. We say throwaway because swapping to it |
|||
will tend to burn it up faster than its "usual" lifetime for photos |
will tend to burn it up faster than its "usual" lifetime for photos |
||
and such. You will still be able to use |
and such. You will still be able to use the rest of the card for |
||
file storage; |
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 |
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 |
time while you're swapping to it; you can't remove it the way you |
||
remove a USB |
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 |
after a few years, you can copy any still-interesting user files off |
||
it, throw it away, and put in a new |
it, throw it away, and put in a new SD card. |
||
larger). |
|||
= How much swap? = |
|||
Go to a terminal (either the Terminal activity, or Ctrl-Alt-F1). Become root. |
|||
Type "<tt>mount</tt>", make sure the SD card is mounted at <tt>/dev/mmcblk0p1</tt>, |
|||
in a "vfat" filesystem. |
|||
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 user experience when demand is high. |
|||
Go into the Journal, find the SD card hiding behind the Frame at the |
|||
bottom, hover over it, pick Unmount. Go back to the terminal. |
|||
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 <tt>alt-tab</tt>. Without swap this is impractical. |
|||
Type "<tt>mount</tt>", make sure <tt>/dev/mmcblk0p1</tt> is not mounted any more. Type |
|||
"<tt>yum install parted</tt>" since the partition editor is not in the distro |
|||
any more (you'll need to be on the Internet to do this). Run "<tt>/sbin/parted /dev/mmcblk0</tt>". Type "<tt>print</tt>" to see the |
|||
current configuration. On mine it looked like this: |
|||
Special situations may require more swap. |
|||
Number Start End Size Type File system Flags |
|||
1 127kB 1018MB 1018MB primary fat16 |
|||
The device you use may have ample space, so using more is reasonable. |
|||
Type "<tt>resize 1 0 512</tt>" to shrink this filesystem down to 512MB. If it |
|||
asks you whether to use FAT32, just say no. Then type "<tt>mkpartfs |
|||
primary linux-swap 512 1018</tt>". That'll make a second partition for |
|||
swapping to, and format it as a Linux swap partition. (If your SD card is a different |
|||
size, adjust these numbers to give you larger or smaller partitions that fit.) Type "<tt>print</tt>" |
|||
and it should look roughly like this: |
|||
= Swap to a file on a device = |
|||
Number Start End Size Type File system Flags |
|||
A file on a filesystem on an SD card or USB drive can be used for swap. |
|||
1 32.3kB 512MB 512MB primary fat16 |
|||
2 512MB 1018MB 506MB primary linux-swap |
|||
Advantages: |
|||
Type "<tt>quit</tt>". Now you're back to the shell. Type "<tt>/sbin/swapon /dev/mmcblk0p2</tt>". You're done. |
|||
* avoids dedicating a partition on external device, |
|||
* avoids repartitioning, |
|||
Disadvantages: |
|||
The Hal daemon is smart enough to mount filesystems when it sees an SD |
|||
* 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>, |
|||
card appear, but it's not smart enough to start using freshly |
|||
* 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>. |
|||
available swap space. For the moment, you'll have to do "<tt>/sbin/swapon |
|||
/dev/mmcblk0p2</tt>" each time after you reboot the XO. Similarly, it |
|||
won't automatically do a "<tt>/sbin/swapoff</tt>" if you try to eject it. I'm sure |
|||
somebody will eventually come up with a Hal script or something to |
|||
automate those parts. |
|||
Recipe for Sugar: |
|||
* download [http://dev.laptop.org/~quozl/MakeSwap-3.xo MakeSwap-3.xo], |
|||
* insert an SD card<ref name="covering">if a child is to be using the laptop with swap, then it may be appropriate to cover the slot with adhesive so that the card is not easily removed.</ref> with a FAT filesystem<ref>MakeSwap does not work with anything other than FAT formatted cards. SD cards are FAT formatted and optimised by the manufacturer, so if you have reformatted them you will need to use other instructions.</ref>, |
|||
* run the activity, wait for it to say it is done, then quit, |
|||
* the activity can be safely run again (it does nothing new), or erased (swap continues to be available). |
|||
Recipe for GNOME: |
|||
== Earlier commentary about swapping == |
|||
* remove all other SD cards or USB drives, (to make the following simplest), |
|||
* insert the SD card or USB drive<ref name="sd_better">it is best to use an SD card rather than a USB drive</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.1. Does not work exactly the same way on earlier releases. |
|||
:Swapping to a partition would overcome this??? |
|||
= Swap to an entire device = |
|||
Swap on the internal memory doesn't work either, it causes system freezes. Swap doesn't even like attaching to a jffs2 file, but can be forced by using a loopback device. The internal flash chip is only rated for 3000 writes/cell (Remember when flash could take 100,000 writes? Now we're giving that up for density). JFFS2 will try to spread that across the whole chip, even then swap write patterns are likely bad for it. Try the following at your own risk. |
|||
An entire SD card or USB drive can be used for swap. |
|||
Advantages: |
|||
su |
|||
* suited to use with a child<ref name="covering" />, |
|||
dd if=/dev/zero of=/var/swap count=128000 |
|||
/sbin/mkswap /var/swap |
|||
Disadvantages: |
|||
#!/bin/sh |
|||
* need to repartition the device, which loses all files, and may affect performance of the device, |
|||
if [ `cat /proc/swaps | wc -l` == 1 ] ;then |
|||
* the device should not be removed once inserted<ref name="hang" />. |
|||
loopdev=`su -c "/sbin/losetup -f"` |
|||
su -c "/sbin/losetup $loopdev /var/swap" |
|||
Recipe: |
|||
su -c "/sbin/swapon $loopdev" |
|||
* in the [[Terminal activity]], become [[root]], then install the gparted package: |
|||
fi |
|||
yum install -y gparted |
|||
user:[[mike41430]] |
|||
* 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: |
|||
:The document that the "[[Hardware specification]]" page calls the "[[Media:CL1_Hdwe_Design_Spec.pdf|Definitive Laptop Specification]]", which is dated 9/13/07, says "The endurance of the NAND device is one hundred thousand erase cycles". The [[Swap]] article, with edit dates 12/23-28/07, says the "internal flash chip is only rated for 3000 writes/cell". I do not know which of these statements to believe. Did the "definitive laptop specification" become less "definitive" between 9/13 and 12/23? In particular, I would like to know the endurance rating of the flash memory in my G1G1 XO-1, ordered 11/12/07 and shipped 12/17/07. I also hope that a future release will be fixed so that it will be possible to swap on the built-in SD card slot, or use it as an extension of memory, which seems to be what was intended. |
|||
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. |
|||
= Monitoring = |
|||
* the {{Code|swapon -a}} and {{Code|free}} commands are helpful for confirming that swap is available, |
|||
* using a USB drive with an indicator is helpful for assessing when swap is being accessed, |
|||
* the {{Code|top}} command is helpful for seeing how much swap and memory demand is happening. |
|||
= Notes = |
|||
{{reflist}} |
|||
[[Category:HowTo]] |
Latest revision as of 01:28, 17 July 2014
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 user experience 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 for Sugar:
- download MakeSwap-3.xo,
- insert an SD card<ref name="covering">if a child is to be using the laptop with swap, then it may be appropriate to cover the slot with adhesive so that the card is not easily removed.</ref> with a FAT filesystem<ref>MakeSwap does not work with anything other than FAT formatted cards. SD cards are FAT formatted and optimised by the manufacturer, so if you have reformatted them you will need to use other instructions.</ref>,
- run the activity, wait for it to say it is done, then quit,
- the activity can be safely run again (it does nothing new), or erased (swap continues to be available).
Recipe for GNOME:
- remove all other SD cards or USB drives, (to make the following simplest),
- insert the SD card or USB drive<ref name="sd_better">it is best to use an SD card rather than a USB drive</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.1. Does not work exactly the same way on earlier releases.
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:
- in the Terminal activity, become root, then install the gparted package:
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.
Monitoring
- the swapon -a and free commands are helpful for confirming that swap is available,
- using a USB drive with an indicator is helpful for assessing when swap is being accessed,
- the top command is helpful for seeing how much swap and memory demand is happening.