当前位置: 首页 > news >正文

郑州便宜网站建设报价/站长工具seo查询软件

郑州便宜网站建设报价,站长工具seo查询软件,深圳学校网站定制设计,wordpress免费中文主题下载1 概述 hugetlb机制是一种使用大页的方法,与THP(transparent huge page)是两种完全不同的机制,它需要: 管理员通过系统接口reserve一定量的大页,用户通过hugetlbfs申请使用大页, 核心组件如下图: 围绕着…

1 概述

hugetlb机制是一种使用大页的方法,与THP(transparent huge page)是两种完全不同的机制,它需要:

  • 管理员通过系统接口reserve一定量的大页,
  • 用户通过hugetlbfs申请使用大页,

核心组件如下图:

 围绕着保存大页的核心数据结构hstate,

  • 不同的系统接口,通过__nr_pages_store_common()将申请大页,并存入hstate;
  • 不同的hugetlbfs挂载,通过alloc_huge_page()从hstate中申请大页使用;

下面,我们分别详解这些组件。

2 hstate

如上图中,hstate用于保存huge page,

关于hstate,参考以下代码:

struct hstate hstates[HUGE_MAX_HSTATE];gigantic_pages_init()
---/* With compaction or CMA we can allocate gigantic pages at runtime */if (boot_cpu_has(X86_FEATURE_GBPAGES))hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
---hugetlb_init()
---hugetlb_add_hstate(HUGETLB_PAGE_ORDER);if (!parsed_default_hugepagesz) {...default_hstate_idx = hstate_index(size_to_hstate(HPAGE_SIZE));...}---#define HPAGE_SHIFT		PMD_SHIFT
#define HUGETLB_PAGE_ORDER	(HPAGE_SHIFT - PAGE_SHIFT)default_hugepagesz_setup()
---...default_hstate_idx = hstate_index(size_to_hstate(size));...
---
__setup("default_hugepagesz=", default_hugepagesz_setup);

 其中有以下几个关键点:

  • x86_64架构存在两个hstate,2M和1G
  • 系统中存在一个default hstate,默认是2M的,可以通过kernel commandline设置;

我们在/proc/meminfoh中看到的:

HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB

 HugePages开头的这几个都是default hstate的数据,换句话说,是2M的;1G的hugetlbs数据并不会体现在其中,参考代码:

hugetlb_report_meminfo()
---for_each_hstate(h) {unsigned long count = h->nr_huge_pages;total += huge_page_size(h) * count;if (h == &default_hstate)seq_printf(m,"HugePages_Total:   %5lu\n""HugePages_Free:    %5lu\n""HugePages_Rsvd:    %5lu\n""HugePages_Surp:    %5lu\n""Hugepagesize:   %8lu kB\n",count,h->free_huge_pages,h->resv_huge_pages,h->surplus_huge_pages,huge_page_size(h) / SZ_1K);}seq_printf(m, "Hugetlb:        %8lu kB\n", total / SZ_1K);
---

这我们再贴一段hstate处理hugepage的代码:

dequeue_huge_page_nodemask()-> dequeue_huge_page_node_exact()---list_move(&page->lru, &h->hugepage_activelist);set_page_refcounted(page);ClearHPageFreed(page);h->free_huge_pages--;h->free_huge_pages_node[nid]--;---

 非常简单,链表维护,减少计数。

3 nr_hugepages

hugetlb需要系统管理员将一定量的内存reserve给hugetlb,可以通过以下途径:

  • /proc/sys/vm/nr_hugepages,参考代码hugetlb_sysctl_handler_common(),它会向default_hstate注入大页,也就是2M;
  • /sys/kernel/mm/hugepages/hugepages-size/nr_hugepages,这里可以指定size向2M或者1G的hstate注入大页,node策略为interleaved,
  • /sys/devices/system/node/node_id/hugepages/hugepages-size/nr_hugepages,通过该接口,不仅可以指定size,还可以指定node;

参考代码:

// /sys/kernel/mm/hugepages
hugetlb_sysfs_init()
---hugepages_kobj = kobject_create_and_add("hugepages", mm_kobj);...for_each_hstate(h) {err = hugetlb_sysfs_add_hstate(h, hugepages_kobj,hstate_kobjs, &hstate_attr_group);...}
---hugetlb_register_node()
---struct node_hstate *nhs = &node_hstates[node->dev.id];...nhs->hugepages_kobj = kobject_create_and_add("hugepages",&node->dev.kobj);...for_each_hstate(h) {err = hugetlb_sysfs_add_hstate(h, nhs->hugepages_kobj,nhs->hstate_kobjs,&per_node_hstate_attr_group);...}
---nr_hugepages_store_common()
---h = kobj_to_hstate(kobj, &nid);return __nr_hugepages_store_common(obey_mempolicy, h, nid, count, len);
---static struct hstate *kobj_to_hstate(struct kobject *kobj, int *nidp)
{int i;for (i = 0; i < HUGE_MAX_HSTATE; i++)if (hstate_kobjs[i] == kobj) {if (nidp)*nidp = NUMA_NO_NODE;return &hstates[i];}return kobj_to_node_hstate(kobj, nidp);
}

 另外,hugetlb还有overcommit功能,参考Redhat官方给出的解释:

/proc/sys/vm/nr_overcommit_hugepages

Defines the maximum number of additional huge pages that can be created and used by the system through overcommitting memory. Writing any non-zero value into this file indicates that the system obtains that number of huge pages from the kernel's normal page pool if the persistent huge page pool is exhausted. As these surplus huge pages become unused, they are then freed and returned to the kernel's normal page pool.

不过,在实践中,我们通常不会使用这个功能,hugetlb reserve的内存量都是经过预先计算的预留的;overcommit虽然提供了一定的灵活性,但是增加了不确定性。 

4 hugetlbfs

hugetlb中的所有大页,都需要通过hugetlbfs以文件的形式呈现出来,供用户读写;接下来,我们先看下hugetlbfs的文件的使用方法。

const struct file_operations hugetlbfs_file_operations = {.read_iter		= hugetlbfs_read_iter,.mmap			= hugetlbfs_file_mmap,.fsync			= noop_fsync,.get_unmapped_area	= hugetlb_get_unmapped_area,.llseek			= default_llseek,.fallocate		= hugetlbfs_fallocate,
};

hugetlbfs的文件并没有write_iter方法,如果我们用write系统调用操作该文件,会报错-EINVAL,具体原因可以索引代码中的FMODE_CAN_WRITE的由来;不过,hugetlbfs中的文件可以通过read系统调用读。fallocate回调存在意味着,我们可以预先通过fallocate给文件分配大页。另外,从hugetlb这个名字中我们就可以知道,它主要跟mmap有关,我们看下关键代码实现:

handle_mm_fault()-> hugetlb_fault()-> hugetlb_no_page()-> alloc_huge_page()hugetlbfs_fallocate()-> alloc_huge_page()

所以,hugetlbfs的大页是从mmap后的pagefault分配或者fallocate提前分配好的;

关于hugetlbfs的大页的分配,还需要知道reserve的概念;

hugetlbfs_file_mmap()-> hugetlb_reserve_pages()-> hugetlb_acct_memory()-> gather_surplus_pages()---needed = (h->resv_huge_pages + delta) - h->free_huge_pages;if (needed <= 0) {h->resv_huge_pages += delta;return 0;}---alloc_huge_page()-> dequeue_huge_page_vma()---if (page && !avoid_reserve && vma_has_reserves(vma, chg)) {SetHPageRestoreReserve(page);h->resv_huge_pages--;}---
//如果是fallocate路径,avoid_reserve就是true

hugetlb_acct_memory()用于执行reserve,但是并不会真的分配;

这里并不是文件系统的delay allocation功能,大页的累计有明确的数量和对齐要求;reserve只是为了符合mmap的语义,即mmap时不会分配内存,page fault才分配;

hugetlbfs的mount参数中有一个min_size,可以直接在mount的时候reserve大页,如下:

hugepage_new_subpool()
---spool->max_hpages = max_hpages;spool->hstate = h;spool->min_hpages = min_hpages;if (min_hpages != -1 && hugetlb_acct_memory(h, min_hpages)) {kfree(spool);return NULL;}spool->rsv_hpages = min_hpages;
---

 而在实践中,这也没有必要;与overcommit类似,hugetlb最关键的特性就是确定性,它能确保用户可以使用到huge page,所以,资源都是提供计算预留好的,甚至包括,哪个进程能用多少等,所以,做这种mount reserve没有意义。


hugetlbfs除了用户通过mount命令挂载的,系统还给每个hstate一个默认挂载;

init_hugetlbfs_fs()
---/* default hstate mount is required */mnt = mount_one_hugetlbfs(&default_hstate);...hugetlbfs_vfsmount[default_hstate_idx] = mnt;/* other hstates are optional */i = 0;for_each_hstate(h) {if (i == default_hstate_idx) {i++;continue;}mnt = mount_one_hugetlbfs(h);if (IS_ERR(mnt))hugetlbfs_vfsmount[i] = NULL;elsehugetlbfs_vfsmount[i] = mnt;i++;}
--hugetlb_file_setup()
---hstate_idx = get_hstate_idx(page_size_log);...mnt = hugetlbfs_vfsmount[hstate_idx];...inode = hugetlbfs_get_inode(mnt->mnt_sb, NULL, S_IFREG | S_IRWXUGO, 0);...
---ksys_mmap_pgoff()
---if (!(flags & MAP_ANONYMOUS)) {...} else if (flags & MAP_HUGETLB) {...hs = hstate_sizelog((flags >> MAP_HUGE_SHIFT) & MAP_HUGE_MASK);...len = ALIGN(len, huge_page_size(hs));...file = hugetlb_file_setup(HUGETLB_ANON_FILE, len,VM_NORESERVE,&ucounts, HUGETLB_ANONHUGE_INODE,(flags >> MAP_HUGE_SHIFT) & MAP_HUGE_MASK);...}retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff);
---memfd_create()
---
...if (flags & MFD_HUGETLB) {...file = hugetlb_file_setup(name, 0, VM_NORESERVE, &ucounts,HUGETLB_ANONHUGE_INODE,(flags >> MFD_HUGE_SHIFT) &MFD_HUGE_MASK);}...fd_install(fd, file);
---

默认hugetlbfs挂载主要用于:

  • memfd,MEMFD_HUGETLB,直接从hugetlb中申请大页,创建匿名mem文件;
  • mmap,MMAP_HUGETLB,直接总hugetlb中申请大页,mmap到程序中;

这种方法虽然增加了灵活性,但是,还是之前强调的hugetlbfs是为了大页的确定性而存在的。

相关文章:

hugetlb核心组件

1 概述 hugetlb机制是一种使用大页的方法&#xff0c;与THP(transparent huge page)是两种完全不同的机制&#xff0c;它需要&#xff1a; 管理员通过系统接口reserve一定量的大页&#xff0c;用户通过hugetlbfs申请使用大页&#xff0c; 核心组件如下图&#xff1a; 围绕着…...

vscode配置环境变量

首先点击下面这个链接。 sMinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 然后选择Files这个选项 向下移选择下载这个文件 解压完成之后&#xff0c;找到这个文件的bin目录复制路径后&#xff0c;添加到环境变量中 依次点击后打开cmd&#xff0…...

react:封装组件

封装 /components/Pagination.tsx import React from react import { Pagination } from antdconst PaginationWarp ({ total, paramsInfo, setParamsInfo }) > {return (<Paginationtotal{total}current{paramsInfo.page}showSizeChangershowQuickJumperdefaultPageSi…...

基于深度学习的视频多目标跟踪实现 计算机竞赛

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …...

linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、Wi-Fi热点

linux中各种最新网卡2.5G网卡驱动&#xff0c;不同型号的网卡需要不同的驱动&#xff0c;整合各种网卡驱动&#xff0c;包括有线网卡、无线网卡、自动安装Wi-Fi热点。 最近在做路由器二次开发&#xff0c;现在市面上卖的新设备&#xff0c;大多数都采用了2.5G网卡&#xff0c;…...

asp.net上传文件

第一种方法 前端&#xff1a; <div> 单文件上传 <form enctype"multipart/form-data" method"post" action"upload.aspx"> <input type"file" name"files" /> …...

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)

JavaEE平台技术——预备知识&#xff08;Web、Sevlet、Tomcat&#xff09; 1. Web基础知识2. Servlet3. Tomcat并发原理 1. Web基础知识 &#x1f192;&#x1f192;上个CSDN我们讲的是JavaEE的这个渊源&#xff0c;实际上讲了两个小时的历史课&#xff0c;给大家梳理了一下&a…...

基础课23——设计客服机器人

根据调查数据显示&#xff0c;使用纯机器人完全替代客服的情况并不常见&#xff0c;人机结合模式的使用更为普遍。在这两种模式中&#xff0c;不满意用户的占比都非常低&#xff0c;不到1%。然而&#xff0c;在满意用户方面&#xff0c;人机结合模式的用户满意度明显高于其他模…...

mybatis在springboot当中的使用

1.当使用Mybatis实现数据访问时&#xff0c;主要&#xff1a; - 编写数据访问的抽象方法 - 配置抽象方法对应的SQL语句 关于抽象方法&#xff1a; - 必须定义在某个接口中&#xff0c;这样的接口通常使用Mapper作为名称的后缀&#xff0c;例如AdminMapper - Mybatis框架底…...

如何处理前端本地存储和缓存

前端本地存储和缓存的处理是一种重要的技术&#xff0c;它可以帮助改善应用程序的性能和用户体验。下面是一些处理前端本地存储和缓存的常用方法&#xff1a; 1. 使用Web Storage API&#xff1a; 这是一种在浏览器中存储数据的方法&#xff0c;包括两种类型&#xff1a;loca…...

导轨式安装压力应变桥信号处理差分信号输入转换变送器0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA

主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输入端和输…...

人体姿态估计和手部姿态估计任务中神经网络的选择

一、人体姿态估计任务适合使用卷积神经网络&#xff08;CNN&#xff09;来解决。 人体姿态估计任务的目标是从给定的图像或视频中推断出人体的关节位置和姿势。这是一个具有挑战性的计算机视觉任务&#xff0c;而CNN在处理图像数据方面表现出色。 使用CNN进行人体姿态估计的一种…...

odoo16 one2many字段的 domain

最近在odoo project模块的基础上做二开&#xff0c;给task表加了一个版本字段version_id&#xff0c;然后重写了 project表的Task_ids, 并且增加了一个domain&#xff0c;结果折腾了大半天才搞定 写法1 这也是最初的写法&#xff1a; version_id fields.Many2one("hx.p…...

一份优秀测试用例的设计策略

日常工作中最为基础核心的内容就是设计测试用例&#xff0c;什么样的测试用例是好的测试用例?我们一般会认为数量越少、发现缺陷越多的用例就是好的用例。那么我们如何才能设计出好的测试用例呢&#xff1f;一份好的用例是设计出来的&#xff0c;是测试人员思路和方法的集合&a…...

自动驾驶行业观察之2023上海车展-----智驾供应链(3)

智驾解决方案商发展 华为&#xff1a;五项重磅技术更新&#xff0c;重点发布华为ADS 2.0和鸿蒙OS 3.0 1&#xff09;产品方案&#xff1a;五大解决方案都有了全面的升级&#xff0c;分别推出了ADS 2.0、鸿蒙OS 3.0、iDVP智能汽车数字平台、智能车云服务和华为车载光最新 产品…...

倒计时丨3天后,我们直播间见!

倒计时3天&#xff0c;RestCloud 零代码集成自动化平台重磅发布 ⏰11 月 9 日 14:00&#xff0c;期待您的参与&#xff01; 点击报名&#xff1a;http://c.nxw.so/dfaJ9...

c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排

一、二分查找 1、前提条件&#xff1a;数据有序&#xff0c;随机访问&#xff1b; 2、实现&#xff1a;递归实现&#xff0c;非递归实现 3、注意事项&#xff1a; 循环退出条件:low <high,low high.说明还有一个元素&#xff0c;该元素还要与key进行比较 mid的取值&#xf…...

网站SSL证书有什么用

在当今&#xff0c;网站安全对于企业和个人来说至关重要。其中&#xff0c;SSL证书在保护网站和用户数据方面发挥着关键作用。 1&#xff0c;数据加密保护&#xff1a;SSL证书通过使用加密技术&#xff0c;将网站与访问者之间的通信进行加密。这意味着通过SSL保护的网站上的数据…...

ubuntu 20.04 server安装

ubuntu 20.04 server安装 ubuntu-20.04.6-live-server-amd64.iso 安装 安装ubuntu20.04 TLS系统后&#xff0c;开机卡在“A start job is running for wait for network to be Configured”等待连接两分多钟。 cd /etc/systemd/system/network-online.target.wants/在[Servi…...

造数工具调研

开源项目 语言 地址 描述 备注 Faker Python https://github.com/joke2k/faker 一个Python库&#xff0c;可以生成各种各样的假数据&#xff0c;包括SQL语句。它支持多种数据库&#xff0c;包括MySQL、PostgreSQL、Oracle等。Faker可以生成各种类型的数据&#xff0c;如…...

Linux文件系统目录结构

典型的Linux文件系统目录结构的列表 典型的Linux文件系统目录结构的列表。每个目录都有其特定的用途&#xff1a; /bin: 存放系统引导和修复所需的二进制可执行文件&#xff0c;如ls&#xff0c;cp&#xff0c;mv等命令。 /boot: 存放操作系统引导文件&#xff0c;例如内核和…...

CANoe新建XML自动化Test Modules

文章目录 1.打开Test Modules2.新建Environment3.新建XML Test Modules4.新建.can文件5.打开XML Test Modules6.新建xml脚本并保存7.编译8.在.can文件写个测试用例9.修改报告格式为HTML10.运行查看报告后面介绍的文章会重复用到这部分,这里单独介绍下,后面不做重复介绍。 1.…...

国内某发动机制造工厂RFID智能制造应用解决方案

一、工厂布局和装备 国内某发动机制造工厂的装配车间布局合理&#xff0c;设备先进&#xff0c;在这个5万平方米的生产区域内&#xff0c;各个工位之间流程紧密&#xff0c;工厂采用了柔性设备&#xff0c;占比达到了67%&#xff0c;数控化率超过90%&#xff0c;自动化率达到了…...

【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群

搭建 Nacos 集群 架构 centos安装docker https://docs.docker.com/engine/install/centos/ 详细配置过程 MySql8 mysql数据库配置 数据库脚本 nacos/conf/nacos-mysql.sql Nacos2 application.properties 修改为mysql spring.datasource.platformmysqldb.num1 db.url…...

程序员使用 ChatGPT的 10 种最佳方式

自2022年11月30日发布以来&#xff0c;ChatGPT持续爆火&#xff0c;它在各个方面都产生了巨大的影响力&#xff0c;在软件开发行业&#xff0c;ChatGPT 有潜力彻底改变我们思考和处理软件开发的方式。 ChatGPT 正在改变软件开发流程&#xff0c;它理解自然语言和生成类人文本的…...

各种各类好用热门API推荐

各种各类的好用API推荐&#xff0c;含免费次数~ 天气预报查询&#xff1a;查询全国以及全球多个城市的天气&#xff0c;包含15天天气预报查询。天气预警&#xff1a;可以获取指定城市当前生效中的各类天气预警&#xff0c;如寒潮蓝色预警信号&#xff0c;或一次性拉取全国所有…...

高速串行总线——SATA

SATA简介 SATA的全称是Serial Advanced Technology Attachment(串行高级技术附件&#xff0c;一种基于行业标准的串行硬件驱动器接口)&#xff0c;它是一种电脑总线&#xff0c;主要功能是用作主板和大量存储设备&#xff08;如硬盘及光盘驱动器&#xff09;之间的数据传输 SA…...

不用流氓软件,如何在户外使用手机听下载到家中电脑里的音乐文件呢?

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是本教程使用环境&#xff1a;1 群晖系统安装audiostation套件2 下载移动端app3 内网穿透&#xff0c;映射至公网 很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿&#xff0c;于是打开手…...

函数数组指针示例

函数数组指针是一个指向函数指针数组的指针。它用于存储一组函数指针&#xff0c;使您可以通过函数指针数组的索引来调用不同的函数。函数数组指针通常用于实现函数表或分发不同的操作或处理不同的事件。 以下是一个简单的示例&#xff0c;说明如何声明和使用函数数组指针&…...

万宾科技管网水位监测预警,管网水位的特点有哪些?

以往如果要了解城市地下排水管网的水位变化&#xff0c;需要依靠人工巡检或者排查的方式&#xff0c;这不仅加大了人员的工作量&#xff0c;而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况&#xff0c;都会降低市政府对排水管网的管理能力&a…...