Linux Kernel

    NUMA BALANCING

    NUMA BALANCING

    NUMA BALANCING에 대해 정리해보고자 합니다. NUMA BALANCING에 대한 설정은 kernel 분석 시 Configure로 설정할 수 있습니다. 먼저 NUMA에 대해 정리해보고 NUMA BALANCING에 대해 정리하겠습니다. NUMA는 Non-Uniform Memory Access(불균일 기억장치 접근)의 약자입니다. 멀티프로세서 시스템에서 불균일 메모리 접근을 위한 설계 기법으로 개발되었습니다. NUMA 시스템에서 프로세서는 자신과 연결된 메모리를 가지고 있습니다. 프로세서와 메모리가 여러 노드를 구성하여 여러 노드가 모여 시스템을 이루고 있습니다. 노드 내 프로세서는 로컬메모리라하고 다른 노드의 메모리를 리모트 메모리라 합니다. 프로세서는 로컬메모리 뿐만 아니라 리모트메모리에도 접근할..

    bootmem_init() 부트 메모리 초기화

    [분석 기준] kernel version : linux kernel 4.16 architecture : aarch64 (arm64) bootmem_init() 함수는 함수네임 그대로 부트 메모리 초기화를 위한 함수입니다. 커널은 ZONE이라는 개념을 도입해 메모리를 관리하게 됩니다. bootmem_init() 함수에서 어떻게 부트 메모리를 초기화 하는지 분석해 보도록 하겠습니다. 123456789101112131415161718192021222324void __init bootmem_init(void){ unsigned long min, max; min = PFN_UP(memblock_start_of_DRAM()); max = PFN_DOWN(memblock_end_of_DRAM()); early_mem..

    void __init paging_init() - 커널 페이지 초기화 하기

    [분석 기준] kernel version : linux kernel 4.16 architecture : aarch64 (arm64) 커널용 페이지 테이블 초기화 하는 함수입니다. 전체적인 내용을 분석 후 각 주요 함수에 대해 아래에 연속적으로 분석해 보도록 하겠습니다. 123456789101112131415161718192021222324252627282930void __init paging_init(void){ phys_addr_t pgd_phys = early_pgtable_alloc(); pgd_t *pgdp = pgd_set_fixmap(pgd_phys); map_kernel(pgdp); map_mem(pgdp); /* * We want to reuse the original swapper_pg_..

    [커널분석] static void __init setup_machine_fdt(phys_addr_t dt_phys)

    fdt를 최초 셋업하는 함수입니다. 함수 인자로 phys_addr_t 자료형의 dt_phys를 전달받는다. 전달받은 주소를 이용해 부팅과정 중 먼저 필요한 항목에 대해 설정해준다. 185 static void __init setup_machine_fdt(phys_addr_t dt_phys)186 {187 void *dt_virt = fixmap_remap_fdt(dt_phys);188 const char *name;189190 if (!dt_virt || !early_init_dt_scan(dt_virt)) {191 pr_crit("\n"192 "Error: invalid device tree blob at physical address %pa (virtual address 0x%p)\n"193 "The..