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

青海省公路建设管理局门户网站建设基础化学网站的经验

青海省公路建设管理局门户网站,建设基础化学网站的经验,用服务器做网站,wordpress当前网址在外界看来#xff0c;Linux 内核的内部似乎变化很少#xff0c;尤其是像内存管理子系统#xff08;memory-management subsystem#xff09;这样的子系统。然而#xff0c;开发人员时常需要更换内部接口来解决某些长期存在的问题。比如#xff0c;其中一个问题就是用来保… 在外界看来Linux 内核的内部似乎变化很少尤其是像内存管理子系统memory-management subsystem这样的子系统。然而开发人员时常需要更换内部接口来解决某些长期存在的问题。比如其中一个问题就是用来保护内存管理里的重要结构的锁的竞争问题这些重要结构是指页表page table和虚拟内存区域VMA, virtual memory area等。Liam Howlett 和 Matthew Wilcox 一直在开发一种新的数据结构称为 maple tree希望能取代目前用于 VMA 管理的数据结构。这个改动可能对内核内部结构造成巨大变化作者已经公布了一个改动很大的 patch set 来召唤 review。 Linux 是一个虚拟内存(virtual-memory)系统。每个进程的地址空间中包含多个虚拟内存区域VMA都是由 vm_area_struct 结构表示。每个 vma 都代表一块连续的地址空间并且这部分区域都是属于相同的内存类型也就是可以是 anonymous memory匿名内存内容并不与某个文件对应、memory-mapped file内存映射文件甚至是 device memory设备内存。从进程的角度来看一个 VMA 区域都是连续的而实际上底层的物理内存区域可能并不连续。此外整个地址空间在各个 VMA 之间是有空洞的当内核需要映射产生一个新的区域时例如在加载一个库文件或者响应 mmap()调用时内核就会从这些空洞分配出虚拟空间从而利用起来当然还是会预留一些未映射的 guard page有利于减少缓冲区溢出的危害。 我们的系统中几乎所有工作都涉及到内存所以对这些表示 VMA 的结构的操作必须要快。这些操作包括 lookup查找也就是找出哪个 VMA 是对应某个虚拟地址的、确认内存是否被 map 过或者寻找一个空闲区域用于分配新的 VMA以及修改例如增大堆栈空间。 VMA 目前是通过一个红黑树rbtreered-black tree的变种来管理的针对红黑树来说增加了一个额外的双向链表用来让内核遍历某个进程地址空间中的所有 VMA。内核开发者对这种数据结构的不满已经有一段时间了原因有很多rbtree 不能很好地支持范围ranges难以用 lockless不需要获取锁的方式来进行操作rbtree 需要进行 balance 操作这会同时影响多个 item而且 rbtree 遍历的效率很低这也是为什么需要一个额外的双向链表。 对 VMA 的操作会使用一个 lock 来保护具体来说是一个 reader/writer semaphore这个 lock 位于 struct mm_struct 中此前名为 mmap_sem2020 年 6 月的 5.8 版本将其改名为 mmap_lock。改名是为了能将对这个 lock 的操作都用 API 包装起来希望将来替换的时候方便。 用户经常会碰到争抢这个 lock 的情况尤其是那些在大型系统中使用多线程应用的用户。内核开发者已经多次讨论过这个问题在 2019 年的 Linux Storage, Filesystem, and Memory-Management Summit (LFSMM) 峰会上至少有三次讨论过这个问题。问题的核心是许多操作都需要获取 lock这包括几乎全部的涉及 page table 和 VMA 的操作。还有其他一些相关的结构事实上也被 mmap_lock 地保护起来麻烦的是相关文档也是缺失的。开发者们在做的事情除了将不相关的结构从 mmap_lock 保护下拆分出来之外还在考虑使用一个结构能允许 VMA 的访问变成 lockless 模式或者使用某种类型的 range lock。当时有人提出了 maple tree 结构作为解决方案之一但当时 maple tree 还处于早期开发状态代码还没有完成。 相关视频推荐 5种红黑树的用途从应用到内核场景的优缺点 红黑树、最小堆、时间轮、跳表多种方式实现定时器 7个方面讲解c/c后端开发技术让你对技术不再迷茫 免费学习地址c/c linux服务器开发/后台架构师 需要C/C Linux服务器架构师学习资料加qun579733396获取资料包括C/CLinuxgolang技术NginxZeroMQMySQLRedisfastdfsMongoDBZK流媒体CDNP2PK8SDockerTCP/IP协程DPDKffmpeg等免费分享 Introducing maple trees maple tree取这个名字可能是借用了枫叶的形状意指能走向多个方向与 rbtrees 有根本性的差异。它们属于 B-tree 类型( https://en.wikipedia.org/wiki/B-tree)也就是说它们的每个节点可以包含两个以上的元素leaf node叶子节点中最多包含 16 个元素而 internal node内部节点中最多包含 10 个元素。使用 B-trees 也会导致很少需要创建新的 node因为 node 可能包含一些空余空间可以随着时间的推移而填充利用起来这就不需要额外进行分配了。每个 node 最多需要 256 字节这是常用的 cache line size 的整数倍。node 中增加的元素数量以及 cache-aligned size 就意味着在遍历树时会减少 cache-miss。 maple tree 对搜索过程也有改进同样是来自于 B-tree 结构特点。在 B-tree 中每个 node 都有一些 key 键值名为 pivot它会将 node 分隔成 subtree子树。在某个 key 之前的 subtree 只会包含小于等于 key 的数据而这个 key 之后的子树只包含大于 key 的值并且小于下一个 key 值。 当然maple tree 的设计中也是按照 lockless 方式的要求来的使用 read-copy-update (RCU) 方式。maple tree 是一个通用结构可以用在内核的不同子系统中。第一个用到 maple tree 的地方就是用来替换 VMA 管理中用到的 rbtree 和双向链表。作者之一 Liam Howlett 在一篇博客中解释了设计由来( https://blogs.oracle.com/linux/the-maple-tree)。 Maple tree 提供了两组 API一个是简单 API 一个是高级 API。简单 API 使用 mtree_前缀来标记相关功能主结构 struct maple_tree 定义如下 struct maple_tree {spinlock_t ma_lock;unsigned int ma_flags;void __rcu *ma_root; }; 需要静态初始化static initialize的话可以使用 DEFINE_MTREE(name) 和 MTREE_INIT(nameflags)后者会的 flags 目前只定义了两个 bit 选项其中 MAPLE_ALLOC_RANGE 表示该树将被用于分配 range并且需要把多个分配区域之间的空间gap管理起来MAPLE_USE_RCU 会激活 RCU mode用在多个 reader 的场景下。mtree_init() API 也使用相同的 flags不过是用在动态初始化dynamic initialization场景 void mtree_init(struct maple_tree *mt, unsigned int ma_flags); 开发者可以用这个函数来 free 整个 tree void mtree_destroy(struct maple_tree *mt); 可以用三个函数来给树增加条目mtree_insert()、mtree_insert_range()和 mtree_store_range()。前两个函数只有在条目不存在的情况下才会添加而第三个函数可以对现有的条目进行覆盖。它们的定义如下 int mtree_insert(struct maple_tree *mt, unsigned long index,void *entry, gfp_t gfp); int mtree_insert_range(struct maple_tree *mt, unsigned long first,unsigned long last, void *entry, gfp_t gfp); int mtree_store_range(struct maple_tree *mt, unsigned long first,unsigned long last, void *entry, gfp_t gfp); mtree_insert()的参数 mt 是指向 tree 的指针index 就是 entry indexentry 是指向一个条目的的指针有必要的话可以利用 gfp 来指定新增 tree node 的内存分配参数memory allocation flag。mtree_insert_range() 会利用给出的 entry 数据来插入从 first 到 last 的一个 range 范围。这些函数成功时返回 0否则返回负值如果返回-EEXIST 就表示 key 已经存在。mtree_store_range()与 mtree_insert_range()接受的参数相同不同的是它会替换相应 key 的任何现有条目。 有两个函数可以用来从 tree 中获取一个条目或删除一个条目 void *mtree_load(struct maple_tree *mt, unsigned long index); void *mtree_erase(struct maple_tree *mt, unsigned long index); 要读取一个条目的话可以使用 mtree_load()它的参数是一个指向 tree 的指针 mt 以及所要读取的数据的键值 index。该函数会返回一个指向该条目的指针如果在 tree 中没有找到键值则返回 NULL。mtree_erase() 也是同样的语法用于从 tree 中删除一个 entry。它会从 tree 中删除给定的 key并返回相关的 entry如果没有找到则返回 NULL。 简单的 API 不止上面这些还有比如 mtree_alloc_range() 可以用来从 key space 中分配一个 range。而高级 API (用 mas_ 前缀标记出来了) 则额外增加了遍历整个 tree 的迭代函数以及使用 state variable 来访问后一个或者前一个元素。通过这种细粒度的操作开发者就可以根据需要来恢复中断了的搜索。还有供开发人员找到空闲区域或者对 tree 进行复制操作的 API。 Replacing the VMA rbtree (and more) patch set 中不仅仅是引入了 maple tree。着重需要指出的是这组 patch set 中有很大一部分是增加修改测试代码考虑到这个改动会带来的巨大影响以及新的数据结构在未来的重要性这些测试代码是非常值得鼓励的。 这组 patch set 中有 70 个 patch 将 VMA 的所有操作中的 rbtree 操作换成了 maple tree其中一个 patch 彻底在 VMA 中禁用了 rbtree。patch set 中另一部分代码移除了 VMA 里的双向链表。这个改动需要修改内核中所有直接地使用了 VMA 链表的代码体系架构相关代码core dump 代码program 加载代码一些设备驱动程序等当然还有 memory-management 代码。patch set 里还删除了 VMA cache用来跟踪每个进程最近访问过的 VMA从而加快 lookup 速度这是因为使用 maple tree 实现后速度更快不再需要 VMA cache 了。 Patch set 的第一封邮件中还包括了一些性能数据 不过结果有些难以理解。一些 microbenchmark 的结果说明性能提升了而其他一些数量较少则说明性能下降了。编译内核的时间与 5.10 内核本身相类似只是多执行了几条指令可能与添加的代码有关。Howlett 希望大家给些建议如何对这些结果进行更深入的分析。 Current status and next steps 目前 Maple tree 还处于 RFC 阶段有一些缺点。比如说目前的实现不支持 32 位系统或 non-MMU 的平台。不过这些代码已经可以实际用起来了内核开发者们可以研究一下从而决定是否符合他们期望的方向因为这组 patch set 并没有去掉 mmap_lock 。这个 patch set 太大了可能需要不少时间才能完成 review。
文章转载自:
http://www.morning.mglqf.cn.gov.cn.mglqf.cn
http://www.morning.ljngm.cn.gov.cn.ljngm.cn
http://www.morning.fpxms.cn.gov.cn.fpxms.cn
http://www.morning.crdtx.cn.gov.cn.crdtx.cn
http://www.morning.rbrd.cn.gov.cn.rbrd.cn
http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn
http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn
http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn
http://www.morning.lmdfj.cn.gov.cn.lmdfj.cn
http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn
http://www.morning.hfnbr.cn.gov.cn.hfnbr.cn
http://www.morning.zxznh.cn.gov.cn.zxznh.cn
http://www.morning.bxnrx.cn.gov.cn.bxnrx.cn
http://www.morning.sffkm.cn.gov.cn.sffkm.cn
http://www.morning.rmfw.cn.gov.cn.rmfw.cn
http://www.morning.sjqpm.cn.gov.cn.sjqpm.cn
http://www.morning.ybnzn.cn.gov.cn.ybnzn.cn
http://www.morning.bplqh.cn.gov.cn.bplqh.cn
http://www.morning.qtzk.cn.gov.cn.qtzk.cn
http://www.morning.ypzsk.cn.gov.cn.ypzsk.cn
http://www.morning.srgsb.cn.gov.cn.srgsb.cn
http://www.morning.lnckq.cn.gov.cn.lnckq.cn
http://www.morning.mxnrl.cn.gov.cn.mxnrl.cn
http://www.morning.kbqws.cn.gov.cn.kbqws.cn
http://www.morning.080203.cn.gov.cn.080203.cn
http://www.morning.nzcgj.cn.gov.cn.nzcgj.cn
http://www.morning.tstwx.cn.gov.cn.tstwx.cn
http://www.morning.dsgdt.cn.gov.cn.dsgdt.cn
http://www.morning.yldgw.cn.gov.cn.yldgw.cn
http://www.morning.xnnxp.cn.gov.cn.xnnxp.cn
http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn
http://www.morning.dztp.cn.gov.cn.dztp.cn
http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn
http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn
http://www.morning.zwwhq.cn.gov.cn.zwwhq.cn
http://www.morning.rdfq.cn.gov.cn.rdfq.cn
http://www.morning.jtqxs.cn.gov.cn.jtqxs.cn
http://www.morning.btmwd.cn.gov.cn.btmwd.cn
http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn
http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn
http://www.morning.fddfn.cn.gov.cn.fddfn.cn
http://www.morning.jqkjr.cn.gov.cn.jqkjr.cn
http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn
http://www.morning.cszbj.cn.gov.cn.cszbj.cn
http://www.morning.bpmtq.cn.gov.cn.bpmtq.cn
http://www.morning.qpntn.cn.gov.cn.qpntn.cn
http://www.morning.fslrx.cn.gov.cn.fslrx.cn
http://www.morning.phzrq.cn.gov.cn.phzrq.cn
http://www.morning.mqnbm.cn.gov.cn.mqnbm.cn
http://www.morning.sgnjg.cn.gov.cn.sgnjg.cn
http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn
http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn
http://www.morning.gywfp.cn.gov.cn.gywfp.cn
http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn
http://www.morning.tknqr.cn.gov.cn.tknqr.cn
http://www.morning.rwdbz.cn.gov.cn.rwdbz.cn
http://www.morning.knlbg.cn.gov.cn.knlbg.cn
http://www.morning.rghkg.cn.gov.cn.rghkg.cn
http://www.morning.zcsch.cn.gov.cn.zcsch.cn
http://www.morning.plwfx.cn.gov.cn.plwfx.cn
http://www.morning.fkfyn.cn.gov.cn.fkfyn.cn
http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn
http://www.morning.dgsx.cn.gov.cn.dgsx.cn
http://www.morning.pycpt.cn.gov.cn.pycpt.cn
http://www.morning.hqllj.cn.gov.cn.hqllj.cn
http://www.morning.tnwwl.cn.gov.cn.tnwwl.cn
http://www.morning.tktyh.cn.gov.cn.tktyh.cn
http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn
http://www.morning.krqhw.cn.gov.cn.krqhw.cn
http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn
http://www.morning.hpggl.cn.gov.cn.hpggl.cn
http://www.morning.rcttz.cn.gov.cn.rcttz.cn
http://www.morning.geledi.com.gov.cn.geledi.com
http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn
http://www.morning.fnwny.cn.gov.cn.fnwny.cn
http://www.morning.mlfmj.cn.gov.cn.mlfmj.cn
http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn
http://www.morning.fylsz.cn.gov.cn.fylsz.cn
http://www.morning.prplf.cn.gov.cn.prplf.cn
http://www.morning.sgmis.com.gov.cn.sgmis.com
http://www.tj-hxxt.cn/news/252843.html

相关文章:

  • 企业建站为什么选择网站定制做番号网站犯法吗
  • 可以做用户画像的网站上海网站制作团队
  • 与知名网站互连微信小程序开发教程pdf下载
  • 河北远策网站建设做互联网交易网站的条件
  • 建设银行门户网站上海千途网站建设
  • 网站开发术语wordpress登陆函数
  • jsp网站开发登陆常用的建站工具有哪些
  • 网站做跳转付款商洛城乡建设局网站
  • 网站网站开发需要多少钱越秀网站建设哪家好
  • 做衣服上哪些网站wordpress另一项更新
  • 宁波企业网站制作要多少钱哪个网站企业邮箱最好
  • 国家级示范校建设网站中国建设资格注册中心网站
  • 网站物理结构网站第三方统计代码
  • 网站回答问题app怎么做网站开发项目需要什么人员
  • 用二级域名做网站群网页设计素材网站有哪些
  • 厦门做返利网站的公司会员卡充值管理系统
  • 优惠券怎做网站上海网站建设域名
  • 网站开发好学嘛淮安百姓网免费发布信息网
  • 文字图片制作网站自己名下备案的网站
  • 结合公众号小店做网站php做网站要用到的技术
  • 关于网站建设外文文献用wordpress建立学校网站
  • 网站百度排名怎么做ps做游戏下载网站
  • 汽车集团网站建设福州seo顾问
  • 做网站的需要哪些职位北京ui设计app制作公司
  • 北京品牌高端网站建设公司网站设计的性能需求
  • 可信赖的做pc端网站交互设计案例100例
  • 此网站可能有dw php网站建设视频教程
  • 杭州企业云网站建设网页制作教程好看视频
  • 在网站怎么做收款二维码网站做淘宝客
  • 做网站维护要学些什么广东政务服务网