HAM 여행



오늘은 라즈베리파이에서 사용하는 SD카드는 어떤것이 좋은지 이야기 하려고 합니다.

라즈베리파이 P3 의 CPU 속도는 1.2GHz 입니다. 즉 1200MHz 라는 이야기죠

CPU가 하는일중 메모리에서 데이타(프로그램, 설정화일 기타 등등...)를 읽어 오기도 하고 쓰기도 합니다.

만약 CPU가 메모리에서 데이타를 읽어오는데 1시간이 걸린다고 가정하면 CPU는 1시간동안 별 할일 없이 놀고 있다가

1시간중 단 1초만 데이타를 가져 올것 입니다.(가져오는데 걸리는 시간은 1시간 이지만 가져온 시간은 1초라는 이야기 입니다.)

여기서 1시간이 걸리는 이유는 메모리의 속도가 느려서 그렇습니다.

반대의 경우를 생각해 보겠습니다.

만약 CPU가 메모리에서 데이타를 읽어오는데 1초가 걸린다고 가정하면 CPU는 1시간동안 데이타를 3,600번 가져 옵니다.


메모리 속도가 빠르다는것은 구입 비용이 더 들어갑니다.

그러나 라즈베리파이 입장에서보면 속도가 빠르면 많은 데이타를, 프로그램 실행 속도가 빠릅니다.


1차선 도로에 시속 10KM 로 가는 차가 있습니다. 차는 계속 들어오고 있습니다.

서울서 부산까지 간다고 하면 서울에서 부산까지 도로에 시속 10KM 로 가는 차가 줄을 서서 가고 있겠지요.

그러나 시속 100KM 로 가는 차라고 생각해보십시요. 조금전 상황하고는 아주 많이 다르겠지요.


가장 좋은 선택은 CPU 속도와 같은 메모리를 사용하는것이 좋습니다.

그러나 그런 메모리는 없습니다. 있다고 해도 가격이 아주 많이 비싸겠지요.

집에서 사용하는 PC(데스크탑)도 라즈베리파이 하고 똑 같습니다.


저는 SDHC Extreme Class 10 읽기/쓰기 속도 90MB/s 를 사용합니다.

보통사용하는 CLASS 10 읽기/쓰기 속도 10MB/s 하고는 단순비교만해도 9배 빠릅니다.

그러나 PC에서 사용하는 메모리(RAM)보다는 아주 느립니다.


SD카드에 대하여 이야기 했습니다.

여러분이 어떤것을 사용 할지는 여러분의 선택 입니다.

그리고 SD카드가 RAM으로 사용하지는 않습니다(특별한 경우는 그렇지 않습니다.)

그러나 똑같은 라즈베리파이 P3 그리고 프로그램 을 사용하고도 내가 사용하는 라즈베리파이는

열도 많이나고 속도도 느리고 기타 등등.... 뭔가 이상할때 한번쯤 라즈베리파이에 대하여 생각해

보는것도 좋을것 같습니다.


감사합니다.


PS: 라즈베리파이 P3 RAM 은 DDR2 900MHz를 사용합니다.




DE HL1RR 73!


 

글로벌스피드 https://smartstore.naver.com/globalspeed

오늘은 CPU가 어떻게 일을 하는지 보겠습니다.

CPU가 하는일을 요약하면


Fetch(인출) : 메모리상의 프로그램 카운터가 가리키는 명령어를 CPU로 인출하여 적재

Decode(해석) : 명령어의 해석. 이 단계에서 명령어의 종류와 타겟 등을 판단한다

Execute(실행) : 해석된 명령어에 따라 데이터에 대한 연산을 수행한다.

Writeback(쓰기) : 명령어대로 처리 완료된 데이터를 메모리에 기록한다.


참고로 CPU는 한 싸이클에 한 명령어(우리가 알고 있는 ls, cd 등과 같은 명령어 와는 다름)를 처리 합니다.


즉 다음과 같이 일을 한다.

Fetch: 실행할 명령어들을 가져온다. 이후 단계들도 그렇지만, 한 번에 보통 4개 정도를 처리하는데, Superscalar라고 불리는 기술은 이렇게 한 사이클에 여러 명령어를 처리하는 것을 말한다.


Decode: 이후 처리를 돕기 위해 명령어의 종류를 구분한다. Intel의 x86 ISA같이 복잡한 명령어를 쓰는 CISC의 경우, 내부적으로 RISC 명령어들로 쪼개지는 과정이 여기서 수행된다. 옛날 프로그램을 짜기 어려웠던 이유는 바로 이 디코드 동작시 불러오는 CPU 명령함수들이 CPU마다 전부 다 다르다는 것 때문이었다. 현재는 몇 개 회사가 CPU 공급을 독점하면서 그나마 단순화되었다. (같은 회사는 추가 기능이 없다면 같은 명령함수를 쓰는 게 일반적)


Rename: 명령어가 가리키는 레지스터(CPU에서 값을 저장하는 x86 ISA의 eax나 ebx등의 이름있는 공간들)를, 내부에 숨어있는 물리적 레지스터로 매핑한다. 이러한 과정은 Out-of-order CPU에서 발생하는 False-dependency 문제를 해결하기 위해 필수적이다.



Dispatch: 명령어가 실행하기 위해 기다리는 대기열 (ROB, IQ, LSQ)에 명령어를 넣는다.


Issue: 대기열에 있는 명령어가 실행될 수 있으면 실행하기 위한 장치(가령 계산 명령어는 ALU, 메모리 명령어는 Cache)로 보낸다. 참고로 프로그램에서 시간상 뒤의 명령어가 앞의 명령어보다 먼저 Issue될 수 있다. 이것이 바로 Out-of-order CPU의 핵심 동작 중 하나다


Execute: 실행한다


Writeback: 결과값을 레지스터에 써야 한다면 쓴다. 결과값을 기다리고 있던 명령어가 있다면 결과가 생겼다고 알려준다.


Commit: 명령어 수행을 완료하고, 명령어 실행을 위해 할당받은 자원을 모두 토해(반납)낸다. 명령어의 실행 결과를 사용자에게 노출시키며 (이거 전에는 노출이 안 된다), 이후로는 명령어의 실행을 취소 할 수 없다.



그리고 Out-of-order CPU를 만들기 위해선, 위의 명령어 처리 과정 외에도 몇몇 핵심 기술들이 요구된다.


Cache (캐시 메모리): 주 메모리 값을 임시 저장하는 작고 빠른 메모리. 주 메모리 접근은 CPU입장에서 100사이클 정도 놀게 만드는 엄청나게 느린 동작이므로 Cache가 없으면 명령어를 빠르게 실행하고 싶어도 값이 준비가 안 돼서 불가능하다. 캐시 메모리도 한 개만 존재하는 것이 아니라, 보통 중요도와 접근 빈도에 따라 L1~L3의 3개 캐시 메모리를 사용하며, 숫자가 작을수록 용량이 더 작고, 더 빠르다. 또한 캐시 메모리만을 위한 색인 제조 방법과 구동방식은 해당 문서에서 확인 바람.


Branch prediction: Fetch를 매 사이클마다 하기 위해선 다음에 실행할 명령어 주소를 알아야 하는데, branch 명령의 결과가 나오려면 꽤나 시간이 걸린다 (게다가 프로그램마다 차이는 있지만, 명령어의 약 30%정도는 branch이다.) 그러니 branch 명령의 결과를 과거의 기록을 기반으로 예측하는 기술이 필요하다.


Speculative memory disambiguation: 메모리 접근 명령어들은 메모리 접근 전에 접근할 메모리 주소를 먼저 구해야 한다. 이 때문에 만약 LSQ에 Store 명령이 접근할 메모리 주소를 계산하기 위해 대기중이면, 이후 모든 Load 명령어는 접근할 메모리 주소가 준비되었다 하더라도 메모리 접근을 할 수 없다. 혹시라도 그 Store가 접근하는 주소가 Load가 접근하는 주소랑 같으면 가장 신선한 값은 메모리가 아니라 그 Store 명령어가 가지고 있기 때문이다.하지만 할 수 없는 걸 그냥 해버리면? (즉, Speculative memory disambiguation) 대부분의 경우 접근하는 메모리 주소는 다르기 때문에 문제가 없으며, 문제가 있더라도 그 Store가 접근하는 메모리 주소를 계산하기 전까진 Load들을 Commit을 하지 않는 것으로 실행 취소가 가능하다.


오늘 이야기는 조금 어려운 이야기가 되었습니다.

그러나 Linux(라즈베리파이)를 사용하면서 CPU가 어떤 과정을 거쳐서 일을 하는지는 감으로나마 알고 있는것이

필요하지 않을까하여 몇자 적었습니다.


프로그래밍이란것이 그리고 소프트웨어가 얼마나 잘 만들어 졌고 잘 돌아가고 얼마나 가벼운지는 CPU가

어떻게 일을 하는지를 모르면 설명하는데 한계가 있는것 같습니다.

CPU가 하는 일 중에서 일부분을 설명했습니다.

다음은 CPU의 명령체계와 레지스터리에 대한것을 설명 할까 합니다.


감사합니다.


DE HL1RR 73!


글로벌스피드 https://smartstore.naver.com/globalspeed





오늘은 라즈베리파이(Linux OS) 성능에 대하여 간단히 설명하고자 합니다.

여러분 모두 잘 알고 계신 내용을 모르고 계신분을 위하여 설명합니다.

라즈베리파이의 성능은 크게 2가지로 구분 합니다.

[1] 라즈베리파이 하드웨어에 대한 성능과

[2] 라즈베리파이 에서 구동되는 프로그램(소프트웨어)로 구분합니다.


[1]번은 어떤것을 선택하느냐에 따라 정해 집니다.

즉 라즈베리파이 P2, 라즈베리파이 P3 등과같이 정해 집니다.

여기서는 라즈베리파이 소프트웨어에 대하여 성능을 평가하는 법을 간단히 설명합니다.

라즈베리파이의 소프트웨어는 OS와 응용프로그램(예:DV4mini 등)으로 구분합니다.

사용하고 계신 라즈베리파이의 현재 소프트웨어 성능을 보기 위하여는

$top <엔터> 하시면 위에 사진과 같은 화면이 나옵니다.

이것은 top 화면이라고 합니다.

여기서 빠져 나오려면 q 를 누르면 빠려 나옵니다.


top 화면에서 표시하는 정보는 그 순간의 정보를 표시 합니다.

top 화면을 10 여초 정도 보고 판단하시면 됩니다.

1번은 현재 프로그램이 돌아가려고 하는것의 total 입니다. 이 화면에서는 155개 입니다.

2번은 CPU 가 얼마나 일하고 있는가를 표시 합니다. 이 화면에서는 1.5% 입니다.

3번은 현재 프로그램이 돌아가고 있는 것의 total 입니다. 이 화면에서는 1개 입니다.

4번은 CPU 가 쉬고 있는(일 안하고 있는) 것을 표시 합니다. 이 화면에서는 97.3% 입니다.

5번은 Swap 을 얼마나 사용하고 있는가를 표시 합니다. 이 화면에서는 0 입니다.


이제부터 내가 사용하고 있는 라즈베리파이(소프트웨어)의 성능을 설명하겠습니다.

3번 숫자가 크고(and), 4번 숫자가 크고(and), 5번 숫자가 0 일수록 라즈베리파이에서 돌아가는 소프트웨어가

좋다고 말할수 있습니다.

즉 3번 숫자가 크다는것은 프로그램이 많이 돌아가고 있다는것이고,

4번 숫자가 크다는것은 CPU 가 일할것이 별로 없다는 것이고,

반대로 숫자가 적다는 것은 CPU 가 일을 많이해서 쉴 틈이 없다는 뜻으로 성능 면에서는 별로 좋다고 할수

없습니다.

5번 숫자가 의미 하는 것은 CPU(OS)가 일하면서 필요한 정보를 별도의 기억장소(장치)에 저장했다가

다시 불려와 사용합니다. 이때 사용하는 기억장소(장치)를 Linux 에서는 Swap 영역이라고 합니다.

그러므로 5번 숫자가 0 이란것은 CPU 가 Swap 영역을 사용하지 않고 있다는 것으로 좋다고 할수 있습니다.

Swap 영역을 자주 사용하면 사용한 많큼 CPU 속도가 떨어 집니다.즉 CPU가 단위 시간내 일한것이 적다는

뜻으로 좋지 않습니다.


보통은 3번 숫자가 늘어나면 4번 숫자는 줄어 듭니다.

여기서 CPU가 일할수 있는 용량(?)을 100%로 보고  2번 줄(칸)에 있는 숫자 모두를 더하면 100%가 됩니다.


CPU는 시간을 나눠서 일을 합니다.

즉 CPU 가 해야하는 일이 10분 동안 10개가 있다고 하면 1번 1분, 2번 1분, 3번 1분 .........이렇게 시간을

할당하여 일을 합니다.(통상적으로)

물론 여기서 2번은 2분, 1번은 30초 이렇게 정할수도 있습니다.

 

감사합니다.


DE HL1RR 73!

글로벌스피드 https://smartstore.naver.com/globalspeed