How do I optimize the OS for SSDs?
Solution 1
I have successfully used several different techniques to improve the way Ubuntu uses the storage device, whether that be solid state or traditional drive.
For SSD's you are looking to minimise the number of times the drive is written too, as reads should not add wear to the drive.
1) Manage the swap file
If you do not hibernate your computer and you have ample RAM memory to run all your applications, then in theory you do not need a swap partition.
If you have a mix of SSD and hard drives, place your swap partition on the hard drives only.
2) No Writes for Read Timestamps (suitable for SSD's and hard drives)
Mounting your partitions with the options noatime and nodiratime will stop timestamp writes when you read files and folders. These timestamp writes are not generally required unless you use a local mail server client such as mutt. The reason this is generally a bad idea, is because every read will produce a write when updating the timestamps. This decreases the life of the SSD.
Edit your /etc/fstab configuration file (carefully - take a backup to be sure as breaking your fstab configuration can prevent you system from working):
cp /etc/fstab ~/fstab-backup
gksudo gedit /etc/fstab
Edit the mounting options for your partitions by adding the text noatime and nodiratime to the lines defining your root (/) and other partitions if you have them (/home) - Note: if you have a /home partition, start with that just changing that partition if you are concerned about breaking something
# / was on /dev/sda2 during installation
UUID=587e0dc5-2db1-4cd9-9792-a5459a7bcfd2 / ext4 noatime,nodiratime,errors=remount-ro 0 1
# /home was on /dev/sda3 during installation
UUID=2c919dc4-24de-474f-8da0-14c7e1240ab8 /home ext4 noatime,nodiratime,defaults 0 2
You will need to reboot your machine before these changes take effect
3) Minimising writes from the OS and applications
Assuming that you are not running a mission critical product server, most people do not look at logs should something go wrong (especially as serious errors are rare for most Ubuntu users). Therefore you can configure Ubuntu so all logs get written to RAM memory rather than the SSD.
Note: only make the following changes when you have installed all software you are going to use (especially things like Apache web server), otherwise you may experience some issues with missing directories in /var/log
For background to this approach, see prolonging the life of your flash drive on ubuntu-eee.com
Open /etc/fstab with an editor (assuming you have backed up the /etc/fstab file)
gksudo gedit /etc/fstab
Add the following lines at the end of the fstab file and save:
# Uncomment these after all server based applications installed - eg. apache
#tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
#tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
#tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0
#tmpfs /var/log/apt tmpfs defaults,noatime 0 0
# none /var/cache unionfs dirs=/tmp:/var/cache=ro 0 0
You will need to reboot your machine before these changes take effect
See also:
Solution 2
SSD Life
Generally I wouldn't bother - the worries about SSD life are overblown. You can read this detailed article about why you really shouldn't worry. In short the circuitry inside modern SSDs manages wear-levelling for you, and they know how to do it far better than you.
In the article is a calculation of the life of an SSD that is receiving writes at a continuous rate of 80M/s. The life is 51 years. That is based on 2007 technology - SSD life will be longer now. And you almost certainly don't write to your SSD at 80M/s 24 hours a day.
SSD Performance
However performance degradation over time can be a problem, and TRIM is the solution. There are two options
- automatic/online TRIM, aka discard
- manual TRIM
You have to enable automatic TRIM yourself . (Basically you add the discard
option to your mount options, provided you are using ext4.) I have found a blog post reporting that the discard option slows down your system when deleting files.
You can occasionally do it manually (or in a cron job) using fstrim. If you just have one partition then all you need to do is:
sudo fstrim /
Note that fstrim is only available in 11.10 and newer. For older systems you will need the wiper.sh
script. I found the script at /usr/share/doc/hdparm/contrib/wiper.sh.gz
on my system.
If you're wondering, the problem that TRIM solves, as described by Wikipedia, is:
SSDs store data in flash memory cells that are grouped into pages, with the pages (typically 4 kB each) grouped together into blocks (typically 128 pages per block, totaling 512 kB). NAND flash memory cells can only be directly written to when they are empty. If they are considered to contain data, the contents first need to be erased before a write operation can be performed reliably. In SSDs, a write operation can be done on the page-level, but due to hardware limitations, erase commands always affect entire blocks. As a result, writing data to SSD media is very fast as long as empty pages can be used, but slows down considerably once previously written pages need to be overwritten. Since an erase of the cells in the page is needed before it can be written again, but only entire blocks can be erased, an overwrite will initiate a read-erase-modify-write cycle: the contents of the entire block have to be stored in cache before it is effectively erased on the flash medium, then the overwritten page is modified in the cache so the cached block is up to date, and only then is the entire block (with updated page) written to the flash medium. This phenomenon is known as write amplification.
Solution 3
There are several points:
Alignment:
What is often pointed out is the right alignment of the partition. This should be equal to the block size of the SSD. Play safe and make your partitions aligned to MiB boundaries. Note that you can't do this with the Ubuntu installer's partition tool (which uses MB not MiB), but you can boot the live CD, use Gparted (which uses MiB), then click Install to use the partitions you set up.
The right scheduler:
A important point is the scheduler wich should be noop
. You can set this scheduler via kernelparameter elevator=noop
or via a entry echo noop > /sys/block/sda/queue/scheduler
in you rc.local.
Mountflags:
I would recommend noatime
and discard
Tmpfs
To put tmp on a ramdisk can increase the life time of the ssd.
To use this put the following line in you fstab: none /tmp tmpfs defaults 0 0
Generally if you want to dive deeper into this topic I would recommend this excellent wiki-article.
Solution 4
Fast tuning course for your SSD on Ubuntu:
filesystem
Arch wiki mentions few preferable options for SSD file system - one of them is unstable, others are ext* ones. I assume ext4 is one of the best picks.
Note: In case of ext4 you may want to use discard
mount option.
fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
tmpfs /tmp tmpfs nodev,nosuid,noatime,mode=1777 0 0
/dev/sda1 / ext4 defaults,noatime,discard,errors=remount-ro 0 1
/dev/sda2 /home ext4 defaults,noatime,discard,user_xattr 0 2
/dev/sda3 /windows ntfs defaults,noatime,discard,umask=007,gid=46 0 0
Few important things here are:
- For systems with >=2 gigs of memory, locating /tmp in the RAM is desirable.
- No
swap
partition. Nowadays it's needed only for hibernation, since modern machines has pretty big amount of RAM. -
noatime
anddiscard
options. Info is here.
scheduler
Consider switching from the default scheduler, which under most Linux distro's is cfq (completely fair queuing), to the noop or deadline scheduler for an SSD. Using the noop scheduler, for example, simply processes requests in the order they are received, without giving any consideration to where the data physically resides on the disk. This option is thought to be advantageous for SSDs since seek times are identical for all sectors on the SSD.
Add following to /etc/rc.local:
# SSD performance tuning
echo noop > /sys/block/sda/queue/scheduler
info
Solution 5
4) enable automatic TRIM
If your SSD supports it, you should also enable automatic TRIM (as described here)
Related videos on Youtube
Lars Haugseth
Updated on September 17, 2022Comments
-
Lars Haugseth over 1 year
What steps should be taken before/during/after installation of Ubuntu on a Solid State Drive to optimize performance and ensure maximum durability of the drive?
-
Scaine over 13 yearsNice find, JR0cket. I used to contribute to Ubuntu-eee, before it became EasyPeasy. Ramvi was a gentleman. wiki.geteasypeasy.com/…
-
RusGraf about 13 yearsWhat is the purpose of unionfs here, and how do I install it?
-
Luis Alvarado about 13 yearsI wish I could vote multiple times. THIS would be one of those answers. That link has solved a worry I have had for a long time. Many thanks Hamish.
-
Oxwivi almost 13 yearsAbout the last bit for logs and stuff, the
tmpfs
lines are commented, so why would adding those lines make any difference? Do we need to add it uncommented? -
Lekensteyn over 12 yearsDo you know what each of the locations are used for? All mentioned locations except for
/root
,/home
and swap should be put on the SSD for speed because it's mostly read-only. For speed benefit, put/var
on the SSD too. -
Lekensteyn over 12 yearsThe
/
partition for Kubuntu Oneiric takes 4.5GB on my SSD. 20GB is sufficient for/
minus/home
. The efforts for tweaking the filesystem layout, spreading it over several partitions is not worth it. -
samme4life over 12 yearsWithout swap, and with
/tmp
in RAM, it's very easy to get to an out of memory situation, as a lot of programs use/tmp
as a storage space (for example Brasero for storing DVD images). -
Andrejs Cainikovs over 12 yearsNot really.
tmpfs
by default is 10% of RAM. The size can be adjusted usingsize
option though. -
Eren Tantekin over 12 yearsIt is quite difficult to have enough memory these days. You can never know how much you may need.
-
Varun about 12 yearsThanks a lot. I am confused because I have always used dual boot Linux and it will be first time when I will be installing Linux on a fresh SSD, so the process and storage both are new to me. but it seems that it is same as installing Ubuntu on HDD, right?
-
gajdipajti about 12 yearsIt is the same. At install you might be asked to create the partition table, but that is one click.
-
Varun about 12 yearsAnother question, Do I need to make any change to BIOS for my Dell laptop. I am going to install SSD and Ubuntu today?
-
gajdipajti about 12 yearsNo, modern bios autodetect the type hard disks.
-
Varun about 12 yearsThanks a lot, very helpful, will let you know what happens tomorrow :)
-
Csabi Vidó about 12 yearsBrasero is a bad example, it shouldn't do that in the first place as Lennart Poettering explains in his blog 0pointer.de/blog/projects/tmp.html
-
Andrew Ferrier almost 12 yearsYou might wish to use aufs rather than unionfs in more recent versions of Ubuntu. This line is equivalent: none /var/cache aufs br=/tmp:/var/cache=ro 0 0
-
h3. over 11 yearsCan you quantify the improvements brought by your proposals? What makes you think that they are significant, and what do they improve?
-
jr0cket over 11 yearsBy adding the option noatime to your file system, you are telling Ubuntu to not update the modification time to files you work with. This saves a file write every time a file is read. As its very hard to use a computer without reading files off the disk, this will reduce the amount of work done by the computer. I have no interest in quantifying any improvements as performance is always specific to usage and usage for computing devices varies wildly. I share these options as something I use in general for all writeable drives, SSD or otherwise. Thank you.
-
Mihai Capotă over 11 yearsThere's no need for 2). relatime does the job of preventing writes very well and it's been active by default since kernel 2.6.30.
-
Lawrence I. Siden over 11 yearsInteresting article from storagesearch.com. I wish it would give a date! So does the above answer mean that SSD owners don't need to bother with suggestions in the first answer, with the exception of TRIM? I don't have much need for file access times, but with 2G of memory, having a swap partition might still be useful when running some photo editing software along with several other memory-intensive programs like Chrome.
-
Hamish Downer over 11 years@lsiden: the article does mention "Later:- in May 2008" part way through. And you are correct that you shouldn't worry about all the other stuff in the first article. Just enable TRIM and enjoy the speed :)
-
Cas over 11 yearsJust to add to @MihaiCapotă's comment there is a Server Fault answer with more details on why noatime is not needed.
-
LeartS over 10 yearsThe article refers to enterprise grade SSDs : he uses 2 millions cycles of write endurance. Consumer SSDs have about 3000-5000 cycles. A 128 GB SSD with 3000 cycles gives 57 days of continuous 80MB/s writing.
-
jarno over 8 yearsIn ubuntu 14.04 and later there is a cron job /etc/cron.weekly/fstrim set by default to trim file systems weekly. As for 14.04, see here. Ubuntu 15.10 uses
/sbin/fstrim --all || true
in the fstrim script. -
jarno over 8 yearsAt least directory /var/log/installer has subdirectory called ubiquity-apt-clone in Xubuntu 15.10. Should you create subdirectories recursively?
-
becko about 8 yearsThe link is dead.
-
KrisWebDev over 7 yearsIn Ubuntu 14.10 onwards, TRIMming happens automatically every week on all SSDs supported by fstrim. ref.
-
Igor Popov about 4 yearsGeneral optimization tips: orangesputnik.eu/ubuntu-desktop-optimization