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

Linux内核页表缓存(TLB)与巨型页

一、页表缓存(TLB)

        处理器厂商在内存管理单元 (MMU) 里增加一个 TLB (Translation Lookaside Buffer) 的高速缓存,TLB 直译为转译后备缓冲器,也被翻译为页表缓存。
        TLB 为 CPU 的一种缓存,由存储器管理单元用于改进虚拟地址到物理地址的转译速度。
        TLB 用于缓存一部分标签页表条目。TLB 可介于 CPU 和 CPU 缓存之间,或在 CPU 缓存和主存之间,这取决于缓存使用的是物理寻址或是虚拟寻址。

1.TLB表项格式

        不同处理器架构的 TLB 表项的格式不同。ARM64 处理器的每条 TLB 表项不仅包含虚拟地址和物理地址,也包含属性:内存类型、缓存策略、访问权限、地址空间标识符 (ASID) 及虚拟机标识符 (VMID)。地址空间标识符区分不同进程的页表项,虚拟机标识符区分不同虚拟机的页表项。

2.TLB管理

        若内核修改了可能缓存在TLB里面的页表项,那么内核必须负责使旧的TLB表项失效,内核定义了每种处理器架构必须实现的函数。

3.ARM64架构提供一条TLB失效指令

        当 TLB 没有命中时,ARM64 处理器的内存管理单元自动遍历内存中的页表,把页表复制到 TLB,不需要软件把页表写到 TLB,所以 ARM64 架构没有提供写 TLB 的指令。

ARM64 架构提供一条 TLB 失效指令
字段<type>常见选项:(ALL:所有表项。VMALL:当前虚拟机的阶段 1 的所有表项,即表项的 VMID 是当前虚拟机的 VMID,虚拟机里面运行客户操作系统的虚拟地址转换成物理地址分成两个阶段,第 1 阶段把虚拟地址转换成中间物理地址,第 2 阶段把中间物理地址转换成物理地址。ASID:匹配寄存器 Xt 指定的 ASID 的表项。VA:匹配寄存器 Xt 指定的虚拟地址和 ASID 的表项。VAA:匹配寄存器 Xt 指定的虚拟地址并且 ASID 可以是任意值的表项。)
字段<level>指定异常级别:(E1:异常级别 1。E2:异常级别 2。E3:异常级别 3。)
字段 {IS} 表示内部共享,即多个核共享;如果不使用字段 IS,表示非共享,只被一个核使用。
字段 Xt 是 X0-X31 中的任一个寄存器。

 

 

4.地址空间标识符

        为了减少在进程切换时清空页表缓存的需要,ARM64 处理器的页表缓存使用非全局(not global, nG)位区分内核和进程的页表项,使用地址空间标识符(Address Space Identifier,ASID)区分不同进程的页表项。
ARM64 处理器 ASID 长度是由具体实现定义的,可以选择 8 位或者 16 位,寄存器 ID_AA64MMFR0_EL1(AArch64 内存模型特性寄存器 0,AArch64 Memory Model Feature Register 0)的字段 ASIDBits 存放处理器支持的 ASID 长度。

  • 如果系统中进程数量超过 256,则可能会有多个进程需要共享同一个 ASID,这就导致地址空间混淆问题。

为了避免这种问题,内核引入了 ASID 版本号:

  1. 每个进程不仅有一个硬件 ASID(低 8 位),还有一个软件 ASID,包含 ASID 的版本号(高 56 位)。

  2. 系统维护一个全局 ASID 版本号,用于标识当前的 ASID 使用状态。

  3. 在进程调度时,比较进程的 ASID 版本号和全局 ASID 版本号:

    • 如果相同,则复用进程的硬件 ASID。
    • 如果不同,则分配新的硬件 ASID,并将版本号更新为全局 ASID 版本号。
  4. 当硬件 ASID 耗尽时,内核将全局 ASID 版本号加一,同时标记所有现有的 ASID 项目无效(如清空页表缓存)。

  5. 具体例子
    假设系统中有以下情况:

    ASID 的长度为 8 位,因此有 256 个硬件 ASID(编号范围:1-255,0 为保留值)。系统中有 300 个进程正在运行。
    • 进程 A 和 B 首次运行时分配 ASID
      • 假设当前全局 ASID 版本号为 1。
      • 系统给进程 A 分配硬件 ASID 1,并将其软件 ASID 记录为(版本号:1,硬件 ASID:1)。
      • 系统给进程 B 分配硬件 ASID 2,并将其软件 ASID 记录为(版本号:1,硬件 ASID:2)。
    • 进程 C 再次分配 ASID
      • 由于系统中只有 256 个硬件 ASID,假设硬件 ASID 已分配完(1 到 255)。
      • 系统将全局 ASID 版本号加一,变为 2。
      • 清空处理器的页表缓存(TLB),标记所有已有的硬件 ASID 无效。
      • 给进程 C 分配硬件 ASID 1,并将其软件 ASID 记录为(版本号:2,硬件 ASID:1)。
    • 进程切换时的处理
      • 当进程 A 再次被调度时,比较进程 A 的 ASID 版本号(1)和全局 ASID 版本号(2):
        • 不相同,说明 ASID 需要重新分配。
        • 系统给进程 A 分配硬件 ASID 2,并将其软件 ASID 记录为(版本号:2,硬件 ASID:2)。

5.虚拟机标识符

        虚拟机里面运行的客户操作系统的虚拟地址换成物理地址分两个阶段:第 1 阶段把虚拟地址转换成中间物理地址,第 2 阶段把中间物理地址转换成物理地址。第 1 阶段转换由客户操作系统的内存控制,和非虚拟化的转换过程相同。第 2 阶段转换由虚拟机监控器控制,虚拟机监控器为每个虚拟机维护一个转换表,分配一个虚拟机标识符(Virtual Machine Identifier,VMID),寄存器 VTTRBR_EL2(虚拟化转换表基准寄存器,Virtualization Translation Table Base Register)存放当前虚拟机的阶段 2 转换表的物理地址。

  • 定义:VMID 是虚拟化环境中使用的标识符,用来区分不同虚拟机的地址空间。在虚拟化环境下,多个虚拟机可共享同一物理 CPU,每个虚拟机有自己的虚拟地址空间,VMID 使 TLB 缓存条目能区分不同虚拟机的虚拟地址空间。
  • 作用:虚拟化系统中,主机操作系统(宿主机)通过 Hypervisor 管理多个虚拟机(客体操作系统)。为在 TLB 中区分不同虚拟机地址空间,需使用 VMID,确保虚拟机虚拟地址映射不与其他虚拟机或宿主机冲突。
  • 举个例子:
    • 假设有 VM1 和 VM2 两个虚拟机,运行在同一物理服务器,各有虚拟地址空间。
    • 设 VM1 的 VMID 为0x1,VM2 的 VMID 为0x2
    • VM1 执行时,TLB 缓存条目关联 VMID 0x1;VM2 切换到 CPU 时,Hypervisor 将 TLB 中 VMID 设为0x2,避免 VM2 的 TLB 条目与 VM1 冲突。

二、巨型页

         当运行内存需求量较大的应用程序时,如果使用长度为 4KB 的页,将会产生较多的 TLB 未命中和缺页异常,严重影响应用程序的性能。如果使用长度为 2MB 甚至更大的巨型页,可以大幅减少 TLB 未命中和缺页异常的数量,大幅提高应用程序的性能。这才是内核引入巨型页(Huge Page)的真正原因。
        巨型页首先需要处理器能够支持,然后需要内核支持,内核有两种实现方式:
                ・使用 hugetlbfs 伪文件系统实现巨型页;
                ・透明巨型页。

        hugetlbfs 文件系统是一个假的的文件系统,只是利用了文件系统的编程接口。使用 hugetlbfs 文件系统实现的巨型页称为传统巨型页、或者称标准巨型页。
        透明巨型页,标准巨型页的优点是预先分配巨型页到巨型页池,进程申请巨型页的时候从巨型页池取,成功的概率很高,缺点是应用程序需要使用文件系统的编程接口。透明巨型页的优点是对应用程序透明,缺点是动态分配,在内存碎片化的时候分配成功的概率很低。

用户态协议栈使用巨型页的原因

        用户态协议栈(如网络协议栈)常处理大规模数据,对内存访问频率高、需求量大。若使用 4KB 小页,会因频繁的地址转换导致大量 TLB 未命中 和 缺页异常,增加内存管理开销,拖慢数据处理速度。而巨型页(如 2MB)通过减少页表条目数量,降低 TLB 未命中概率,减少缺页异常,提升虚拟地址到物理地址的转换效率,进而优化用户态协议栈的内存访问性能,降低延迟,提高网络数据处理、转发等操作的效率。

1.处理器对巨型页的支持

ARM64处理器支持巨型页的方式有两种:

        1.通过块描述符支持巨型页

        2.通过页/块描述符的连续为支持巨型页。   

        页 / 块描述符中的连续位指示表项是一个连续表项集合中的一条表项,一个连续表项集合可以被缓存在一条 TLB 表项里面。通常所说的,进程申请了 n 页的虚拟内存区域,然后申请了 n 页的物理内存区域,使用 n 个连续的页表项把每个虚拟页映射到物理页,每页表项设置了连续标志位,当处理器的内存管理单元遍历内存的页表时,访问到 n 个页表项中的任何一个页表项。发现页表项设置了连续标志位,就会把 n 个页表项合并以后填充到 TLB 表项。

 

假设:页长度为 4KB,那么使用 4 级转换表,1 级转换表的块描述符不能使用连续位;2 级转换表的块描述符支持 16 个连续块,即支持(162MB=32MB)巨型页,3 级转换表的页描述符支持 16 个连续页,即支持(164KB=64KB)巨型页。

 

假设:如果页长度 16KB,那么我们使用 4 级转换表,2 级转换表的块描述符支持 32 个连续块,即支持(3232MB=1GB)巨型页;3 级转换表的页描述符支持 128 个连续页,即支持(12816KB=2MB)巨型页。

 

假设:如果页长度 64KB,那么使用 3 级转换表,2 级转换表的块描述符不能使用连续位;3 级转换表的页描述符支持 32 个连续页。即支持(32*64KB=2MB)巨型页。

2.标准巨型页  

        通过文件 “cat /proc/sys/nr_hugepages” 指定巨型页池中永久巨型页的数量。
        通过文件 “cat /proc/sys/vm/nr_overcommit_hugepages” 指定巨型页池中临时巨型页的数量,当永久巨型页用完的时候,可以从页分配器申请临时巨型页。
        nr_hugepages 是巨型页池的最小长度,(nr_hugepages+nr_overcommit_hugepages)是巨型页池的最大长度,这两个参数默认值都是 0,至少要设置一个,否则分配巨型页会失败。

3.查看巨型页信息

        通过虚拟文件系统查看: cat /proc/meminfo

4.巨型页池

        内核使用巨型页池管理巨型页。有的处理器架构支持多种巨型页长度,每种巨型页长度对应一个巨型页池,有一个默认的巨型页长度,默认只创建巨型页长度是默认长度的巨型页池。比如 ARM64 架构在页长度是 4KB 的时候支持巨型页长度是 1GB、32MB、2MB、64KB,默认的巨型页长度是 2MB,默认只有创建巨型页长度是 2MB 的巨型页池。

巨型页池中的巨型页可分为两种:
        永久巨型页:是保留的,不能有其他用途,被预先分配到巨型页池,当进程释放永久巨型页的时候,永久巨型页被归还到巨型页池。
        临时巨型页:也称为多余的 (surplus) 巨型页,当永久巨型页用完的时候,可以从页分配器分配临时巨型页;进程释放临时巨型页的时候,直接释放到页分配器。当设备长时间运行后,内存可能碎片化,分配临时巨型页可能会失败。
        hugetlb 相当于 hugepages 页面管理者,页面的分配及释放,都是由此模块负责。
        hugetlbfs 则用于向用户提供一套基于文件系统的巨型页使用界面,下层功能的实现,主要依赖于 hugetlb。

https://github.com/0voice

相关文章:

Linux内核页表缓存(TLB)与巨型页

一、页表缓存&#xff08;TLB&#xff09; 处理器厂商在内存管理单元 (MMU) 里增加一个 TLB (Translation Lookaside Buffer) 的高速缓存&#xff0c;TLB 直译为转译后备缓冲器&#xff0c;也被翻译为页表缓存。 TLB 为 CPU 的一种缓存&#xff0c;由存储器管理单元用于…...

Web3(阶段一:入门)——默克尔树

什么是默克尔树 默克尔树&#xff08;Merkle Tree&#xff09;&#xff0c;又称哈希树&#xff0c;是一种基于哈希算法的数据结构&#xff0c;用于高效验证数据完整性。其核心思想是将数据分块并逐层哈希&#xff0c;最终生成唯一的根哈希值。 核心特点&#xff1a; 结构分层…...

Qt Quick 与 Qt 版本匹配关系

一、核心版本对应关系 Qt 版本Qt Quick 版本重要特性Qt 5.0Qt Quick 2.0首次引入基于Scene Graph的架构Qt 5.12Qt Quick 2.12长期支持版(LTS),新增粒子系统增强Qt 5.15Qt Quick 2.15最后5.x LTS,改进3D集成Qt 6.0Qt Quick 6.0完全重写渲染架构,支持VulkanQt 6.2Qt Quick 6.2…...

DefaultListableBeanFactory

文章目录 DefaultListableBeanFactory介绍继承关系源码码解析属性成员getbean方法setAutowireCandidateResolver方法resolveDependency方法doResolveDependency方法findAutowireCandidates 方法determineAutowireCandidate 方法 DefaultListableBeanFactory介绍 BeanFactory是…...

软件工程面试题(三十二)

1、java程序每天12点打印”hello” public static void main(String[] args) {Date date = new Date(); System.out.println(date.getHours()); while (true) {while (date.getHours() == 12) {if (date.getMinutes() == 0) {if (date.getSeconds() == 0) {System.out.print…...

高频面试题(含笔试高频算法整理)基本总结回顾66

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

生成式人工智能(AIGC):内容创作的新引擎与新挑战

在数字化时代&#xff0c;内容创作的需求呈爆炸式增长。无论是社交媒体、新闻媒体、广告营销还是娱乐行业&#xff0c;都急需大量高质量的文本、图像、音频和视频内容。然而&#xff0c;传统的内容创作方式面临着效率低下、成本高昂、创意枯竭等问题。生成式人工智能&#xff0…...

Java 大视界 -- 基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用进展(176)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

react和vue在开发使用的语法上面有什么区别?

React和Vue在开发使用的语法上有诸多区别&#xff0c;下面从组件定义、数据绑定、事件处理、生命周期钩子等方面详细阐述&#xff1a; 1. 组件定义 React&#xff1a; 函数组件是React推荐的组件定义方式&#xff0c;它本质上是一个JavaScript函数&#xff0c;返回JSX元素。类…...

ReFormX:现代化的 React 表单解决方案 - 深度解析与最佳实践

ReFormX文档 表单开发一直是前端工作中最繁琐却又最常见的任务之一。从简单的登录表单到复杂的多步骤配置页面&#xff0c;开发者往往需要编写大量重复代码&#xff0c;处理繁琐的状态管理、数据验证和联动逻辑。ReFormX 应运而生&#xff0c;它不仅是一个表单组件库&#xff…...

STM32单片机入门学习——第19节: [6-7]TIM编码器接口

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.06 STM32开发板学习——第19节: [6-7]TIM编码器接口 前言开发板说明引用解答和科普一…...

Spring 中的 bean 生命周期

&#x1f331; 一、什么是 Bean 生命周期&#xff1f; 在 Spring 容器中&#xff0c;一个 Bean 从“创建 → 初始化 → 使用 → 销毁”&#xff0c;经历了完整的生命周期。 Spring 提供了 多个扩展点 让你可以在这些阶段做事情&#xff0c;比如注入资源、日志记录、连接资源、清…...

Kafka 在 k8s 中的消费者实例

每个 Pod&#xff08;在 K8s 中运行的消费者实例&#xff09;都会作为一个独立的消费者加入到 Kafka 消费者组中。 如果只是将消费者代码在 K8s 中复制多个实例&#xff08;例如通过增加副本数&#xff09;&#xff0c;每个实例都会作为一个独立的消费者加入到 Kafka 消费者组…...

野草云防火墙风险分析及 Docker 使用注意事项

在实际使用野草云服务器部署 Docker 服务过程中&#xff0c;我发现了一个非常容易被忽视但极具风险的安全问题——野草云的防火墙逻辑与 Docker 默认行为之间存在冲突&#xff0c;如果配置不当&#xff0c;可能会导致容器服务被意外暴露在公网&#xff0c;甚至绕过你设置的“拒…...

C++中高精度运算问题

前言&#xff1a;在备赛蓝桥杯时&#xff0c;遇到C处理数值较大的浮点数问题&#xff0c;特此记录一下。 C 的 std::string 类使用动态内存分配&#xff0c;其长度可以根据需要动态增加或减少&#xff0c;自动调整内存大小以适应字符串内容的变化。当字符串长度超过当前分配的…...

开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法

智能提示 为要绑定Lua的蓝图创建模板文件&#xff0c;这会在Content/Script下生成lua文件 然后点击生成智能代码提示&#xff0c;这会在Plugins/Unlua/Intermediate/生成Intenllisense文件夹 打开VSCode,点击文件->将工作区另存为。生成一个空工作区&#xff0c;放置在工程…...

前端快速入门学习4——CSS盒子模型、浮动、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;边距&#xff0c;边框&#xff0c;填充&#xff0c…...

在 ASP.NET Web Forms 项目中,编译后可能找不到 `Login.aspx.cs` 的源码文件的原因?

在 ASP.NET Web Forms 项目中&#xff0c;确实存在一种情况&#xff1a;编译后可能找不到 Login.aspx.cs 的源码文件。以下是对此现象的详细分析和解释&#xff1a; 1. 已知信息 您提供的 Web.config 文件显示这是一个 ASP.NET Web Forms 项目。在 ASP.NET 中&#xff0c;.asp…...

centos7 yum install docker 安装错误

1、错误信息&#xff1a; [rootlocalhost atguigu]# yum install docker 已加载插件&#xff1a;fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…...

spring mvc异步请求 sse 大文件下载 断点续传下载Range

学习连接 异步Servlet3.0 Spring Boot 处理异步请求&#xff08;DeferredResult 基础案例、DeferredResult 超时案例、DeferredResult 扩展案例、DeferredResult 方法汇总&#xff09; spring.io mvc Asynchronous Requests 官网文档 spring.io webflux&webclient官网文…...

Java项目集成大模型(通译千问)

1&#xff1a;打开阿里云搜索 通义大模型&#xff0c;然后点击丰富开发API接口。 2&#xff1a;可以看到有openAi和DashScope两种模式&#xff0c;我们这次采用DashScope方法&#xff0c;点击DashScope 3&#xff1a;点击获取Apikey 然后点击 前往我得Api-key跳转到控制台&…...

Lisp语言的安全协议

Lisp语言与安全协议的结合 引言 在信息社会的今天&#xff0c;数据的安全性和隐私保护愈发重要。随着网络攻击手段的不断演进&#xff0c;各种安全协议相继被提出与实现。与此同时&#xff0c;Lisp作为一种古老且灵活的计算机编程语言&#xff0c;虽然并不是主流的系统编程语…...

【图像处理基石】什么是自动曝光(AE)?

1. 什么是自动曝光&#xff08;AE&#xff09;&#xff1f; 自动曝光&#xff08;Auto Exposure, AE&#xff09;是一种通过调整相机参数&#xff08;如曝光时间、增益、光圈等&#xff09;使图像亮度达到目标值的技术。其核心是通过实时分析图像亮度&#xff0c;动态优化参数…...

清明假期间

1.思维导图 2.90题 3. #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory>using namespace std;class Weapon;class Hero{ private:int hp;…...

el-tabs添加按钮增加点击禁止样式

前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮&#xff0c;没有点击样式&#xff0c;用户感知不明显没有限制最大的tab添加数量&#xff0c;可以无限添加 调整目标&代码编写 调整目标…...

Elasticsearch DSL 中的 aggs 聚合

一、聚合的概述 Elasticsearch 的 聚合&#xff08;Aggregations&#xff09; 功能用于对数据进行多维分析和统计&#xff0c;支持从简单的指标计算到复杂的分组分析。以下是聚合的基本结构&#xff1a; {"aggs": { // 也可以使用"agg…...

API调用类型全面指南:理解基础知识

在当今快速发展的数字化环境中&#xff0c;API&#xff08;应用程序编程接口&#xff09;是不同软件应用程序能够无缝通信的基石。无论是开发移动应用、集成第三方服务&#xff0c;还是构建强大的Web平台&#xff0c;理解各种API调用类型至关重要。那么&#xff0c;API调用到底…...

华东师范​地面机器人融合空中无人机视角的具身导航!KiteRunner:语言驱动的户外环境合作式局部-全局导航策略

作者&#xff1a;Shibo Huang 1 ^{1} 1, Chenfan Shi 1 ^{1} 1, Jian Yang 2 ^{2} 2, Hanlin Dong 1 ^{1} 1, Jinpeng Mi 3 ^{3} 3, Ke Li 2 ^{2} 2, Jianfeng Zhang 1 ^{1} 1, Miao Ding 4 ^{4} 4, Peidong Liang 5 ^{5} 5, Xiong You 2 ^{2} 2, Xian Wei 1 ^{1} 1单位&#x…...

Ansible(6)——管理变量

目录 一、Ansible 变量&#xff1a; 1、什么是变量&#xff1a; 2、变量可能包含的值&#xff1a; 3、变量命名&#xff1a; 4、定义变量&#xff1a; 二、Playbook 中的变量&#xff1a; 1、在 Playbook 中定义变量&#xff1a; &#xff08;1&#xff09;最简单的定…...

Git常用问题收集

gitignore 忽略文件夹 不生效 有时候我们接手别人的项目时&#xff0c;发现有的忽略不对想要修改&#xff0c;但发现修改忽略.gitignore后无效。原因是如果某些文件已经被纳入版本管理在.gitignore中忽略路径是不起作用的&#xff0c;这时候需要先清除本地缓存&#xff0c;然后…...

构建高效多标签选择组件:从设计到实现

在现代Web应用中&#xff0c;多标签选择功能已成为常见需求&#xff0c;特别是在内容分类、文章标签、用户兴趣选择等场景。本文将深入解析一个完整的多标签选择实现方案&#xff0c;涵盖交互设计、核心功能和优化技巧。 组件功能概述 这个多标签选择组件提供以下核心功能&am…...

4.1论文阅读

一&#xff1a;PhDnet&#xff1a;一种用于遥感图像的新型物理感知去雾网络&#xff08;A novel physic-aware dehazing network for remote sensing images&#xff09; 论文链接 只是粗略读了一下&#xff0c;关于遥感图像去雾&#xff0c;圆形U--net&#xff0c;加入了物理…...

【渗透测试】Vulnhub靶机-HA: Armour-详细通关教程

下载地址&#xff1a;https://www.vulnhub.com/entry/ha-armour,370/ 目录 前言 信息收集 tftp获取&#xff08;spiderman&#xff09; 查看.htpasswd&#xff08;ant-man&#xff09; ssh欢迎信息提示&#xff08;hulkbuster&#xff09; 反弹shell 提权&#xff08;i…...

Flask使用MySQL数据库通过Flask-SQLAlchemy 迁移数据库,实际更新文件,但是提示没有检测到数据更新。

本地写了一个model的用户类&#xff0c;数据库连接信息正确&#xff0c;执行下面2条命令进行数据库迁移。 flask db migrate 生成迁移文件 flask db upgrade 执行迁移文件的升级 发现执行完后&#xff1a;提示没有检测到数据的更新 PS C:\Users\mu> flask db migrate IN…...

【leetcode100】前K个高频元素

1、题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: [1] 2、初始思路 2.1 思路 全排列&#xf…...

内网渗透-MySQL提权

MySQL提权 mysql的权限提升通常有两种&#xff1a; UDF提权&#xff08;常用&#xff09; 写文件提权启动项提权mof提权一、UDF提权 UDF 全称为user defined function&#xff0c;用户自定义函数 用户可以添加自定义的新函数到Mysql中&#xff0c;以达到功能的扩充&#xf…...

Hibernate核心方法总结

Session中的核心方法梳理 1、save方法 这个方法表示将一个对象保存到数据库中&#xff0c;可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。 需要注意的是&#xff1a;在save方法前设置OID是无效的但是也不会报错&#xff0c;在save方…...

DevOps 与持续集成(CI/CD)

1. DevOps 概述 DevOps(Development + Operations)是一种软件开发方法,强调开发(Dev)与运维(Ops)协作,通过自动化工具提高软件交付效率。其目标是: ✅ 提高部署速度 —— 频繁发布新版本 ✅ 减少人为错误 —— 通过自动化降低运维风险 ✅ 增强可观测性 —— 监控和日…...

下一代AI App架构:前端生成,后端消失

过去十年&#xff0c;Web 和 App 的开发范式基本稳定&#xff1a;前端负责交互体验&#xff0c;后端负责业务逻辑和数据管理。即使是“无服务架构”也只是将后端“拆散”而非“消失”。 但随着 AI 原生应用的兴起&#xff0c;特别是 大模型本地化、小模型部署、WebAssembly、L…...

告别过去,奔向未来

人生就是一个不断雕刻自己的过程&#xff01;一路走来&#xff0c;我们经历过酸甜苦辣咸&#xff0c;迷茫过&#xff0c;跌倒过&#xff0c;懈怠过……但是&#xff0c;我想说这又何妨&#xff01;一个成功人士的经历必定是跌跌宕宕&#xff0c;起起伏伏的。关键是我们要做到&a…...

AF3 Recycling机制

在 AlphaFold3中,输入数据的特征加工中生成了recycling 维度的数据,主要通过ensembled_transform_fns函数抽样得到不同的扰动的MSA、template特征等,类似于数据增强的作用。在数据集的加载和模型的训练中利用了这一维度的数据,增强了模型的稳定性和鲁棒性,避免单一预测结果…...

notepad++8.6.4安装及细节

notepad8.6.4下载安装&#xff08;附安装包&#xff09; 一、安装包下载1.1方法一&#xff1a;官网下载&#xff08;点击跳转&#xff09;1.2方法二&#xff1a;网盘链接分享8.6.4版本 二、安装过程细节2.1这里的组件建议全部勾选。点击“下一步”。2.2 勾选①&#xff1a;可以…...

谁该处理我的请假?——责任链模式

谁该处理我的请假&#xff1f;——责任链模式 一、生活中的责任链&#xff1a;请假审批流程二、责任链模式的核心特点三、代码实现&#xff1a;请假审批责任链四、工作中的实际应用场景五、框架中的经典应用六、模式本质理解 一、生活中的责任链&#xff1a;请假审批流程 想象…...

【NLP应用场景全解】自然语言处理如何改变世界?

自然语言处理作为人工智能的重要分支&#xff0c;正在加速改变各行各业。根据Statista预测&#xff0c;到2025年&#xff0c;全球NLP市场规模将达到438亿美元。本文将系统梳理NLP的主要应用场景&#xff0c;结合最新技术趋势&#xff0c;帮助你了解NLP技术的落地现状与未来发展…...

Hive 中书写SQL注意的地方

1.1 关于 DDL &#xff08;1&#xff09;创建带有主键约束的 Hive 表时报错。 Hive 目前还没有严格支持“主键约束”&#xff0c;创建带有主键约束的 HIVE 表时报了如下错误&#xff1a; SemanticException [Error 10326]: Invalid Constraint: syntax ENABLE/ENFORCED featu…...

Ubuntu 下 无界面环境 多进程/多线程 使用DrissionPage

使用wget “https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb” -O chrome.deb 安装chrome # !/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC000abcgmail.com file: dp.py time: 2025/2/20 20:22 desc:wget "htt…...

Opencv计算机视觉编程攻略-第十节 估算图像之间的投影关系

目录 1. 计算图像对的基础矩阵 2. 用RANSAC 算法匹配图像 3. 计算两幅图像之间的单应矩阵 4. 检测图像中的平面目标 图像通常是由数码相机拍摄的&#xff0c;它通过透镜投射光线成像&#xff0c;是三维场景在二维平面上的投影&#xff0c;这表明场景和它的图像之间以及同一…...

RocketMQ 01

今天是2025/04/06 21:31 day 18 总路线请移步主页Java大纲相关文章 今天进行RocketMQ 1,2 个模块的归纳 首先是RocketMQ 的相关内容概括的思维导图 1. 核心组件 1.1 NameServer 核心功能 服务发现&#xff1a;作为轻量级注册中心&#xff0c;管理所有 Broker 的地址和路由信…...

牛客周赛———字符串

题目如下 思路&#xff08;贪心&#xff09; >和<的位置是固定不变的&#xff0c;所以先处理这两个符号&#xff0c;然后再遍历一遍检查‘Z’&#xff0c;如果不符合条件将Z的位置改变正负性使其满足条件&#xff0c;然后遍历的时候记数答案就行了&#xff0c;注意s的首…...

在Hive中,将数据从一个表查询并插入到另一个表

1. 确认目标表结构 确保目标表已存在且结构与查询结果匹配。若不存在&#xff0c;需先创建&#xff1a; CREATE TABLE target_table ( id INT, name STRING ) PARTITIONED BY (dt STRING) STORED AS ORC; 2. 选择插入方式 覆盖插入&#xff08;替换现有数据&#xff0…...