본문
요즘 들어 SSD가 많이 보급되고 Kernel과 File System에서도 제대로 지원하게 된 덕분에, 이제는 Ubuntu Box에서도 SSD를 장착하여 사용하는데 어려움이 많이 줄어들게 되었습니다.
이번 Post에서는 개인적으로 SSD를 사용하면서 성능 향상과 안정성을 높이는 방법에 대하여 몇 가지 정리한 것들을 공유해 봅니다.
Table of Contents [Show]
1. Mount Option 변경
/etc/fstab에서 SSD Partition에 대한 Mount Option을 조정하면 성능과 안정성을 높일 수 있습니다.
1 2 3 | $ sudo vi /etc/fstab UUID=12345678-1234-1234-1234-123456789012 / xfs errors=remount-ro,noatime,discard 0 1 |
위의 예는 Root Directory에 Mount되어 있는 SSD Partition의 Mount Option을 나타낸 것입니다.
중요한 것은 errors=remount-ro,noatime,discard 이렇게 3가지 Mount Option인데, 이것은 다음과 같은 의미를 가집니다.1
- errors=remount-ro: SSD Partition에 Error가 발생할 경우, 이 Partition을 다시 Read-only로 Mount합니다.
- noatime: SSD Partition의 File System에 atime(Access Time)정보를 적지 않도록 합니다. 이것은 File의 Read 동작 시에 불필요한 Write 동작이 일어나지 않게 만들어 주기 때문에 접근 속도를 향상 시킬 수 있습니다.
- discard: discard Option은 Storage Device에 더 이상 유효하지 않은 Data가 존재하는 Sector가 있음을 알리는 기능을 합니다. 이것을 사용하면 SSD의 TRIM Command를 자동으로 사용하게 되어 SSD의 수명을 연장 시킬 수 있습니다. 이 Option은 EXT4, btrfs, XFS File System에서만 지원됩니다. (JFS는 Kernel 3.7이상)
SSD Partition이 여러 개 Mount 되어 있다면, 각 Partition마다 Mount Option을 위와 같이 변경하고 Rebooting하면 안정적으로 SSD를 사용할 수 있습니다.
2. TRIM
SSD는 H/W의 특성 상 쓰기 수명이 정해져 있기 때문에 가능한 Write 동작을 줄이기 위해서 SSD에서는 TRIM을 지원합니다.
TRIM은 SSD에 사용자나 OS에 의해 삭제 명령이 실행되어 더 이상 사용하지 않게 된 Data Block을 실제로 삭제하지는 않고 SSD에 알리는 기능을 합니다.
이전 항목의 Mount Option에서 보았듯이, discard Option으로 TRIM command를 자동으로 사용하도록 설정할 수 있습니다.
하지만, 실제로 사용하다 보면 Write 속도가 현저히 느려지는 시점이 오게 됩니다. 이럴 때는 사용자가 직접 TRIM 동작을 실행시켜 주어야 합니다.
다음과 같이 Terminal에서 입력합니다. (/에 Mount된 SSD Partition에 TRIM을 수행하는 경우의 예)
1 | $ sudo ionice -c 3 fstrim -v / |
NOTE: SSD Partition이 여려 개 Mount되어 있다면 각 Mount Point마다 실행해야 합니다.
File System과 Mount된 Partition의 크기에 따라 속도는 달라질 수 있지만, 제 경우에는 20GB의 XFS Partition을 fstrim으로 TRIM 동작을 수행했을 때 27분 정도 걸렸습니다. (SATA3, Intel SSD 330 120GB)
위의 명령과 같이 ionice로 I/O 접근 Priority를 낮추지 않으면 명령 실행 중에 Write 동작이 발생했을 때 System이 Block되는 현상을 겪을 수 있습니다.
fstrim 명령은 자주 실행할 필요는 없고, 한 주에 한 번 정도 실행해 주면 좋습니다. 그래서 다음과 같이 Cron에 명령을 등록하여 자동으로 실행하도록 만들어 주면 간편합니다. (/에 Mount된 SSD Partition에 TRIM을 수행하는 경우의 예)
1 2 3 4 5 6 7 8 9 | $ sudo vi /etc/cron.weekly/fstrim #!/bin/bash # TRIM for / /usr/bin/time -a -f "real: %E,user: %U,sys: %S" -o /var/log/fstrim.log /usr/bin/ionice -c 3 /sbin/fstrim -v / > /var/log/fstrim.log $ sudo chmod 755 /etc/cron.weekly/fstrim $ sudo service cron restart |
위와 같이 설정하면, 매 주마다 fstrim을 수행하면서 fstrim의 결과와 수행 시간을 /var/log/fstrim.log에 저장하게 됩니다.
3. I/O Scheduler 변경
I/O Scheduler는 Storage Device의 I/O 성능 관리를 위해서 사용되는 Kernel의 기능입니다.
Linux에서는 Deadline, CFQ, NOOP을 지원하는데, SSD의 경우는 특별한 Scheduling을 없이 I/O 요청이 들어오는 대로 동작을 수행하는 NOOP을 사용하는 것이 성능 향상에 도움이 됩니다.
SSD의 I/O Scheduler를 변경하려면 Terminal에서 다음과 같이 입력합니다. (SSD의 Device가 /dev/sda일 경우의 예)
1 2 3 | $ sudo vi /etc/rc.local echo noop > /sys/block/sda/queue/scheduler |
NOTE: 자세한 성능 Benchmark를 확인하려면 Ubuntu Precise Pangolin 12.04를 설치한 후 해야 할 것들의 Block Device Scheduler 설정을 참고하기 바랍니다.
4. System의 여유 Memory가 충분할 경우
이번 항목에서는 System의 여유 Memory가 충분한 경우(여유 Memory가 4GB 이상?)에 SSD의 안정성과 System의 성능을 높일 수 있는 방법을 소개합니다.
4.1. No Swap
Linux의 Swap Partition은 System의 가용 Memory가 부족할 경우에 Page Swapping을 위해서 사용됩니다.
여러 Service를 운영하는 경우라면 가용 Memory에 대한 대비를 해야 하기에 Swap Partition을 사용하는 것이 맞지만, 개인적으로 사용하는 Server나 일반 Desktop 용도로 사용하는 경우라면 Swap Partition이 없이도 System을 사용하는데 문제가 없습니다.
게다가 SSD에 Ubuntu가 설치된 경우라면, Swap Partition이 존재하지 않을 경우에 Swapping으로 인한 I/O가 발생하지 않기 때문에 SSD에 대한 Write 동작을 줄여 수명을 늘릴 수 있습니다.
이번 항목에서는 Swap Partition 없이 설치하는 방법과 기존에 Swap Partition을 제거하는 방법, 그리고 Swap이 필요한 경우가 되었을 때 Swap을 추가하는 방법 등에 대해서 알아봅니다.
NOTE: 과거에는 Hibernation(절전 기능)을 위해서 Swap Partition을 사용했었지만, 최신의 Ubuntu에서는 Swap Partition이 없이도 Hibernation이 제대로 동작합니다. (Precise Pangolin 12.04 이상에서 Test됨)
4.1.1. Swap Partition을 만들지 않고 Ubuntu 설치하기
Swap Partition을 설치 시에 기본적으로 생성하는 것이 관례지만, SSD에 Ubuntu를 설치할 경우에는 Swap Partition 없이 설치하는 것이 좋습니다.
Quantal Quetzal 12.10 Desktop Edition을 예로 들면, Installation Type에서 Something Else를 Check하고 Continue를 누릅니다.
Partition 편집 화면이 표시되는 여기서 위와 같이 Swap Partition 없이 Partition을 구성하고 Install Now를 누릅니다.
위의 그림과 같이 Swap Partition이 없는 것에 대한 경고 Message에서 Continue를 눌러 계속 설치하면, Swap Partition 없이 Ubuntu를 설치하게 됩니다.
4.1.2. Swap Partition 삭제
SSD에 Ubuntu를 설치할 때 Swap Partition을 생성하여 설치했다면, Ubuntu CD를 이용하여 Swap Partition을 제거하고, 추가로 확보된 공간을 기존 Partition에 추가할 수 있습니다.
WARNING: 이 작업은 Partition을 편집하기 때문에 Data의 Loss가 발생할 수도 있습니다. 실행 시 유의하기 바랍니다.
Ubuntu Quantal Quetzal 12.10을 예로 들면, 설치 화면에서 Ubuntu 체험하기를 누릅니다.
Dash의 검색창에 gparted를 입력하고 GParted Partition Editor를 Click합니다.
gParted가 실행되면 위의 그림과 유사할 것입니다. SSD의 Partitioin 중의 Swap Partition을 Mouse 오른쪽 Button으로 선택한 후, Swapoff를 Click하여 Swap을 해제합니다.
다시 Swap Partition을 Mouse 오른쪽 Button으로 선택한 후, Delete를 눌러 Partition을 삭제합니다.
그리고 Swap Partition의 공간이 여유 공간이 되었으므로, OS가 설치된 Partition (위의 그림에서는 XFS Partition)에 추가하기 위해서 해당 Partition을 Mouse 오른쪽 Button으로 선택한 다음 Resize를 Click합니다.
Dialog에서 화살표와 같이 이동하여 여유 공간을 포함시킨 후, Resize를 누릅니다.
마지막으로, 지금까지의 변경을 실제로 SSD에 적용하기 위해 위의 그림과 같이 Apply Button을 누릅니다.
실제로 적용할 지 확인하는 Message가 표시된다면 적용을 위해 Apply를 누릅니다.
제대로 Apply 되었다면 위의 그림과 같이 됩니다. 하지만, gParted의 기능이 완전하지는 않기 때문에 중간에 문제가 발생할 수 있습니다.
제 경우에는 Resize를 위해 XFS Partition을 복구하는 부분에서 문제가 발생하더군요. XFS Partition을 Resize하는 경우라면 Terminal을 열어서 다음과 같이 입력한 후 다시 적용하면 됩니다. (XFS Partition이 /dev/sda3일 경우의 예)
1 | $ sudo xfs_repair -L /dev/sda3 |
마지막으로 Rebooting하여 CD가 아닌 SSD에 설치된 Ubuntu로 Booting한 다음, 아래와 같이 /etc/fstab에서 Swap Partition에 대한 내용을 삭제하면 Swap Partition 삭제가 모두 완료됩니다.
1 2 3 4 5 | $ sudo vi /etc/fstab # swap was on /dev/sda2 during installation UUID=12345678-1234-1234-1234-123456789012 none swap sw 0 0 (이 내용을 삭제한 후 저장) |
4.1.3. Swap File을 사용하여 Swap을 추가하는 방법
위에서 설정한 것과 같이 Swap Partition을 삭제하거나 아예 만들지 않은 경우에도 Swap 공간이 필요한 경우가 생길 수 있습니다.
이 때는 Swap Partition을 다시 새로 만드는 것보다 Swap File을 사용하는 것이 추가 및 삭제가 용이하고, 크기도 쉽게 변경할 수 있기 때문에 더 편리합니다.2
Swap File을 생성하기 위해서는 다음과 같이 입력합니다. (512MiB 크기의 Swap File을 생성하는 경우의 예)
1 2 3 4 | $ sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288 $ sudo chmod 600 /mnt/512MiB.swap $ sudo mkswap /mnt/512MiB.swap $ sudo swapon /mnt/512MiB.swap |
위의 명령에서 첫번째 dd 명령은 Swap을 위해 사용할 File을 생성하는 명령입니다. 512MiB보다 큰 Swap File을 생성하려면 count 다음에 Byte단위로 크기를 입력해야 합니다.
mkswap은 생성한 File을 Swap File로 만드는 명령이고, swapon은 이 Swap File을 Swap 공간으로 사용하도록 설정합니다.
Gnome System Monitor(시스템 감시)로 확인해 보면, 위의 그림과 같이 512MiB 만큼의 Swap이 설정되어 있는 것을 확인할 수 있습니다.
생성한 Swap File을 Rebooting 시에도 계속 사용하고 싶다면 아래와 같이 입력하면 됩니다. (위에서 생성한 512MiB.swap을 사용하는 경우의 예)
1 2 3 | $ sudo vi /etc/fstab /mnt/512MiB.swap none swap sw 0 0 |
그리고 사용하고 있는 Swap File을 제거하고 싶다면, 다음과 같이 입력하면 됩니다.
1 2 3 4 5 6 | $ sudo swapoff /mnt/512MiB.swap $ sudo rm -f /mnt/512MiB.swap $ sudo vi /etc/fstab /mnt/512MiB.swap none swap sw 0 0 (이 내용을 삭제 후 저장) |
4.2. Kernel Option 설정
여유 Memory가 충분하다면, Kernel이 Swap을 가급적 사용하지 않도록 설정하고 VFS Caching을 통해 I/O의 반응성을 높이도록 설정할 수 있습니다. 다음과 같이 Terminal에서 입력합니다.
1 2 3 4 5 6 | $ sudo vi /etc/sysctl.d/60-swap.conf vm.swappiness = 1 vm.vfs_cache_pressure = 50 $ sudo service procps start |
NOTE: VFS Caching에 대한 자세한 내용과 Benchmark 정보는 Ubuntu Precise Pangolin 12.04를 설치한 후 해야 할 것들의 VFS Caching 설정에서 확인할 수 있습니다.
4.3. /tmp to RAM
과거의 DOS 시절에 System의 성능을 높이기 위해서 RAM Drive를 사용한 것과 유사한 방법으로, 임시적으로 사용하는 File뜰이 모여있는 /tmp를 Ram에 저장하여 System의 성능을 높이고 SSD에 불필요한 I/O를 줄여 수명을 늘릴 수 있습니다.
설정을 위해서는 Terminal에서 다음과 같이 입력합니다.
1 2 3 4 | $ sudo vi /etc/fstab # Move /tmp to RAM tmpfs /tmp tmpfs defaults,nosuid 0 0 |
저장한 후, Rebooting하면 /tmp의 모든 내용은 RAM에 저장됩니다. 그리고 /tmp의 크기는 실제 RAM의 절반 정도의 크기가 설정됩니다. 물론 그 정도 까지 사용 가능하다는 이야기고 실제로 그 만큼 Memory를 차지하고 있는 것은 아닙니다.
그리고 당연한 이야기지만, /tmp에 저장된 내용은 Rebooting하면 모두 사라집니다.
4.3.1. RAM에 Browser Cache를 저장하는 방법
Ram에 저장하는 /tmp를 이용하는 방법 중 하나는, 빈번한 쓰기 동작이 일어나는 Web Browser Cache를 /tmp에 저장하는 것입니다.
Cache를 RAM에 저장하면, Caching된 Web Page의 Rendering Speed가 증가하기 때문에 훨씬 쾌적하게 Web Surfing을 즐길 수 있습니다.
각 Browser마다 Cache Directory가 다르기 때문에, Firefox와 Chrome의 경우에 맞춰서 설정하는 방법을 적어 봅니다. (bar라는 Group에 속한 foo 계정을 위한 Browser Cache Directory를 설정하는 예)
NOTE: 한 번이라도 Browser를 실행한 적이 있어야 Cache Directory를 제대로 설정할 수 있습니다.
- Firefox의 경우:1
2
3
4
5
6$ sudo vi /etc/rc.local
# Browser cache dir
mkdir /tmp/foo/ffcache -p
chown foo:bar /tmp/foo -R
chmod 700 /tmp/foo -R최신의 Firefox에서는 다음과 같이 설정합니다.
1
2
3$ cd ~/.cache/mozilla/firefox/*.default/
$ rm -rf Cache
$ ln -sf /tmp/foo/ffcache Cache위의 Directory가 존재하지 않는 이전 Firefox version이라면 아래와 같이 진행합니다.
1
2
3$ cd ~/.mozilla/firefox/*.default/
$ rm -rf Cache
$ ln -sf /tmp/foo/ffcache Cache - Chrome의 경우:1
2
3
4
5
6$ sudo vi /etc/rc.local
# Browser cache dir
mkdir /tmp/foo/crcache -p
chown foo:bar /tmp/foo -R
chmod 700 /tmp/foo -R최신의 Chrome에서는 아래와 같이 입력합니다.
1
2$ rm -rf ~/.cache/google-chrome/Default
$ ln -sf /tmp/foo/crcache ~/.cache/google-chrome/Default위의 Directory가 존재하지 않는다면, 다음과 같이 입력합니다.
1
2$ rm -rf ~/.cache/google-chrome
$ ln -sf /tmp/foo/crcache ~/.cache/google-chrome
5. System에 HDD가 추가로 존재하는 경우
대부분의 경우, SSD의 용량이 한정되어 있고 쓰기 횟수의 한계가 있기 때문에 OS는 SSD에, 그리고 그 외의 Data는 다른 대용량의 HDD에 저장하고 있을 것입니다.
간단한 Tip이지만, System에 새로운 계정을 만들고 GNOME Session을 실행하면 자동으로 생기는 Default Directory에 다른 HDD의 Directory를 Symbolic Link로 연결하여 사용하면 SSD에 대한 쓰기 동작을 가급적 줄일 수 있으며 GNOME 환경 사용 시에도 편리합니다.
ko_KR.UTF-8 Locale이라면, 다음과 같이 입력하면 됩니다. (HDD가 /media/data에 Mount되어 있을 경우의 예)
1 2 3 4 5 6 | $ rm -rf ~/다운로드 ~/사진 ~/음악 ~/비디오 ~/문서 $ ln -sf /media/data/Downloads ~/다운로드 $ ln -sf /media/data/Pictures ~/사진 $ ln -sf /media/data/Music ~/음악 $ ln -sf /media/data/Movies ~/비디오 $ ln -sf /media/data/Documents ~/문서 |
Changelog
References
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea.
관련링크
- http://ioriy2k.pe.kr/archives/7062 1172회 연결
댓글목록
등록된 댓글이 없습니다.