요새는 컴퓨터 사용시간의 대부분을 웹 브라우져로 해결하게 되는 경우가 많다.

일반 웹페이지 브라우징 뿐 아니고 메일도 gmail을 사용하고 심지어는 워드나 엑셀 작업까지도 구글 document로 할 수 있기 때문에 아마 개별 프로그램 사용시간을 따져보면 웹브라우져 사용시간이 50%를 넘을 확률이 크다.

그렇기 때문에 충분한 램을 가지고 있는 경우 브라우져 캐쉬를 램디스크로 옮겨 놓으면 상당한 속도 향상을 얻을 수 있게 된다.

먼저 램디스크를 만들어 줘야 한다. 이전 글에서도 맥에서 사용할 수 있는 램디스크를 소개한적이 있었는데 이번에는 Espérance DV 를 사용한다. 프로그램을 다운받아 압축을 풀어보면 아래와 같이 3개의 파일이 들어있다.

Espérance.jpg

설치하는 방법은 Assistant.app를 실행해 주거나 아니면 EsperanceDV.prefPane를 직접 /Library/PreferencePanes/ 또는 ~/Library/PreferencePanes/에 넣어주면 된다.

설치가 끝난 다음 System Preferences를 열어보면 Esperance DV가 추가된 걸 볼 수 있다.

System Preferences.jpg

Esperance DV를 선택해서 설정을 변경해준다.


Esperance1.jpg

기본적으로 Capacity만 설정해 주면 된다. 처음에는 만들어 진 램디스크가 없으니까 Eject 버튼이 Create로 되어 있다. 이 버튼을 눌러주면 램디스크가 만들어지고 Eject로 바뀌게 된다.

'Create on opening session'를 체크해주면 로그인할때마다 자동으로 램디스크가 만들어진다.

사파리 사용자는 Various Options 부분에 있는 체크박스를 선택해주면 자동으로 사파리 캐쉬가 램디스크로 옮겨지게 된다.

Firefox 사용자는 터미널을 열어주고 아래 명령을 입력해주면 된다.

% rm -r ~/Library/Caches/Firefox

% mkdir /Volumes/RamDisk/Firefox

% ln -s /Volumes/RamDisk/Firefox ~/Library/Caches/Firefox

이렇게 해 주면 브라우져가 램디스크를 캐쉬로 사용하기 때문에 페이지를 열 때 마다 매번 디스크를 억세스 할 필요가 없어지기 때문에 상당히 가볍게 움직이는걸 느낄 수 있을 것이다.


* 추가
위의 명령을 사용하면 컴퓨터를 껐다가 다시 켜는 경우 램디스크 내용을 저장했다 다시 restore하지 않으면 램디스크에 Firefox 디렉토리가 없어지기 때문에 매번 디렉토리를 만들어 줘야 한다. 좀 더 간단하게 하려면 다음과 같이 해 주면 된다.

% rm -r ~/Library/Caches/Firefox

% ln -s /Volumes/RamDisk ~/Library/Caches/Firefox

이렇게 해 주면 매번 Firefox 디렉토리를 만들어 줄 필요가 없어진다.



Reference: Faster browsing with RAM disks

Posted by nautes

댓글을 달아 주세요

  1. 2008.12.02 08:20

    엑스피 윈도우에서는 브라우징 빨리 할수는 없냐요?

  2. 2008.12.02 09:45 신고

    윈도우에서도 동일하게 램 디스크 만들어주고 브라우져 캐쉬 폴더를 램디스크로 옮겨주면 됩니다.
    IE6에서는 아마도 Options->General 탭에서 바꿔줄 수 있고 Firefox에서는 about:config로 가서 browser.cache.disk.parent_directory 를 만들어주고 여기 값을 설정해주면 됩니다.

    언제 시간나면 윈도우에서 하는 법도 쉽고 자세하게 정리해 보겠습니다.

  3. 2009.03.11 16:14

    안녕하세요,
    램디스크를 써보려고 블로그를 보고 똑같이 따라해봤는데요- 램디스크를 실행시키지 않고 파폭을 열면 파폭이 아예 실행이 안되더라구요. 그리구 파폭이 저절로 램캐싱을 지원한다고 해서(단, 설정을 해주면) 그때마다 램디스크 실행시키기도 귀찮고해서 언인스톨하려하는데요, 구글링해봐도 어떻게 해야 좋을지 몰라 문의드립니다. 도움 부탁드립니다-

    • 2009.03.13 08:04 신고

      EsperanceDV를 설치하신거라면 설치된 위치(/Library/PreferencePanes/ 또는 ~/Library/PreferencePanes/)에서 EsperanceDV.prefPane 파일을 제거해주면 램디스크는 제거됩니다.

      그리고 터미널에서 'rm ~/Library/Caches/Firefox' 을 입력해 주면 됩니다.

리눅스 커널 2.4 이후 버젼의 리눅스를 사용하고 있으면 이미 램디스크 지원이 내장되어 있다. 확인하고 싶으면 다음의 명령어를 사용하면 된다.

$ dmesg | grep RAMDISK
RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize

CentOS나 RHEL인 경우 위와 같은 출력이 나오고 다른 리눅스 배포판인 경우도 유사한 결과가 나온다. 아래 명령어로 만들어 져 있는 램 디스크를 볼 수 있다.

$ ls -l /dev/ram*
lrwxrwxrwx 1 root root 4 Apr 24 12:05 /dev/ram -> ram1
brw-rw---- 1 root disk 1, 0 Apr 24 12:05 /dev/ram0
brw-rw---- 1 root disk 1, 1 Apr 24 12:05 /dev/ram1
brw-rw---- 1 root disk 1, 10 Apr 24 12:05 /dev/ram10
brw-rw---- 1 root disk 1, 11 Apr 24 12:05 /dev/ram11
brw-rw---- 1 root disk 1, 12 Apr 24 12:05 /dev/ram12
brw-rw---- 1 root disk 1, 13 Apr 24 12:05 /dev/ram13
brw-rw---- 1 root disk 1, 14 Apr 24 12:05 /dev/ram14
brw-rw---- 1 root disk 1, 15 Apr 24 12:05 /dev/ram15
brw-rw---- 1 root disk 1, 2 Apr 24 12:05 /dev/ram2
brw-rw---- 1 root disk 1, 3 Apr 24 12:05 /dev/ram3
brw-rw---- 1 root disk 1, 4 Apr 24 12:05 /dev/ram4
brw-rw---- 1 root disk 1, 5 Apr 24 12:05 /dev/ram5
brw-rw---- 1 root disk 1, 6 Apr 24 12:05 /dev/ram6
brw-rw---- 1 root disk 1, 7 Apr 24 12:05 /dev/ram7
brw-rw---- 1 root disk 1, 8 Apr 24 12:05 /dev/ram8
brw-rw---- 1 root disk 1, 9 Apr 24 12:05 /dev/ram9
lrwxrwxrwx 1 root root 4 Apr 24 12:05 /dev/ramdisk -> ram0

결과에 나온 모든 램 디스크 크기는 동일하다. 위의 예제에서는 모두 16MB이다. 이걸 128MB까지 사용할 수 있게 변경해 보겠다. 단 여기서는 사용할 수 있게 해 주는거지 실제로 128B를 할당해주는게 아니다. 후에 드라이브중 하나를 포맷해 줌으로서 실제 영역을 할당해주게 된다. 램디스크 용량은 1024의 배수로 지정해 줘야 하기 때문에 128MB인 경우 131072K가 된다.

에디터를 사용해 /etc/grub.conf 파일을 열어보면 아래와 같은 라인을 찾을 수 있을 것이다.

kernel /vmlinuz-2.6.9-42.0.10.EL ro root=/dev/VolGroup00/LogVol00

이 라인의 뒤쪽 부분에 ramdisk_size=131072를 추가해주면 된다.

kernel /vmlinuz-2.6.9-42.0.10.EL ro root=/dev/VolGroup00/LogVol00 ramdisk_size=131072

변경된 파일을 저장하고 에디터를 종료한다. 이 시점에서 램디스크 용량을 변경했지만 변경된 내용을 적용하려면 시스템을 리부트 시켜줘야 한다. 시스템이 리부트되고 나서 나머지 설정을 해 주면 된다.

$ mke2fs -m 0 /dev/ram0

위의 명령을 사용해서 ram0 램디스크를 사용할 수 있게 포맷 해 준다. 이 과정에서 커널이 메모리에 램디스크를 위한 용량을 할당해주게 된다. 포맷이 끝나면 램디스크를 마운트 시켜주면 된다.

$ mkdir /mnt/rd
$ mount /dev/ram0 /mnt/rd

이제 램디스크를 사용할 수 있다. 이렇게 만들어 진 램디스크를 특정 사용자가 사용할 수 있게 해 주려면 chown 명령을 사용해서 오너를 변경해주면 된다.

$ chown testuser.testuser /mnt/rd

mount명령을 사용하면 램디스크가 /mnt/rd에 마운트 된 걸 볼 수 있다.

$ mount
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda2 on /home type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/ram0 on /mnt/rd type ext2 (rw)

주의할것은 램디스크이기 때문에 여기에 저장된 내용은 시스템을 리부팅하면 모두 지워지게 된다는 것이다. 단 램디스크를 언마운트 했다가 다시 마운트 하는 경우에는 램디스크 내용이 그대로 살아있다.

시스템이 부팅할 때 마다 자동으로 램디스크를 만들도록 설정하고 싶으면 아래의 내용을 /etc/rc.local 파일에 추가해주면 된다.

mke2fs -m 0 /dev/ram0
mount /dev/ram0 /mnt/rd
chown testuser.testuser /mnt/rd

---
Mac OS X에서는 아래의 명령으로 50MB 크기의 램디스크를 만들어 줄 수 있다. 여기서 램디스크의 용량은 바이트로 지정해 줘야 한다. (예: 50MB인 경우 50*1024*1024 = 52428800)

$ hdid -nomount ram://52428800
$ newfs_hfs /dev/disk1
$ mkdir /tmp/ramdisk1
$ mount -t hfs /dev/disk1 /tmp/ramdisk1

만들어 진 램디스크를 언마운트 하려면 다음의 명령을 사용하면 된다.
$ hdiutil detach /dev/disk1

또한 이런 명령어를 직접 사용하지 않고 쉽게 램디스크를 만들어 줄 수 있는 GUI 유틸리티도 있다.

사용자 삽입 이미지
MakeRAMDisk : http://boredzo.org/make-ram-disk/

소스코드까지 공개되어 있는 무료 유틸리티로 OS X 10.4 이상에서 동작한다.
이 프로그램을 실행시키면 자동으로 64MB의 램디스크가 만들어진다. 사이즈를 변경하고 싶으면 프로그램을 실행할 때 Option키를 누른 상태에서 실행하면 위의 화면이 나와서 크기를 변경해 줄 수 있다.
만들어 진 램디스크를 없애려면 CD를 추출하는것과 마찮가지로 램디스크 아이콘을 휴지통에 버려주면 된다.
Posted by nautes

댓글을 달아 주세요

최근의 비디오카드는 엄청난 양의 비디오램(보통 256~512MB)을 가지고 있다. 하지만 그 중 대부분은 최신 3D 게임같은것을 하지 않는다면 사용되지 않는다. 리눅스에서 이 비디오램을 스왑 파티션 또는 램디스크로 사용할 수 있다. 리눅스에서 놀고 있는 비디오카드의 메모리를 램디스크 또는 스왑으로 사용하면 엄청난 성능 향상이 가능해진다.

커널 준비하기

그래팩카드의 메모리를 사용하려면 그 메모리 영역이 커널에 매핑되어야만 한다. 기본적으로 시스템 메모리만 사용할 수 있는 램으로 인식되기 때문에 PCI 주소 영역(address space)의 메모리를 사용하려면 사용하고자 하는 메모리를 커널에 등록해 줄 수 있는 드라이버가 필요하다. 2.6 커널에 이 역할을 수행해주는 MTD(Memory Technology Device) 지원 드라이버가 포함되었다. 리눅스의 menuconfig를 실행해서 MTD 기능을 활성화 시켜줘야 한다. 커널에 포함된 (built-in) 드라이버로 하건 모듈로 컴파일하건 관계 없이 동작한다.

사용자 삽입 이미지

비디오 메모리 주소 확인

커널을 다시 만들어 준 다음에는 PCI 영역에서 비디오 메모리 주소를 찾아내야 한다. 가장 쉬운 방법은 lspci를 사용하는 것이다.

$ lspci -vvv

0000:02:00.0 VGA compatible controller: ATI Technologies Inc R300 AD [Radeon 9500 Pro] (prog-if 00 [VGA])

Subsystem: PC Partner Limited: Unknown device 7c07

Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping+ SERR- FastB2B-

Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-

Latency: 32 (2000ns min), cache line size 08

Interrupt: pin A routed to IRQ 255

Region 0: Memory at d8000000 (32-bit, prefetchable) [size=128M]

Region 1: I/O ports at b000 [size=256]

Region 2: Memory at e9000000 (32-bit, non-prefetchable) [size=64K]

Expansion ROM at e8000000 [disabled] [size=128K]

Capabilities: [58] AGP version 3.0

Status: RQ=256 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3+ Rate=x4,x8

Command: RQ=1 ArqSz=0 Cal=0 SBA+ AGP- GART64- 64bit- FW- Rate=<none>

Capabilities: [50] Power Management version 2

Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)

Status: D0 PME-Enable- DSel=0 DScale=0 PME-


이 중에 필요한 정보는 prefetchable memory region인 Region 0이다. 이 영역의 시작 주소는 0xd8000000 이다.

* 위의 화면은 예제이다. 실제로 컴퓨터의 메모리 영역의 시작번지는 다를 수 있기 때문에 꼭 확인해 줘야 한다.

메모리 매핑하기

실제로 PCI 영역의 메모리를 억세스하려면 MTD드라이버에게 해당 영역의 시작과 끝 주소를 알려줘야만 한다. 끝 주소를 계산하는 법은 간단하다. 단순히 어느정도의 메모리를 사용할지 결정하면 된다. 하지만 비디오카드가 원래 목적의 기본동작을 위해 얼마간의 메모리 영역은 남겨둬야 한다.

만일 SLRAM 드라이버를 모듈로 컴파일 했다고 하면 다음 명령을 실행해주면 된다.

# Region 0 starts at 0xd8000000, leave 4 MB ram for the VGA, so add 4*1024*1024 to it

# which is 0x00400000 in hex, 32 bit. This means: 0xd8400000 will be the starting position.

# Now, to use the other 124 MB, the easiest way is to tell the offset value.

# The third parameter's leading + means that we are telling the offset,

# not the actual region's ending address. 124 MB is 0x7c00000 in hex, 32 bit.

modprobe slram map=VRAM,0xd8400000,+0x7c00000


PHRAM 드라이버를 모듈로 컴파일 한 경우는 다음의 명령을 사용한다.

# Loading with PHRAM module is very similar to SLRAM module, except that it uses a "length"

# parameter by default rather than an "end offset".

# This does the same thing as the SLRAM module above

modprobe phram phram=VRAM,0xd8400000,0x7c00000

# This is also the same (and easier to read)

modprobe phram phram=VRAM,0xd8400000,124Mi


커널에 포함된 드라이버로 컴파일 한 경우 커널 커맨드 라인에 아래를 추가해주면 된다.

# Now the first parameter is the device which will be mapped.

# Other parameters share the same meaning shown above, in the module version.

# Please reboot your computer, to take it effect.

slram=mtd0,0xd8400000,+0x7c00000


제대로 설정이 되었는지 dmesg를 사용해서 확인할 수 있다.

slram: devname = mtd0

slram: devstart = 0xd8400000

slram: devlength = +0x7c00000

slram: devname=mtd0, devstart=0xd8400000, devlength=0x7c00000

slram: Registered device mtd0 from 3543040KiB to 3670016KiB

slram: Mapped from 0xe0880000 to 0xe8480000


또는 좀 더 확실히 하고 싶으면 /proc/mtd 파일을 보면 된다.

dev: size erasesize name

mtd0: 07c00000 00004000 "mtd0"


MTD 디바이스 만들기

커널이 MTD를 지원하도록 설정하고 나면 메모리를 억세스 할 방법이 있어야 한다. 즉 디바이스를 만들어 줘야 할 차례이다. 다음의 명령을 사용하면 된다.

$ modprobe mtdchar ("Direct char device access to MTD devices" 가 모듈로 컴파일 된 경우만 필요, 커널 built-in인 경우 사용하면 안된다.)

$ mknod /dev/mtd0 c 90 0

$ modprobe mtdblock ("Caching block device access to MTD devices" 가 모듈로 컴파일 된 경우만 필요, 커널 built-in인 경우 사용하면 안된다.)

$ mknod /dev/mtdblock0 b 31 0

사용하기

이제 비디오카드의 메모리를 램디스크나 스왑파티션으로 사용할 수 있다. 어느 경우로 사용하건 비디오램에 파일 시스템을 만들어 줘야 한다.

* 스왑 파티션으로 사용하기

스왑파티션으로 사용하려면 다음의 명령을 사용하면 된다.

$ mkswap /dev/mtdblock0

$ swapon /dev/mtdblock0

위의 명령을 실행하면 비디오카드의 메모리에 스왑 파일 시스템을 만들고 그 파티션을 활성화 시키게 된다. 스왑 파티션을 여러개 지정한 경우 어느 스왑 파티션을 먼저 사용할 지 우선권(priority) 지정하려면 swapon에 '-p X' 스위치를 사용하면 된다. 여기서 X는 0부터 32767 사이의 정수로 숫자가 클수록 우선권이 높다.

$ swapon /dev/mtdblock0 -p 10

우선권을 지정하지 않으면 현재 사용되는 스왑파티션의 우선권보다 낮은 값이 할당되게 된다. 또한 이 명령을 사용하면 fstab에도 반영되기 때문에 매번 부팅할 때 마다 다시 수동으로 추가해 줄 필요는 없다.

위의 명령을 실행한 후의 /etc/fstab의 내용이다.

$ <fs> <mountpoint> <type> <opts> <dump/pass>

/dev/mtdblock0 none swap sw,pri=10


* 램디스크로 사용하기

램디스크로 사용하려면 비디오램에 다음의 명령으로 파일시스템을 만들어 주면 된다.

$ mkfs.ext2 /dev/mtdblock0

이렇게 만들어 준 다음 리눅스 파일 시스템의 원하는 위치에 마운트 시켜 주면 된다.


* Michał SchulzGentoo Wiki의 문서를 정리, 번역한 글이다. 원문은 각각의 링크를 누르면 볼 수 있다.

Posted by nautes

댓글을 달아 주세요

  1. 2008.07.06 19:03

    오오... 무시무시한 방법이네요.

  2. 2008.07.24 15:16

    이거 진짜 짱인데요..;;

  3. 2009.04.08 18:47

    좋은 정보 감사합니다. 소중히 담아갈께요.

  4. 2012.04.12 23:12

    멋져요!.
    제 블러그에도 퍼갈께요~.
    당연히 출쳐 남겨요.

  5. 2012.11.02 17:04 신고

    slram에 대해 찾다가 왔네요. 좋은 정보감사드립니다!

이전버튼 1 이전버튼