아놔... 포스팅 하려고 챙겨논 삼성 FIT Plus 메모리가 보이지 않는다. 어디 뒀는지도 모르겠다... 아구구.. 해당 포스트는 진행도 못하고, 다음에 쓰려했던 PCIe NVME를 먼저 진행하게 되었다.
필자가 라즈베리파이5에서 가장 기대하던게 이 PCIe 기능인데, 여러 방법으로 사용할 수 있겠지만, 현재로서 가장 활용하기 좋은 방법은 NVME를 이용하여 SSD를 부착, 동작속도와 빌드속도를 끌어올려, 그나마 서브 데스크톱이나 간단 빌드용으로 사용하는 것이다.
1. 라즈베리파이의 사용성 극대화를 위한 선택
1.1. 라즈베리파이 살때, 가능하면 메모리 큰 녀석으로 구매할 것.
라즈베리파이는 추가적으로 메모리 증설이 안되므로, 메모리가 큰 녀석을 구매하면 빌드할 때, 별도의 스왑메모리를 설정하지 않아도 된다. 필자경험으로 OpenCV의 경우 8GByte에서 별도의 Swap메모리를 설정하지 않았었다.
1.2. 메모리가 큰 라즈베리파이를 샀다면, 64비트 운영체제를 사용할 것
메모리가 큰 라즈베리파이를 샀다면, 해당 모든 메모리를 사용하기 위해서는 반드시 64비트 운영체제를 설치해야 된다. 32비트로 사용할 수 있는 최대 메모리 크기는 4GByte도 되지 않는다.
1.3. 라즈베리파이에서 NVME를 사용할 수 있다면 당연히 NVME를 사용할 것.
앞서 게시물에서 MicroSD, USB를 언급했었다.
1) MicroSD 메모리 구매가이드 : https://makeutil.tistory.com/254
2) USB 메모리 스틱 구매가이드 : https://makeutil.tistory.com/255
MicroSD 이던, USB이던 테스트 결과를 보면 그 나름데로에서도 동작속도가 차이가 난다. 동일한 인터페이스 디바이스라 해도, 최대 성능은 하드웨어 측면이 높을 수 있고, 각 미디어의 부가 성능에 따라서 시스템 동작속도나 빌드속도가 차이가 난다는 것이다. 따라서 동일한 미디어를 사용할 경우 당연히 고급형 미디어가 동작속도에 영향을 미치기는 하지만 월등한 정도는 아니다. USB의 경우 조금 차이가 많이 나긴한다. 그러나 SSD를 쓸때는 또 다른 이야기다. 무슨 뜻이냐면, 앞서 언급했던 내용이다. USB 3.0의 경우 최대 5Gbps의 속도를 가진다. 그럼 5Gbps의 속도는 Byte로 계산하면 얼마인지 알아보자.
단순계산으로 해도 5Gbps = 5000Mbps = 625MBps (5000M bit /8 bit)이다. SD 카드의 경우 시퀀셜일때 읽기는 100MB/s 정도였고 쓰기는 훨씬 느렸다. USB메모리에서도 그리 빠른 속도가 나지 않았다는 것을 알수있다. 따라서, 하드웨어는 지원하지만 미디어가 지원하지 못하기 때문에 속도가 느리다. 그러나 SSD들은 대부분 200MB/s 이상을 지원한다. 쓰기조차 엄청 빠르다. 따라서 USB 3.0 외장 케이스를 쓴 SSD를 사용하는것이 USB를 사용하는것보다 훨씬 좋은 성능을 낼 수 있다. 왜냐면 USB 3.0 하드웨어는 자신의 스펙에 최대한 맞춰서 능력을 제공해주고, USB 3.0 외장하도드 최대한 스펙에 맞춰서 통신할 가능성이 높기 때문이다. 그래서 필자의 예전 포스트를 보면 안드로이드를 USB 3.0 메모리나 USB 3.0 외장하드에 설치하여 구동하였다. 특히 외장하드 쪽이 훨씬 빠를 수 밖에 없다. (물론 Extreme Pro USB 3.1의 경우 일부 외장하드 보다 빠를 수 있다.)
라즈베리파이를 쓸때 가장 속도가 유익한 순서로 정리하면 다음과 같다.
PCIe NVME > USB 3.x SSD > USB Memory > Micro SD |
자 그러면, 이제 구매부터 하나씩 정리해보도록 하자.
2. 작업 준비하기
2.1. 준비물들
1) 라즈베리파이5
이건 당연히 있어야 되고.
2) 라즈베리파이 NVME Kit (PCIe to NVME변환보드 및 케이블 일체)
알리에서 구매할 때 주의하는게 좋다. NVME 길이에 따라 선택지가 여러개 있는데 리뷰를 잘보고 높은쪽을 고르는게 유익하다. 필자는 Waveshare 제품을 구매했다. NVME 길이 제한은 있어도, 중간에 있는 에어홀이라던지 이런 부분들이 맘에 들었고, 필자는 짧은 SSD를 몇개 가지고 있어서... 어.. 가격이 좀 내린거 같은데..
3) NVME SSD
그리고 사용할 NVME 가 필요한데. 필자가 구매한 보드는 2242까지 지원이 가능하다. 그리고 노트북에서 추출한 NVME는 다음과 같다. 뭐야, 만오천원 밖에 안하는...
4) MicroSD 카드
라즈베리파이5는 기본적으로 부트에서 MicroSD와 USB는 찾아서 부팅을 시도하지만, PCIe는 별도로 부팅 시퀀스가 없다. 따라서 부트 옵션을 수정해 주어야 한다.
5) 외장 NVME SSD 케이스
NVME를 PC에 이동식 장치로 연결하기 위해서 사용한다. 필자의 추천은 Orico 제품을 추천하고 가장 문안한 제품은 다음과 같다. 동일 회사 제품의 전면 알루미늄 제품도 가지고 있는데 가성비가 떨어지니 아래의 제품을 추천한다. 해다 케이스에 커버를 열고 SSD를 넣은다음 PC에 연결해서 라즈베리파이 OS를 설치하는데 사용된다.
6) USB to UART TTL
USB UART TTL 케이블이 있으면, 설정이후 최초 동작 상태를 확인할 수 있다. 라즈베리파이의 핀 678에 TTL 장치의 GND, RX, TX를 순서대로 연결하고 PC에서 터미널을 이용하면 부팅하면서 터미널 메시지를 통해 동작상태를 확인할 수 있다고 한다. 필자는 귀찮아서 그냥 진행했는데, 아마도 필요하면 라즈베리파이 등에서 미리 UART에 대한 설정등을 미리 해야될수도 있겠다고 생각해봤다.
예를들면 아래와 같이 말이다.
필자는 사정상 그냥 진행하였다.
2.2. 장치 준비하기
1) MicroSD 카드에 라즈베리파이 OS 기록
NVME를 사용하려면, 라즈베리파이 OS를 한번 부팅하여 NVME부트가 가능하도록 설정하여야 한다. 따라서 준비한 MicroSD에 라즈베리파이 OS를 설치한다. 최신버전으로 말이다.
2) 확장모듈(HAT) 결합
구매한 확장모듈에 NVME SSD를 붙이고 라즈베리파이에 확장모듈을 붙인다. 그리고 라즈베리파이 뒷편의 PCIE 와 NVME 모듈의 PCIE를 플렉시블 케이블로 연결해주면 준비가 완료된다. 모듈이 여러 형태가 될수 있으므로, 필자가 준비한 모듈을 결합한 최종 준비상태는 아래의 사진과 같다.
필자의 경우 주의할 점은 다음과 같은 사항 밖에 없었다.
3. MVME에 운영체제 설치
3.1. 라즈베리파이 부팅 (NVME 설정)
위와 같이 최종 구성된 상태에서 준비된 MicroSD를 이용해 부팅한다.
3.1.1. 시스템 업데이트 및 업그레이드
네트워크까지 연결하고 최신 상태로 업데이트 및 업그레이드를 진행한다.
1) 시스템 업데이트
아래의 명령으로 시스템 업데이트를 한다. 이를 진행하려면 당연히 인터넷에 연결 가능한 상태여야 한다.
pi@raspberrypi:~ $ sudo apt update pi@raspberrypi:~ $ sudo apt upgrade |
2) 업데이트 완료 확인
업데이트를 아래와 같이 정상적으로 완료 되어야겠다.
3.1.2. NVME 동작확인을 위한 PCIe 활성화
NVME가 정상적인지 확인하기 위해서는 테스트를 진행해야 된다. 그러려면 우선 시스템에서 PCIe를 활성화 해야되는데 라즈베리파이 컨트롤 메뉴에는 포함되어있지 않으니, 설정파일을 직접 수정해야 된다. 기본 에디터인 nano를 이용하거나 별도로 vim등을 설치하여 텍스트를 수정한다.
pi@raspberrypi:~ $ sudo nano /boot/firmware/config.txt 또는 pi@raspberrypi:~ $ sudo vim /boot/firmware/config.txt |
아래와 같이 dtparam=pciex1 또는 상황에 따라 pciex1_gen=3를 설정할 수 있다. 필자도 gen3라고 굳이 표기가능하다고하니 혹시나해서 해봤지만, 딱히 차이는 없었다.그냥 pciex1으로 설정하면 될 것 같다.
1) pciex1으로 설정한 경우
2) 혹시나해서 gen3로 설정한 경우
물론 설정에 따른 성능의 차이는 거의 없었다... 아니 동일하다고 봐도된다.
3.1.3. NVME 인식확인
라즈베리파이에서 NVME는 PCIe에 기반되므로 lspci 명령을 통해서 아래와 같이 확인할 수 있다.
1) PCIe 정보확인
lspci 명령을 실행했을 때, 아래와 같이 PCI Bridge정보와 Non-volatile 메모리 컨트롤러 항목에서 연결한 SSD가 확인되면 정상적으로 시스템에서 동작한다고 할 수 있다.
pi@raspberrypi:~ $ lspci |
아래의 결과를 보면
2) 파티션 정보 확인
기존 다른 운영체제에서 파티션이 만들어졌는지, 그리고 시스템에 마운트 되었는지 확인할 수 있다. 정상적인 경우라면 아래와 같이 nvme0n1이 표시된다.
이 장치 파일명은 법칙에 따라서 생성될 수 있는데 예측하기로는 nvme{숫자1}n{숫자2}p{숫자3} 형태로 표시되므로 아마 동일한 PCIe 버스에 연결되는 장치라면 neme{숫자1}, 다른 버스에 연결된 상태라면 숫자{2}가 변경되어 표시될 것이고 p뒤의 숫자는 해당 SSD에서 나눈 파티션의 번호가 표시될것 같다. 나중에 용돈 많이 생기면 PC에 몇개 달아서 확인해 보도록 하겠다. 용돈이 생기면... 말이다.
아래의 결과에서 확인가능한 사항은 nvme0가 연결되어있고, 파티션 1개로 238GByte짜리가 달려있구나 정도이다.
3.1.4. 테스트를 위한 포맷 (필요시 진행)
부팅용으로 쓰려면 굳이 하지 않아도 된다. 이 부분은 NVME에서 읽고 쓰기를 테스트하기 위해서 하는 작업이므로, 굳이 진행하지 않아도 된다. 그래도 해보고 싶다면 진행하자.
1) fdisk를 이용하여 nvme를 설정
2) p를 입력해서 파티션 정보확인
확인결과 윈도우에서 포맷한거임(HPFS/NTFS/exFAT) 이라고 표시된다.
3) dd를 눌러 파티션 삭제
4) n을눌러 파티션 생성 시작
5) p를 눌러 주파티션으로 생성
6) 번호는 첫번째니까 1, 용량은 디폴트로 엔터를 입력하여 전체 선택
7) 윈도우에서 포맷했으니 NTFS 시그니처 지우는지 물어보면 Y
8) p를 눌러서 파티션 잡힌거 확인
9) w를 눌러서 저장
3.1.5. NVME 포맷 (필요시 진행)
파티션은 앞서 fdisk로 잡았고, 이제 잡힌 파티션을 포맷한다. 리눅스에서 사용해야되므로 ext4로 포맷하면된다.
1) lsblk 를통해 정보확인
2) mkfs.ext4를 사용하여 nvme0n1p1을 포맷
3.1.6. 포맷된 NVME 연결 (필요시 진행)
홈디렉터리에 아무 디렉터리나 만들고 mount 명령을 이용하여 장치를 리눅스 시스템에 연결해 보자.
3.1.7. 읽기 쓰기 테스트 (필요시 진행)
마운트가 되었다면 읽고 쓰기 테스트를 진행할 수 있다.
1) 필자의 NVME 재원확인
PCIe3.0x4 (32GT/s), 성능 순차읽기 2,400MB/s, 순차쓰기 950MB/s 그런데, 앞서 언급했듯, 라즈베리파이가 PCIe 2 x 1 Lane이면, 최대 5GBps정도밖에 되지 않는다. 그러므로 실제 우리가 라즈베리파이에서 사용할 땐 성능이 훨씬 낮아지게 될것이다. USB 3.0 스펙과 동일하므로 말이다. 그래도 쓰기속도에서는 분명 상대적으로 유리하고 발열 면에서도 조금더 유리하니까...
2) 쓰기 테스트
기록 테스트는 앞서 MicroSD와 동일한 방법으로 진행하면된다.
pi@raspberrypi:~ $ time sudo dd if=/dev/zero of=./test.dat bs=4M count=1000; sync |
아래의 결과를 보면 9초 걸렸다고 나오지만, Sync 끝나기까지를 계산하면 14.5초 정도 소요되었다. 따라서 계산해보면 대략 4194304000/14.5 = 289,262,344/s, 약 290MB/s 정도가 될것 같다.
3) 읽기 테스트
쓰기는 /dev/null로 dd를 사용하면된다. /dev/numm은 사실상 메모리이므로, 지연시간이 거의 없어 별도로 계산하지 않아도 될것 같다. 따라서 아래의 데이터를 그대로 보자면 약 1900MB/s이다. 역시 읽기 속도는 엄청나게 빠르다. 그러나 PCIe Gen2x1Lane 스펙보다 높은걸봐서, 이걸 그대로 믿기는 좀 그렇고, 별도의 데이터 파일을 만들어서 테스트를 하는 것이 좋을 것 같다.
필요에 의해서 별도의 파일을 생성했다. 기존 테스트파일을 여러번 중첩시켜서 파일 크기를 키운다음 테스트를 진행하자. 일단 필자는 10배 이상의 파일을 생각하고 있으니, 대략 40~50GByte 파일을 생성하여 테스트를 진행할 것이다. 어쩌다보니 55GB의 파일을 생성했고, 해당파일을 날려보니 대략 480MB/s가 나왔다. 그래 이게 정상이지...
결론적으로, 읽기 480/s 쓰기 290MB/s 의 저장장치를 라즈베리파이 5에 연결한 셈이된다. 어쨋든 USB메모리보다 유리하니까... 괜찮다. 그리고 의외로 가격도 싸고... 후..
3.1.8. 부트 시퀀스 변경하기
1) 부트 시퀀스를 변경하기 위한 명령
부트 시퀀스를 변경하자. 부트 시퀀스 파일을 변경하려면, 다음의 명령을 입력한다.
pi@raspberrypi:~ $ sudo rpi-eeprom-config --edit |
2) 수정할 내용
실행되면, nano를 통해 설정파일이 열린다. 저장하고 나가면 시스템에 바로 적용되니 주의한다. 아래의 BOOT_ORDER에서 0xf41을 0xf416으로 수정한다.
다라서 부트 설정은 아래의 표를 참조한다. 결국 USB, MicroSD, NVMe 순으로 부팅 시퀀스가 설정된다.
저장하고 나가면, 자동으로 아래의 스크립트가 실행되면서 eeporm의 부트 시퀀스 정보를 변경한다.
이제 시스템 이미지를 만들어 부팅하면된다. 만약, 업데이트 이후 부트를 확인하고 싶으면, 준비했던 USB to TTL 포트를 라즈베리에 연결하고 터미널 프로그램을 실행시켜둔 다음 리부팅을 진행하면된다. 필자는 그냥 패스 한다. 마지막으로 NvMe에 라즈베리파이 OS를 준비하면된다.
3.2. NVME 라즈베리파이 OS 준비
라즈베리파이에 운영체제를 설치하는 가장 단순한 방법은 NVME를 NVME USB 케이스에 연결하여 이동식 저장장치로 만든후 Rasberry Pi Imager에서 이미지를 기록하는 것이다. 그래서 앞서 인식 까지 되면 굳이 테스트는 할 필요없고 확인 되었으면 이미지릴 기록하면 된다고 한 것이다.
3.2.1. 외장 케이스를 열고 NVME를 설치한다음 PC에 연결
외장케이스 커버를 열고 NVME를 설치한다음 PC에 연결한다. 필자는 3개를 쓰고 있어서 그중 가장 만만한 녀석 하나를 비우고 이용했다. 없는 상태에서 구매하려면 조금 아깝긴 하겠지만, 어쩌다보면 NVME SSD는 하나씩 생길수 있으니 하나 사두고 쓰더라도 크게 무리는 없는 정도의 제품을 추천 드렸다.
3.2.1. 외장케이스에 연결한 NVME를 선택
3.3.2. 운영체제 선택
라즈베리파이 운영체제고 64비트 선택후 기록한다.
3.2.3. 기록완료 확인
다음과 같이 표시되면 모든 준비가 끝나게 된 것이다.
4. 결과 확인
결과를 확인해보자. 정상적으로 부팅됨을 확인할 수 있다.
4.1. 정상부팅 확인
아래와 같이 정상적으로 구동되는 것을 알수 있다. 이 NVME를 시용했을 때, 전원인가부터 윈도우까지 부팅 시간은 20초 정도 소요되었다.
4.2. 저장공간 용량확인
파일 탐색기를 보면 전체크기 234GByte임을 확인할 수 있다. 정상적으로 사용이 가능한 상태가 된 것이다.
사실 내용은 별것 없다. 그냥 NVME에 외장 케이스 이용해서 라즈베리파이 OS설치하고, MicroSD로 부팅후 부트 시퀀스를 바꾸어주는 것이 모두이다. 가격도 저렴하니 USB보다는 NVME를 추천할 수 밖에없다. 휴...
생각보다 작성하는데 오래걸렸다. 그렇게 시간을 들인만큰 필요한 독자에게 도움이 되었으면 한다.
최근댓글