3.4.2 시스템 구조 에 특 정 된 설정 (5): 냉 열 캐 시 초기 화
start_kernel
->setup_arch
->machine_specific_memory_setup
->setup_memory
->paging_init
-> free_area_init
->free_area_init_node
->free_area_init_core
->zone_pcp_init
static __meminit void zone_pcp_init(struct zone *zone)
{
/*
* per cpu subsystem is not up at this point. The following code
* relies on the ability of the linker to provide the
* offset of a (static) per cpu variable into the per cpu area.
*/
zone->pageset = &boot_pageset;
if (populated_zone(zone))
printk(KERN_DEBUG " %s zone: %lu pages, LIFO batch:%u
",
zone->name, zone->present_pages,
zone_batchsize(zone));
}
유용 하 다
zone_batchsize
대량 크기 를 계산 한 후 코드 는 시스템 의 모든 것 을 옮 겨 다 닐 것 입 니 다.
CPU
동시 호출
setup_pageset
각각 채 우기
per_cpu_pageset
실례 의 상수.이 함 수 를 호출 할 때 사 용 했 습 니 다.
zone_pcp
매크로 선택 과 현재
CPU
관련 메모리 영역
pageset
실례
다음은 zonebatchsize 워 터 마크 계산 과정:
static int zone_batchsize(struct zone *zone)
{
#ifdef CONFIG_MMU
int batch;
batch = zone->managed_pages / 1024;
if (batch * PAGE_SIZE > 512 * 1024)
batch = (512 * 1024) / PAGE_SIZE;
batch /= 4; /* We effectively *= 4 below */
if (batch < 1)
batch = 1;
batch = rounddown_pow_of_two(batch + batch/2) - 1;
return batch;
#else
return 0;
#endif
}
상기 코드 는 메모리 필드 의 페이지 수의 0.25% o 에 해당 하 는 batch 를 계산 할 수 있 습 니 다.시 프 트 작업 은 계산 결과 가 2 ^ N - 1 형식 이 있 는 지 확인 합 니 다.경험 에 따 르 면 이 값 은 대부분의 시스템 부하 에서 캐 시 혼합 효 과 를 최소 화 할 수 있다.Fls 는 컴퓨터 에 특 정 된 조작 으로 값 중 가장 낮은 비트 를 계산 하 는 데 사용 된다.이 교정 은 결과 값 을 메모리 영역 에서 0.25% o. batch 에서 벗 어 날 수 있 음 을 주의 하 십시오. = 22 시 편차 가 가장 크다. 22 + 11 - 1 = 32 로 인해 fls 는 비트 비트 비트 5 가 가장 낮은 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트
메모리 필드 의 메모리 수량 이 512 MB 를 초과 할 때 대량 크기 는 증가 하지 않 습 니 다.페이지 크기 가 4 천 96KB 인 시스템 의 경우 페이지 수가 1 천 372 를 넘 으 면 512 MB 로 제한 된다.setuppageset 에서 캐 시 한계 계산 을 고려 할 때 batch 값 은 의미 가 있 습 니 다.
setup_pageset
->pageset_init
->pageset_set_batch
->pageset_update
static void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
{
pageset_init(p);
pageset_set_batch(p, batch);
}
static void pageset_init(struct per_cpu_pageset *p)
{
struct per_cpu_pages *pcp;
int migratetype;
memset(p, 0, sizeof(*p));
pcp = &p->pcp;
pcp->count = 0;
for (migratetype = 0; migratetype < MIGRATE_PCPTYPES; migratetype++)
INIT_LIST_HEAD(&pcp->lists[migratetype]);
}
static void pageset_set_batch(struct per_cpu_pageset *p, unsigned long batch)
{
pageset_update(&p->pcp, 6 * batch, max(1UL, 1 * batch));
}
static void pageset_update(struct per_cpu_pages *pcp, unsigned long high,
unsigned long batch)
{
/* start with a fail safe value for batch */
pcp->batch = 1;
smp_wmb();
/* Update high, then batch, in order */
pcp->high = high;
smp_wmb();
pcp->batch = batch;
}
열 페이지 의 경우 하한 선 은 0 이 고 상한 선 은 6 * batch 입 니 다. 캐 시 에 있 는 페이지 의 평균 수량 은 약 4 * batch 입 니 다. 커 널 은 캐 시 수준 을 너무 낮 추 지 않 기 때문에 batch * 4 는 메모리 필드 의 페이지 수 1000 분 의 1 에 해당 합 니 다. (이것 도 zone batchsize 가 전체 페이지 수 0.25% o 로 대량 크기 를 최적화 하려 고 하 는 이유 입 니 다)IA - 32 프로세서 의 L2 캐 시 수 는 0.25MB ~ 2mB 사이 이기 때문에 냉 열 캐 시 에 더 많은 메모 리 를 유지 하 는 것 은 무의미 하 다.경험 에 따 르 면 캐 시 크기 는 메 인 메모리 의 1000 분 의 1 입 니 다.현재 시스템 의 모든 CPU 에 설 치 된 물리 적 메모리 가 약 1GB ~ 2GB 인 것 을 감안 하면 이 규칙 은 의미 가 있다.이렇게 해서 대량의 크기 를 계산 하여 냉 열 캐 시 에 있 는 것 도 L2 캐 시 에 저장 할 수 있 습 니 다.
콜 드 페이지 목록 의 워 터 마크 는 약간 낮 습 니 다. 콜 드 페이지 는 캐 시 에 설치 되 어 있 지 않 기 때문에 성능 에 관심 이 없 는 작업 에 만 사 용 됩 니 다. 상한 선 은 batch 값 의 두 배 입 니 다.
Pcp - > batch 는 목록 을 다시 채 울 때 몇 페이지 가 바로 사용 되 는 지 결정 합 니 다.성능 측면 에서 볼 때 보통 한 페이지 가 아 닌 목록 에 여러 페이지 를 추가 합 니 다.
zone 에서pcp_init 가 끝 날 때 각 메모리 필드 의 페이지 수 와 계 산 된 대량 크기 를 출력 합 니 다. 시작 로그 에서 볼 수 있 습 니 다.
[ 0.000000] Initmem setup node 0 [mem 0x00001000-0x6dffffff]
[ 0.000000] On node 0 totalpages: 447905
[ 0.000000] DMA zone: 32 pages used for memmap
[ 0.000000] DMA zone: 0 pages reserved
[ 0.000000] DMA zone: 3995 pages, LIFO batch:0
[ 0.000000] Normal zone: 1744 pages used for memmap
[ 0.000000] Normal zone: 222974 pages, LIFO batch:31
[ 0.000000] HighMem zone: 1745 pages used for memmap
[ 0.000000] HighMem zone: 220936 pages, LIFO batch:31
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.