做网站好还是做商城好wordpress建数据库步骤
2026/4/18 9:14:08 网站建设 项目流程
做网站好还是做商城好,wordpress建数据库步骤,it运维外包服务,alpine wordpresslinux内核物理页面分配函数alloc_pages(...)在进行页面分配时非常重要的一个步骤就是判断当前Zone中可用页面减去分配需求页面后的剩余可用页面和低水位值(ALLOC_WMARK_LOW)之间的关系#xff0c;如果低于最水位值则开始直接回收,否则可以继续分配。 其中判断关键步骤由函数zo…linux内核物理页面分配函数alloc_pages(...)在进行页面分配时非常重要的一个步骤就是判断当前Zone中可用页面减去分配需求页面后的剩余可用页面和低水位值(ALLOC_WMARK_LOW)之间的关系如果低于最水位值则开始直接回收,否则可以继续分配。其中判断关键步骤由函数zone_watermark_ok(...)实现下面开始分析该函数bool zone_watermark_ok(struct zone *z, unsigned int order, unsigned long mark,int classzone_idx, int alloc_flags) { return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags,zone_page_state(z, NR_FREE_PAGES)); }zone_watermark_ok-__zone_watermark_ok#define ALLOC_HARDER 0x10 /* try to alloc harder */ #define ALLOC_HIGH 0x20 /* __GFP_HIGH set */ #define ALLOC_CPUSET 0x40 /* check for correct cpuset */ #define ALLOC_CMA 0x80 /* allow allocations from CMA areas */ #define ALLOC_FAIR 0x100 /* fair zone allocation */ /* Return true if free pages are above mark. This takes into account the order of the allocation. */ static bool __zone_watermark_ok(struct zone *z, unsigned int order,unsigned long mark, int classzone_idx, int alloc_flags,long free_pages) { /* free_pages may go negative - thats OK */ /*mark值为水位值,分配物理页面后剩余的物理页面和水位值之间的关系*/ long min mark; int o; long free_cma 0; /*去除需要分配的物理页面*/ free_pages - (1 order) - 1; if (alloc_flags ALLOC_HIGH) min - min / 2; if (alloc_flags ALLOC_HARDER) min - min / 4; #ifdef CONFIG_CMA /* If allocation cant use CMA areas dont use free CMA pages */ if (!(alloc_flags ALLOC_CMA)) free_cma zone_page_state(z, NR_FREE_CMA_PAGES); #endif if (free_pages - free_cma min z-lowmem_reserve[classzone_idx]) return false; for (o 0; o order; o) { /* At the next order, this orders pages become unavailable */ free_pages - z-free_area[o].nr_free o; /*nr_freeo转换为order中空闲页面数*/ /* Require fewer higher order pages to be free */ min 1; if (free_pages min) return false; } /*free_pages min即可*/ return true; }注意下面部分代码:if (alloc_flags ALLOC_HIGH) min - min / 2; if (alloc_flags ALLOC_HARDER) min - min / 4;Q:为什么存在min - min / 2; min - min / 4; 的操作?A:当分配请求携带ALLOC_HIGH或ALLOC_HARDER标志时,内核会放宽水位检查(如min减半),允 许分配后剩余页略低于lowmem_reserve[]if (alloc_flags ALLOC_HIGH)min - min / 2;/*高优先级分配:水位要求减半,这样对水位的要就就降低,允许在不满足条件下也能优先分配*/if (alloc_flags ALLOC_HARDER)min - min / 4;/*更紧急分配:水位要求减1/4,这样对水位的要就就降低,允许在不满足条件下也能优先分配*/这里体现了通过 ALLOC_HIGH/ALLOC_HARDER放宽水位要求,适应紧急分配场景。继续下面这部分代码:if (free_pages - free_cma min z-lowmem_reserve[classzone_idx]) return false;要求zone空闲页面小于水位值和zone紧急内存(lowmem_reserve)之和。zone-lowmem_reserve[]的保留内存是逻辑上的最小空闲页保障,而非物理上已分配的内存块。其使用体现在:正常分配:从Zone的空闲页中分配,通过水位检查确保分配后剩余页≥ min lowmem_reserve[idx](即不突破预留底线)。极端情况:高优先级分配或OOM killer可能临时突破预留底线,动用原本应保留的空闲页,但这是应急机制,非常规分配。继续分析下面代码:for (o 0; o order; o) { /* At the next order, this orders pages become unavailable */ free_pages - z-free_area[o].nr_free o; /*nr_freeo转换为order中空闲页面数*/ /* Require fewer higher order pages to be free */ min 1; if (free_pages min) return false; }Q:为什么min1,即minmin/2?A:高阶分配对连续内存要求更高,但允许更低的水位(通过 min 1)这部分代码很好的体现了保守估计:扣除所有可能用于分配的页(包括低阶页),确保分配后水位安全逐级放宽要求:高阶分配对连续内存要求更高,但允许更低的水位(通过 min 1)紧急通道:通过 ALLOC_HIGH/ALLOC_HARDER放宽水位要求,适应紧急分配场景。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询