쿠...sal

[컴][OS] OS tutorial

os operating system / 운영체제 만들기  /


OS 만들기 tutorial

  1. GitHub - cfenollosa/os-tutorial: How to create an OS from scratch

[컴] cpu가 그래픽처리를 위해 GPU를 사용하는 과정



그래픽카드와 함께 CPU 가 좋아야 하는 이유

내용에 틀린부분이 있을 수 있다. 그러니 의심이 가면 관련 부분을 찾아보기 바란다.

일단 단순하게 표현하면, 던전으로 들어가기 전과 후의 장면은 크게 달라진다. 그런데 캐릭터가 던전으로 들어갔는지, 아니면 그 앞까지 왔는지를 결정하는 것은 graphic 부분이 아닌 다른 code 부분이다. GPU 가 graphic 부분의 일을 처리하겠지만, 그 이외의 logic 을 계산하는 것은 cpu 이다. 그러므로 cpu 가 느리다면, 결국 gpu 가 아무리 빨라도 끊김(흔히 버벅임)을 방지하기는 어렵다.


cpu가 그래픽처리를 위해 GPU를 사용하는 과정

The_CUDA_Handbook.pdf 에서 좋은 설명을 확인할 수 있다. 여기선 일부를 정리해 놓았다.

cpu 와 bus

현재까지 보드의 south bridge가 대부분의 주변기기들을 담당하고, north bridge 가 memory controller 를 가지고 있다. 그래서 이 north bridge 의 memory controller 를 이용해서 cpu 는 memory 와 통신한다.(이 통신이 이뤄지는 interface 가 front-side bus 이다.)

그리고 north bridge 는 gpu 와 PCI Express interface 를 이용해서 통신한다.(물론 pci express 이전에는 AGP 같은 것이 있었다.)

gpu 안에는 gpu memory controller 가 들어가 있다. 그래서 이 memory controller 를 통해 gpu memory 와 통신한다.


이러다가 cpu 가 memory controller 를 내장했다.(AMD의 Opteron 과 Intel의 Nehalem (i7) ) 그래서 north bridge 없이 바로 memory 와 통신하게 된다.

그리고 I/O Hub 를 통해 PCI express interface 를 사용해서 GPU 에 접근한다.

이 상황에서 cpu 를 여러개 사용하기 위해 cpu 간의 통신이 필요했다.(Multiple CPUs (NUMA)) 그래서 생긴것이 HyperTransport (HT) / QuickPath Interconnect (QPI) 이다. 이 interface 로 cpu core 끼리의 통신과 cpu 와 I/O hub 와의 통신을 하게 된다.

인텔의 Sandy Bridge 부터 I/O hub 를 cpu 안에 내장하게 된다. 즉 PCI express 를 내장하게 된 것이다.



CPU/GPU 연동

The_CUDA_Handbook.pdf 의 2.5 부분의 내용이다.

GPU 는 직접적으로 page-lock 된 CPU memory 에 DMA 를 통해 접근할 수 있다.

Page-locking 은 주변 하드웨어가 CPU Memory 에 직접적으로 접근할 수 있도록 해주기 위해 OS가 사용하는 기능이다.

locked page 들은 OS 에 의해 퇴출(eviction) 에 적합하지 않다고 표시된 상태이다. 그래서 device driver들은 이 주변기기들이 메모리에 직접적으로 접근하기 위해 페이지들의 물리적인 주소들을 이용하라고 프로그램할 수 있다.

CPU 는 여전히 불확실한 상태에서 memory 에 접근할 수 있다. 그러나 메모리는 옮겨지거나, disk 로 paged out 되지 않는다.

DMA 는 GPU 가 CPU memory 를 "cpu 의 실행"에 대해 독립적으로 그리고 병력적으로 read/write 할 수 있게 해줬다. 다만 여기선 race condition 들을 피하기 위해 CPU 와 GPU 사이의 싱크를 맞추는 것을 고려해야 한다.
  • Pinned host memory(pinned buffer): GPU 가 직접 접근할 수 있는 CPU memory 부분
  • Command buffers: GPU 실행을 통제하기 위해 CUDA driver 에 의해 write되고, GPU에 의해 read 되는 buffer. 

pinned buffer

pinned buffer 는 direct access 를 위해 GUP 에 의해 mapping 된다. CUDA 에서는 API cudaMallocHost() 를 통해 allocate 할 수 있다.

pinned buffer 가 주로 사용되는 방법중 하나는 GPU 에 command 를 보내는 용도이다. CPU 가 command 를 buffer 에 write 하고, 동시에 이것을 GPU 가 이전에 write된 command 를 read 하고 execute 한다.

이 buffer 의 앞부분(leading edge) 에 CPU 가 command 를 write 한다. 그래서 GPU 가 이때는 이 녀석을 읽을 수 없다.

GPU 는 buffer 의 끝부분(trailing edge) 에서부터 command 를 읽어드려서 실행한다.

이 command buffer 는 circular queue 라고 보면 된다. 그래서 한번 command 처리를 다한 부분은 다시 CPU 가 command 를 write 하기 위해 사용된다.

cpu-bound / gpu-bound

이 상황에서 2가지 case 가 있는데 CPU-bound 와 GPU-bound 다. bound 는 "경계" 의 뜻이니, CPU bound 는 CPU 가 경계가 되는 경우라고 보면 되고, GPU-bound 는 GPU 가 경계가 되는 것으로 보면 된다.
  • 하나는 CPU 의 command 를 write  < GPU 의 처리 속도(CPU-bound)
  • 하나는 CPU 의 command 를 write  > GPU 의 처리 속도(GPU-bound)


References

[컴][웹] 파이어폭스 검색엔진 추가하기

firefox search engine 추가하기 /


파이어폭스 검색엔진 추가하기

firefox search engine 추가 관련 xml spec.



이 방법은 add-on 을 이용해 바로 firefox 에 search engine 을 추가해 주고 싶을 때 사용하는 방법이다.

xml 을 firefox 에서 인식하는 법



여기에 이 xml 을 어떻게 install 하는지를 알려준다.


web 에서 바로 search engine 추가하기

위에서 만든 xml 의 내용을 아래 web page 에서 바로 입력해서 web page 를 통해 바로 firefox 에 search engine 을 추가할 수 있다.

[컴][웹] StackOverflow 의 architecture

stack overflow architecture / programming stack / 스택오버플로우 구조 / 구성 /  하드웨어 구성


2018년 기준, StackOverflow 의 architecture


자세한 내용은 위 link 를 참고하자. 여기는 대략적인 내용만 적어놓는다.

H/W 구성

  • 9 Web server : ram 64GB
  • 4 Sql server : 2개의 cluster
    • Stack Overflow 용 : RAM 1.5GB / DB size 2.8TB
    • Stack Exchange, Careers, Meta 용: RAM 768GB, DB size 3.9TB
  • 2 Redis server : 
    • RAM 256GB
    • master-slave
  • 3 Tag engine servers
  • 3 ElasticSearch Server : 
    • RAM 196GB
    • load balanced
  • 2 HAProxy Servers
    • 1 live / 1 failover
  • 최고 초당 15,000 의 connection 처리

Programming Stack

  • C#
  • ASP.NET MVC
  • Dapper ORM
  • StackExchange.Redis
  • DotNetOpenAuth
  • MiniProfiler
  • Jil

[컴] 외국회사 Mock Interview

구글 인터뷰 예 / 구글 인터뷰 동영상 녹화


외국회사 Mock Interview

이 인터뷰는 mock interview 라고 한다. 아마 실제처럼 인터뷰를 진행하고 녹화한듯 하다. 그래서 정확히 그 회사의 인터뷰라고 할 수는 없겠지만, 어떤 식으로 인터뷰를 진행하는지에 대해 느껴볼 수 있을 것이다.


[웹][컴] Firefox Gecko View

겍코뷰 / gecko view 사용법 /

Gecko View

Firefox Focus 라는 모바일 app 이 있다. 처음에 Firefox 라는 이름에 Firefox app 에서 처럼 Gecko engine 을 사용하고 옵션만 바꿔 놓은줄 알았는데, WebView 를 사용했다고 한다.[ref. 1]

그런데 이번 release (2018. 10. 2) 에서는 Gecko 를 사용할것이라 한다.

WebView 의 한계

WebView 는 우리가 pc에서 쓰는 브라우저의 모든 기능을 제공하고 있지 않다. Web standard 의 일부만 지원한다. 그래서 실제로 완전한 browser 를 만들기에는 한계가 있다고 한다.
Foremost, it isn’t designed for building browsers. Despite being based on Chromium, WebView only supports a subset of web standards, as Google expects app developers to use native Android APIs, and not the Web, for advanced functionality.[ref. 1]
이런 이유로 Gecko engine 을 사용하려고 한다고 한다.

Gecko View

그런데 Gecko 는 WebView 처럼 다른 app 에서 사용할 수 있는 형태가 아니다. 그래서 이것을 WebView 처럼 여러곳에서 재사용할 수 있게 만들었는 데 이것이 Gecko View 이다.

현재 용량이 WebView(4MB) 보다 훨씬 큰 38MB(Gecko View) 정도라고 한다. 물론 계속 용량을 줄이고 있다고 한다. (참고: GeckoView in Firefox Focus)

Gecko View 의 사용법은 ref. 1에 일부 언급이 있다. 참고하자.



References


  1. Firefox Focus with GeckoView - Mozilla Hacks - the Web developer blog