pmd

内存管理(三):内核上电启动阶段的页表映射

孤者浪人 提交于 2020-05-06 23:14:27
Linux版本:4.14.74 目录 1 启动阶段所需页表 2 创建过程 2.1启动阶段的页表大小 2.2创建描述符函数 2.3 创建中间页表 2.4 section mapping 2.5 映射的整体流程 1 启动阶段所需页表 在kernel启动阶段,会创建两次地址映射 Identity mapping Kernel image mapping 在BootLoader以及uboot中,mmu功能是关闭的,操作的都是物理地址。为了提高性能,加快初始化速度,我们必须某个阶段(越早越好)打开MMU和cache,打开MMU之后操作的就是虚拟地址,为了从物理地址(Physical Address,简称PA)转换到虚拟地址(Virtual Address,简称VA)的平滑过渡,ARM推荐创建VA和PA相等的一段映射(例如:虚拟地址addr通过页表查询映射的物理地址也是addr)。这段映射在linux中称为identity mapping。 而为了执行kernel image,自然需要映射kernel image。 turn on MMU相关的代码被放入到一个特别的section,名字是.idmap.text,实际上对应上图中物理地址空间的IDMAP_TEXT这个block。这个区域的代码被mapping了两次,做为kernel image的一部分,它被映射到了__idmap_text

内存管理(四):DTB的映射

ⅰ亾dé卋堺 提交于 2020-05-06 10:09:27
Linux版本:4.14.74 目录 1 建立系统映射的过程 2 FIXMAP概念 3 FIXMAP的初步映射 4 DTB的映射 1 建立系统映射的过程 经过前面几章的内容,我们开启了MMU,为kernel image创建了映射,通过调用start_kernel setup_arch建立页表映射,读取kernel建立页表映射的代码和流程如下图所示,下面分章节对这三个部分进行说明 1. void __init setup_arch(char **cmdline_p) 2. { 3. pr_info("Boot CPU: AArch64 Processor [%08x]\n", read_cpuid_id()); 4. 5. ..... 6. 7. early_fixmap_init(); 8. early_ioremap_init(); 9. 10. setup_machine_fdt(__fdt_pointer); 11. .... 12. arm64_memblock_init(); 13. 14. paging_init(); 15. 16. .... 17. } 本文主要描述映射DTB的过程 2 FIXMAP概念 虽然可以通过kernel image mapping和identity mapping来窥探物理地址空间,但终究是管中窥豹,不了解全局

Eclipse代码规范工具-Checkstyle安装和使用

泄露秘密 提交于 2020-05-05 18:03:32
您首先可以参考这里: http://www.ibm.com/developerworks/cn/java/j-ap01117/index.html 那么首先您应该下载CheStyle: http://sourceforge.net/projects/eclipse-cs/files/updatesite/5.6.1/ 如果您无法访问上述网址,提示连接被重置或失败,可能是您的网络受到了限制。您可以直接从这里下载: http://download.csdn.net/detail/ab6326795/6398573 前段时间中心需要对外包的项目进行代码质量管理,所以在此对前段时间的工作做下总结。 现在很多开源工具都可以对代码进行规范审核,比较流行的有以下几款,大致给个简单介绍。 PMD:是一款采用BSD协议发布的Java程序代码检查工具,可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。 FindBugs:是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。 Checkstyle:是一个静态分析工具,检查Java程序代码。 Cppcheck是一种C/C++代码缺陷静态检查工具。   PC-Lint也是一种静态代码检测工具,检查C或C++。 目前,中心使用的是Checkstyle工具

Linux内存初始化(二)identity mapping和kernel image mapping

 ̄綄美尐妖づ 提交于 2020-05-05 13:48:50
一、前言 本文没有什么框架性的东西,就是按照__create_page_tables代码的执行路径走读一遍,记录在初始化阶段,内核是如何创建内核运行需要的页表过程。想要了解一些概述性的、框架性的东西可以参考 内存初始化 文档。 本文的代码来自ARM64,内核版本是4.4.6,此外,阅读本文最好熟悉ARMv8中翻译表描述符的格式。 二、create_table_entry 这个宏定义主要是用来创建一个中间level的translation table中的描述符。如果用linux的术语,就是创建PGD、PUD或者PMD的描述符。如果用ARM64术语,就是创建L0、L1或者L2的描述符。具体创建哪一个level的Translation table descriptor是由tbl参数指定的,tbl指向了该translation table的内存。virt参数给出了要创建地址映射的那个虚拟地址,shift参数以及ptrs参数是和具体在哪一个entry中写入描述符有关。我们知道,在定位页表描述的时候,我们需要截取虚拟地址中的一部分做为offset(index)来定位描述符,实际上,虚拟地址右移shift,然后截取ptrs大小的bit field就可以得到entry index了。tmp1和tmp2是临时变量。create_table_entry的代码如下: .macro create

里满是穿越岁月的爱的力

删除回忆录丶 提交于 2020-05-03 18:39:18
sdfsdf 服务网格作为一个改善服务到服务通信的专用基础设施层,是云原生范畴中最热门的话题。随着容器愈加流行,服务拓扑也频繁变动,这就需要更好的网络性能。服务网格能够通过服务发现、路由、负载均衡、心跳检测和支持可观测性,帮助我们管理网络流量。服务网格试图为无规则的复杂的容器问题提供规范化的解决方案 将供应链搬出中国,似乎成了过去两三个月新冠肺炎疫情衍生出的热门话题。 年初新冠肺炎疫情爆发,让中国供应链的生产活动几乎完全停顿,影响席卷全球:苹果的新 5G 有可能因疫情而延期推出,特斯拉新款芯片无法及时交付、陷入“芯片门”纠纷。其余像三星、小米、索尼等著名跨国企业,均受到供应链停摆的影响。 因此,shnghnz.answers.yahoo.com/question/index?qid=20200427223304AAwa1Na?CA9=31fua=54y answers.yahoo.com/question/index?qid=20200427223333AAyWVEN?LZ3=87zfq=90t in.answers.yahoo.com/question/index?qid=20200427223333AAyWVEN?RO1=15ads=33a malaysia.answers.yahoo.com/question/index?qid=20200427223333AAyWVEN

DPDK 网络加速在 NFV 中的应用

匆匆过客 提交于 2020-05-02 08:32:47
目录 文章目录 目录 前文列表 传统内核协议栈的数据转发性能瓶颈是什么? DPDK DPDK 基本技术 DPDK 架构 DPDK 核心组件 应用 NUMA 亲和性技术减少跨 NUMA 内存访问 应用 CPU 绑核技术减少上下文切换损耗 应用大页内存技术减少 TLB miss 应用 PMD 轮询技术减少网卡外设的硬件中断 应用 UIO 和内存池技术减少内存拷贝 应用无锁循环队列较少锁操作对 CPU 的开销 DPDK 优化技术 DPDK 性能影响因素 硬件结构的影响 OS 版本及其内核的影响 OVS 性能问题 内存管理 CPU 核间无锁通信 设置正确的目标 CPU 类型与模式 优化方案 DPDK 在 NFV 中的应用 参考文章 前文列表 《OpenStack Nova 高性能虚拟机之 NUMA 架构亲和》 《OpenStack Nova 高性能虚拟机之 CPU 绑定》 《OpenStack Nova 高性能虚拟机之大页内存》 《多进程、多线程与多处理器计算平台的性能问题》 《计算机组成原理 — 存储系统》 《计算机组成原理 — 输入输出系统》 《计算机组成原理 — 总线系统》 《Linux 的零拷贝技术》 《数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程》 传统内核协议栈的数据转发性能瓶颈是什么? 在 x86 结构中,处理数据包的传统方式是

Linux内存管理 (19)总结内存管理数据结构和API

与世无争的帅哥 提交于 2020-05-02 05:09:54
专题: Linux内存管理专题 关键词:mm、vaddr、VMA、page、pfn、pte、paddr、pg_data、zone、mem_map[]。 1. 内存管理数据结构的关系图 在大部分Linux系统中,内存设备的初始化一般是在BIOS或bootloader中,然后把DDR的大小传递给Linux内核。因此从Linux内核角度来看DDR,其实就是一段物理内存空间。 1.1 由mm数据结构和虚拟地址vaddr找到对应的VMA extern struct vm_area_struct * find_vma( struct mm_struct * mm, unsigned long addr); extern struct vm_area_struct * find_vma_prev( struct mm_struct * mm, unsigned long addr, struct vm_area_struct ** pprev); static inline struct vm_area_struct * find_vma_intersection( struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr) { struct vm_area_struct * vma = find_vma(mm

内存管理(二):页表映射过程

ε祈祈猫儿з 提交于 2020-05-01 14:29:34
Linux源码版本:4.14.75 我们知道在Linux中,操作的都是虚拟地址(有MMU的情况下),那么Linux是如何从虚拟地址找到物理地址的呢? 通过 内存管理(一):虚拟地址空间布局 我们知道,arm64支持64位地址宽度,但64bit并不是都用到了,linux最大支持的虚拟地址宽度为48bit,我们以39bit地址宽度为例 1、[63:39]指示页表的基地址寄存器,如果全为1,表示这个地址是内核空间地址,页表基地址寄存器是TTBR1_EL1;如果全为0,表示这个地址是用户空间地址,页表基地址寄存器是TTBR0_EL1 2、TTBR寄存器保存了第0级页表寄存器,0级页表寄存器有512个页表项,每个页表项8个字节,大小是4K,正好一页大小。通过虚拟地址的[38:30]作为索引查找相应的表项,表项中存储有下一级页表的基地址,0级页表每个页表项可以映射1G大小。 3、1级页表同样512个页表项,大小4K。通过虚拟地址的[29:21]作为索引查找相应的表项,表项中存储有下一级页表的基地址,1级页表每个页表项可以映射2M大小 4、2级页表512个页表项,大小4K。2级页表每个页表项映射一页4K大小,通过虚拟地址的[20:12]作为索引查找相应的表项,表项中存储了最终物理地址的[38:12],与虚拟地址的[11:0]组合之后就找到了最终的物理地址。 ARM64最大支持4级页表: PGD

Android App性能优化技能,看这篇就够了

允我心安 提交于 2020-04-26 11:28:27
一.何为App的性能 拿小车举例,大家知道什么是一辆小车的性能吗?同学甲说,是否省油、加速是否够快、开起来是否稳定、安全等等。 没错,那就是小车的性能。 那App的性能又是指什么呢?同学乙说,App启动是否够快,运行是否流畅,是否省电、省流量,安装包体积是否够小等等。 是的,这就是App的性能。 二.关注App性能,有什么用 我们知道,一辆小车性能越好,加速越快,跑的越稳,越省油。 App也一样,性能越好,运行更流畅、更稳定、更省流量、电量,包的体积也会更小,这能给用户带来优秀的体验,进而也会提升App的知名度。 既然App性能那么重要,那我们就要掌握App性能优化的技能了。 三.如何进行App性能优化 掌握App性能优化,是Android开发人员进阶中高级的必备技能。那如何进行App的性能优化呢? 我们可以从这几个方面入手:卡顿优化、内存优化、稳定性优化、耗电优化、安装包大小优化、数据库SQLite优化、网络优化。 接下来,我们逐一展开讲解。 1.卡顿优化 1.1卡顿场景 可分为四个大的方向: 1.1.1UI UI包括绘制和渲染。 1.1.2启动 启动可分为冷启动、热启动。 1.1.3跳转 跳转包括页面间跳转和前后台切换。 1.1.4响应 包括:点击、滑动、系统事件、按键。 1.2卡顿原因 可分为以下两方面原因: 1.2.1绘制任务太重 首先,我们要明白这样一个概念

基于Gradle使用阿里巴巴Java开发规约进行代码检查

拥有回忆 提交于 2020-04-18 05:14:31
阿里的开发规约插件是基于 PMD 进行的代码检测,而且已经有PMD的Gradle插件。 参考 gradle pmd插件的自定义规则的使用 这文章后,剩下的问题就是如何把阿里制定的Rule也引进来。 定制RuleSet 新建文件 etc/pmd/ruleset.xml,其内容如下: <?xml version="1.0"?> <ruleset name="Custom ruleset" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> <description> 自定义Rule set </description> <!-- 引入PMD制定的Rule, 来源于https://github.com/pmd/pmd/tree/master/pmd-java/src/main/resources/rulesets/java --> <rule ref="rulesets/java/android.xml"> <exclude