본문 바로가기

기술

(32)
리눅스 Linux) Migration Types of page (page type) Migration Types of page (=page type) 메모리를 연속적인 페이지 (페이지 블록) 단위로 나눔 첫 3bit로 각 페이지 블록의 migration type 표현 페이지 블록마다 4bit 비트맵으로 migration 속성 표현 같은 속성의 페이지를 가능한 그룹화하여 연속된 메모리의 단편화 억제 free_area[order].free_list[migration type] 메모리가 migration type 별로 1개 이상의 페이지 블록을 확보하지 못하는 시스템은 모든 페이지를 unmovable로 구성한다. MIGRATE_UNMOVABLE 메모리 내에서 위치가 변경 X, migration X ⇒ 커널에서 할당한 페이지, 슬랩, IO 버퍼, 커널 스택, 페이지 테이블 등 MIGRATE_M..
리눅스 Linux) Linux's Transparent Huge Page (THP) Linux's Transparent Huge Page (THP) 연속적인 메모리(page)가 사용가능해지면 page fault 발생 시 huge page 를 할당한다. 연속적인 메모리 사용이 불가능하면 base page를 huge page로 promotion 한다. 연속적이지 않을 경우 memory compaction을 수행하기도 한다. fragmentation이 심한 경우 백그라운드에서 promotion을 수행한다. (khugepaged) 이때 가장 먼저 온 프로세스부터 프로세스 내의 모든 huge page promotion을 한다. (First Come First Service) CPU는 virtual address로 메모리 request를 한다. MMU (Memory Management Unit)는..
리눅스 Linux) Linux kernel physical memory allocator : 버디 (Buddy) 메모리 할당자의 개념, 메모리 할당 및 해제 프로세스, 구조 Linux kernel physical memory allocator : 버디 (Buddy) 메모리 할당자 Introduction 리눅스 커널은 phyical memory를 page 단위(보통 4KB)로 관리한다. 사이즈가 고정된 page 단위의 메모리 할당 및 해제는 메모리 fragmentation을 유발한다. fragmentation 문제를 줄이기 위해 Linux에서는 Buddy 메모리 할당 및 해제 알고리즘을 사용한다. Buddy buddy란 연속적인 page (block) 단위로 메모리 관리가 가능하다. 즉, 연속적인 page 관리를 위한 메모리 할당/해제 알고리즘 buddy: 물리적 메모리 상에서 해당 page에 인접한 page들을 의미한다. struct free_area free_list : ..
리눅스Linux) cgroups 개념, 특징, 기능, 계층 구조, 실습 예시 Notion에서 보기 cgroups란? control groups 프로세스들의 자원 사용을 제한하고 격리시키는 리눅스 커널 모듈 하나 또는 복수의 장치를 묶어서 하나의 그룹을 만들 수 있으며 개별 그룹은 시스템에서 설정한 값만큼 하드웨어를 사용할 수 있다. ** 설정한 값 ex) 어떤 그룹이 CPU를 더 많이 차지할 것인가? 어떤 그룹이 얼만큼의 메모리를 사용할 수 있는가? 각 그룹에 네트워크 우선순위를 어떻게 줄 것인가? 시스템의 프로세스들은 장치별로 특정한 cgroup에 속하여 프로세스가 사용하는 하드웨어 자원의 총량에 제한을 받는다. 시스템에 설치된 cgroup 목록 확인하기 /sys/fs/cgroup/ $ ls /sys/fs/cgroup 프로세스별 cgroup 정보 확인하기 $ ls /proc//..
리눅스 Linux) ftrace 개념, 기능, 특징, 사용 방법 Notion에서 보기 ftrace란? 커널이 호출하는 함수를 추적할 수 있는 기능 활성화 시키는 방법mount -t debugfs nodev /sys/kernel/debug debugfs 파일 시스템을 /sys/kernel/debug에 마운트 시키기 : 1. 주요 기능 dynamic kernel function tracing : stack usage, call graph, counting, filter latency tracing : interrupts, wake-up static trace points를 사용한 event tracing : scheduling, interrupts, file systems, virtual guest connections 2. 특징 리눅스 커널 2.6.27에서 메인라인에 ..
mongoose로 서버와 데이터베이스 연결하기 (+ dotenv), 스키마 와 모델 생성하기 mongoose mongoose는 Node.js 환경에서 사용하는 MongoDB 기반 ODM(Object Data Modeling) 라이브러리입니다. 이 라이브러리는 데이터베이스 문서들을 자바스크립트 객체처럼 사용할 수 있게 해줍니다. (리액트를 다루는 기술 _p.643) 1. mongoose, dotenv 설치하기 프로젝트 디렉토리, package.json 파일이 있는 디렉터리에서 다음 명령어를 입력하여 mongoose와 dotenv를 설치합니다. $ npm install mongoose dotenv 2. 환경변수 설정하기 dotenv 환경변수들을 파일에 넣고 사용할 수 있게 해주는 개발 도구 mongoose를 사용하면서 개발 환경에 따라 달라질 수 있는 데이터를 코드안에 하드코딩하지 않고 환경변수로 ..
Mac에서 Homebrew를 이용해서 mongoDB 설치 Mac에서 Homebrew를 이용해서 mongoDB 설치 남들은 쉽게 되는 것 같은데 나는 왜 오류가 나서ㅠㅠ 한참 삽질하다가 성공했다. ㅠㅠ 이것저것해보다가 나는 이 방법이 통했는데 이게 정석인지는 전혀 모르겠다. 1. brew를 이용해서 mongodb 설치 $ brew update $ brew tap mongodb/brew $ brew install mongodb-community@4.2 2. 환경변수 설정 .zsh를 사용하는 경우 .zshrc $ echo 'export PATH="/usr/local/opt/mongodb-community@4.2/bin:$PATH"' >> ~/.zshrc $ source ~/.zshrc 3. db 파일 만들기 $ cd [db 디렉토리 저장할 디렉토리] $ mkdir ..
윈도우에 도커 데스크탑 (Docker Desktop) 설치하기 도커를 본격적으로 사용하거나 공부한 적이 없어서 체계적인 글은 아닙니다. 프론트엔더로 인턴을 하면서 백엔드 개발자 분께 완성된 백엔드 서버를 로컬로 전달받는 과정에서 도커를 처음 사욯보았습니다. '다양한 모듈의 버전 충돌 문제를 해결하고 배포 과정을 효율적으로 만들어주는 컨테이너' 라는 아아아주 기본적인 개념만 알고 있었기 때문에 빠르게 일처리를 할 수 없었습니다. 급하게라고 도커 데스크탑을 윈도우에 설치하고, 도커 이미지를 받아 사용해보았습니다. 지금 담당하게 된 프로젝트를 진행하면서 도커 이미지를 받아 로컬에 백엔드 서버를 띄우는 작업을 계속 해야할 것 같아 그 과정을 까먹지 않으려 기록해 둡니다. 그래서 틀린 내용이 있을 수 있고, 각 과정에 대한 자세한 설명은 부족할 수도 있습니다. 설치 환경 운..