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

网站文字模板设计公司logo免费设计生成器

网站文字模板,设计公司logo免费设计生成器,下载中心,娄底市网站建设目录 前言 问题分析 page buffers创建 page buffers丢失 Write-Protect Dirty Page w/o Buffers 问题解决 前言 这个问题发生在3.10.0-514.el7上#xff0c;并且在RHEL的知识库中快速找到了对应的案例以及解决方案#xff0c;但是#xff0c;理解问题如何发生和解决…目录 前言 问题分析 page buffers创建 page buffers丢失 Write-Protect Dirty Page w/o Buffers 问题解决 前言 这个问题发生在3.10.0-514.el7上并且在RHEL的知识库中快速找到了对应的案例以及解决方案但是理解问题如何发生和解决则着实费了些功夫。 RHEL的链接如下 RHEL7: kernel crash in xfs_vm_writepage - kernel BUG at fs/xfs/xfs_aops.c:1062! - Red Hat Customer Portal 调用栈为 [1004630.854317] kernel BUG at fs/xfs/xfs_aops.c:1062! [1004630.854894] invalid opcode: 0000 [#1] SMP [1004630.861333] CPU: 6 PID: 56715 Comm: kworker/u48:4 Tainted: G W ------------ 3.10.0-514.el7.x86_64 #1 [1004630.862046] Hardware name: HP ProLiant BL460c Gen9, BIOS I36 12/28/2015 [1004630.862703] Workqueue: writeback bdi_writeback_workfn (flush-253:28) [1004630.863414] task: ffff881f8436de20 ti: ffff881f23a4c000 task.ti: ffff881f23a4c000 [1004630.864117] RIP: 0010:[ffffffffa083f2fb] [ffffffffa083f2fb] xfs_vm_writepage0x58b/0x5d0 [xfs] [1004630.864860] RSP: 0018:ffff881f23a4f948 EFLAGS: 00010246 [1004630.865749] RAX: 002fffff00040029 RBX: ffff881bedd50308 RCX: 000000000000000c [1004630.866466] RDX: 0000000000000008 RSI: ffff881f23a4fc40 RDI: ffffea00296b7800 [1004630.867218] RBP: ffff881f23a4f9f0 R08: fffffffffffffffe R09: 000000000001a098 [1004630.867941] R10: ffff88207ffd6000 R11: 0000000000000000 R12: ffff881bedd50308 [1004630.868656] R13: ffff881f23a4fc40 R14: ffff881bedd501b8 R15: ffffea00296b7800 [1004630.869399] FS: 0000000000000000(0000) GS:ffff881fff180000(0000) knlGS:0000000000000000 [1004630.870147] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [1004630.870868] CR2: 0000000000eb3d30 CR3: 0000001ff79dc000 CR4: 00000000001407e0 [1004630.871610] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [1004630.872349] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [1004630.873072] Stack: [1004630.873749] 0000000000008000 ffff880070b03644 ffff881f23a4fc40 ffff881f23a4fa68 [1004630.874480] ffff881f23a4fa80 ffffea00296b7800 0000000000001000 000000000000000e [1004630.875223] 0000000000001000 ffffffff81180981 0000000000000000 ffff881bedd50310 [1004630.875957] Call Trace: [1004630.876665] [ffffffff81180981] ? find_get_pages_tag0xe1/0x1a0 [1004630.877417] [ffffffff8118b3b3] __writepage0x13/0x50 [1004630.878173] [ffffffff8118bed1] write_cache_pages0x251/0x4d0 [1004630.878915] [ffffffffa00c170a] ? enqueue_cmd_and_start_io0x3a/0x40 [hpsa] [1004630.879626] [ffffffff8118b3a0] ? global_dirtyable_memory0x70/0x70 [1004630.880368] [ffffffff8118c19d] generic_writepages0x4d/0x80 [1004630.881157] [ffffffffa083e063] xfs_vm_writepages0x53/0x90 [xfs] [1004630.881907] [ffffffff8118d24e] do_writepages0x1e/0x40 [1004630.882643] [ffffffff81228730] __writeback_single_inode0x40/0x210 [1004630.883403] [ffffffff8122941e] writeback_sb_inodes0x25e/0x420 [1004630.884141] [ffffffff8122967f] __writeback_inodes_wb0x9f/0xd0 [1004630.884863] [ffffffff81229ec3] wb_writeback0x263/0x2f0 [1004630.885610] [ffffffff810ab776] ? set_worker_desc0x86/0xb0 [1004630.886378] [ffffffff8122bd05] bdi_writeback_workfn0x115/0x460 [1004630.887142] [ffffffff810c4cf8] ? try_to_wake_up0x1c8/0x330 [1004630.887875] [ffffffff810a7f3b] process_one_work0x17b/0x470 [1004630.888638] [ffffffff810a8d76] worker_thread0x126/0x410 [1004630.889389] [ffffffff810a8c50] ? rescuer_thread0x460/0x460 [1004630.890126] [ffffffff810b052f] kthread0xcf/0xe0 [1004630.890816] [ffffffff810b0460] ? kthread_create_on_node0x140/0x140 [1004630.891521] [ffffffff81696418] ret_from_fork0x58/0x90 [1004630.892229] [ffffffff810b0460] ? kthread_create_on_node0x140/0x140 [1004630.892877] Code: e0 80 3d 4d b4 06 00 00 0f 85 a4 fe ff ff be d7 03 00 00 48 c7 c7 4a e0 88 a0 e8 61 66 84 e0 c6 05 2f b4 06 00 01 e9 87 fe ff ff 0f 0b 8b 4d a4 e9 e8 fb ff ff 41 b9 01 00 00 00 e9 69 fd ff ff [1004630.894245] RIP [ffffffffa083f2fb] xfs_vm_writepage0x58b/0x5d0 [xfs] [1004630.894890] RSP ffff881f23a4f94 问题发生的位置为 xfs_vm_writepage() ---...bh head page_buffers(page);... ---#define page_buffers(page) \({ \BUG_ON(!PagePrivate(page)); \((struct buffer_head *)page_private(page)); \}) 问题分析 page buffers创建 在Linux内核中buffer head的目的是为了对接在存储子系统和内存子系统的两个基本单位 sector这是存储的基本单位512字节page这个是内存的基本单位4096字节 文件缓存即page cache是存储子系统和内存子系统的结合部buffer_head对应的就是page cache中的一个sector当我们格式化文件系统把fsblock设置为512、1024、2048字节时或者操作raw block设备时每个page就会对应多个buffer_head 近些年512字节的fsblock基本被主流文件系统抛弃虽然还支持但是都以支持4K为主要的优化方向xfs甚至抛弃了buffer_head直接使用page作为IO操作的基本单位 那么buffer_head都是在哪些契机被创建呢 3.10.0-514.el7 【A】 generic_perform_write()- aops-write_begin()xfs_vm_write_begin()- grab_cache_page_write_begin()- __block_write_begin()- create_page_buffers() 【B】 do_shared_fault()- __do_fault()- vma-vm_ops-page_mkwrite()xfs_filemap_page_mkwrite()- __block_page_mkwrite()- __block_write_begin()- create_page_buffers()do_mpage_readpage() - block_read_full_page() //如果page中各个bh的状态不一致不如有些map有些unmap会进入到此路径分别对bh进行操作- create_page_buffers() 通常来讲【A】和【B】路径可以保证在对page做写操作之前保证page buffers已经创建它们分别代表是通过系统调用和mmap对文件进行写的场景 page buffers丢失 那本问题中被设置了dirty标记的page的buffer是如何丢失的呢 page buffer被释放的典型场景 3.10.0-514.el7shrink_page_list()- try_to_unmap()- try_to_release_page()- aops-releasepage()xfs_vm_releasepage()- try_to_free_buffers()- __remove_mapping() 在try_to_release_page()之前try_to_unmap()会被调用它会清理掉pte并且检测是否需要page dirty 3.10.0-514.el7try_to_unmap()- try_to_unmap_file()- try_to_unmap_one()- set_page_dirty() //pte_dirty() 这样就可以保证在执行try_to_release_page()之前给page及其buffer设置dirty 标记 3.10.0-514.el7xfs_vm_set_page_dirty() ---spin_lock(mapping-private_lock);if (page_has_buffers(page)) {struct buffer_head *head page_buffers(page);struct buffer_head *bh head;do {if (offset end_offset)set_buffer_dirty(bh);bh bh-b_this_page;offset 1 inode-i_blkbits;} while (bh ! head);} ---try_to_free_buffers()- drop_buffers()- buffer_busy()- atomic_read(bh-b_count) | (bh-b_state ((1 BH_Dirty) | (1 BH_Lock))) 如果buffer有dirty标记就不会被释放。另外有truncate和invalidate的场景也是类似的操作。 但是有一个机器特殊的场景 3.10.0-514.el7shrink_active_list() ---if (unlikely(buffer_heads_over_limit)) {if (page_has_private(page) trylock_page(page)) {if (page_has_private(page))try_to_release_page(page, 0);unlock_page(page);}} --- 这里对buffers直接进行释放。 Write-Protect 用对mmap的page的写操作是通过下面的机器触发的page fault并给page设置dirty的 3.10.0-514.el7generic_writepages()- clear_page_dirty_for_io()- page_mkclean()- page_mkclean_file()- page_mkclean_one()- pte_wrprotect()- pte_mkclean()handle_pte_fault()- do_wp_page() // pte_present() !pte_write()- wp_page_shared()- do_page_mkwrite()- xfs_filemap_page_mkwrite()- __block_page_mkwrite()- lock_page()- __block_write_begin()- block_commit_write()- set_page_dirty(page);- wait_for_stable_page(page);- wp_page_reuse()- set_page_dirty()- unlock_page() 在执行writepage之前在page_lock的保护之下通过clean_page_dirty_for_io()清除page的dirty  flags以及mmap的pte的写权限将相关page变为write-protect这样下次用户写这个page的时候就会触发pagefault内核在这里将相关的page设置为dirty在此期间会给page创建buffers这样就可以保证任何对mmap的写操作都可以通过page fault提交到writeback子系统中。 write-protect page fault发生时写操作还没有发生所以dirty bit并不会被设置而一旦写操作发生那么上面的代码所代表的过程一定会发生那么buffer也一定是具备的。 Dirty Page w/o Buffers 这里我们对比下ext4和xfs的writepages操作的调用栈 ext4_writepages()- mpage_prepare_extent_to_map()- pagevec_lookup_tag()- lock_page()- wait_on_page_writeback()- mpage_process_page_bufs()- mpage_submit_page()- clear_page_dirty_for_io(page)- ext4_bio_write_page()- set_page_writeback()- io_submit_add_bh()- clean_buffer_dirty()- unlock_page()xfs_vm_writepages()- generic_writepages()- write_cache_pages()- pagevec_lookup_tag()- lock_page()- xfs_vm_writepage()- lock_buffer()- xfs_add_to_ioend()- xfs_start_page_writeback()- clear_page_dirty_for_io()- set_page_writeback()- unlock_page() -----------------------HERE!!!! - xfs_submit_ioend()- xfs_start_page_writeback()- mark_buffer_async_write()- set_buffer_uptodate()- clear_buffer_dirty() 在ext4调用栈中Page Dirty和Buffer Dirty的清理都是在page_lock下进行的而xfs中buffer的清理是在page_lock之外这时我们如果引入page fault过程中的page_mkwrite调用链就会产生以下竞态 writeback workqueue user page fault() xfs_vm_writepages() xfs_filemap_page_mkwrite() lock_page() __block_page_mkwrite() clear_page_dirty_for_io() unlock_page()lock_page()xfs_vm_set_page_dirty()set_buffer_dirty()TestSetPageDirty() clear_buffer_dirty()end_page_writeback() 于是这里我们得到了一个page有dirty flags但是buffer全是clean的如果将此场景带入到ext4就不会有这种问题因为有page_lock的保护最终的结果要么是page buffer全部dirty要是全是clean。 到这一步产生了两个关键点 page dirty buffer cleandirty bit因为write-protect page fault已经发生过所以写操作已经完成 其中page dirty buffer clean将继续推进问题的发生 我们再回到shrink_active_list()它可能会调用try_to_release_page() try_to_free_buffers()- drop_buffers()- buffer_busy() // dirty or lock- cancel_dirty_page() page dirty buffer clean在这里因为buffer是clean的所以它可以被释放然后page的dirty也被清除了 但是此时pte中的dirty bit是存在的于是在后续的shrink_page_list()中 tshrink_page_list()- try_to_unmap()- try_to_unmap_file()- try_to_unmap_one()- set_page_dirty() //pte_dirty() page被设置dirty然后回收中止得到了一个page dirty no buffers 所以问题的关键是xfs_vm_writepage()中对page dirty和buffer dirty的clean操作并没有在page_lock的保护下。 问题解决 在搜索社区代码和Commit记录之后该问题在以下commit解决 commit e10de3723c53378e7cf441529f563c316fdc0dd3 Author: Dave Chinner dchinnerredhat.com Date: Mon Feb 15 17:23:12 2016 1100xfs: dont chain ioends during writepage submission -565,6 539,7 xfs_add_to_ioend(bh-b_private NULL;wpc-ioend-io_size bh-b_size;wpc-last_block bh-b_blocknr;xfs_start_buffer_writeback(bh);} 在该修改之后buffer clean操作也放到了page lock之下。
文章转载自:
http://www.morning.osshjj.cn.gov.cn.osshjj.cn
http://www.morning.yhrfg.cn.gov.cn.yhrfg.cn
http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn
http://www.morning.beeice.com.gov.cn.beeice.com
http://www.morning.brwp.cn.gov.cn.brwp.cn
http://www.morning.ntqnt.cn.gov.cn.ntqnt.cn
http://www.morning.dmjhp.cn.gov.cn.dmjhp.cn
http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn
http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn
http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn
http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn
http://www.morning.knlgk.cn.gov.cn.knlgk.cn
http://www.morning.lflsq.cn.gov.cn.lflsq.cn
http://www.morning.dnphd.cn.gov.cn.dnphd.cn
http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn
http://www.morning.hghhy.cn.gov.cn.hghhy.cn
http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn
http://www.morning.lsbjj.cn.gov.cn.lsbjj.cn
http://www.morning.dmldp.cn.gov.cn.dmldp.cn
http://www.morning.zyslyq.cn.gov.cn.zyslyq.cn
http://www.morning.qnypp.cn.gov.cn.qnypp.cn
http://www.morning.ghjln.cn.gov.cn.ghjln.cn
http://www.morning.fnmgr.cn.gov.cn.fnmgr.cn
http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn
http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn
http://www.morning.rlhgx.cn.gov.cn.rlhgx.cn
http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn
http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn
http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn
http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn
http://www.morning.qrqg.cn.gov.cn.qrqg.cn
http://www.morning.slqzb.cn.gov.cn.slqzb.cn
http://www.morning.smhtg.cn.gov.cn.smhtg.cn
http://www.morning.mxptg.cn.gov.cn.mxptg.cn
http://www.morning.mnlk.cn.gov.cn.mnlk.cn
http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn
http://www.morning.kzrbd.cn.gov.cn.kzrbd.cn
http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn
http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn
http://www.morning.rqnhf.cn.gov.cn.rqnhf.cn
http://www.morning.qnzgr.cn.gov.cn.qnzgr.cn
http://www.morning.xdwcg.cn.gov.cn.xdwcg.cn
http://www.morning.jfbpf.cn.gov.cn.jfbpf.cn
http://www.morning.mhfbf.cn.gov.cn.mhfbf.cn
http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn
http://www.morning.ydhmt.cn.gov.cn.ydhmt.cn
http://www.morning.pdghl.cn.gov.cn.pdghl.cn
http://www.morning.zpxwg.cn.gov.cn.zpxwg.cn
http://www.morning.brfxt.cn.gov.cn.brfxt.cn
http://www.morning.cfcdr.cn.gov.cn.cfcdr.cn
http://www.morning.rkbly.cn.gov.cn.rkbly.cn
http://www.morning.qglqb.cn.gov.cn.qglqb.cn
http://www.morning.blqsr.cn.gov.cn.blqsr.cn
http://www.morning.tyjp.cn.gov.cn.tyjp.cn
http://www.morning.xwlhc.cn.gov.cn.xwlhc.cn
http://www.morning.bnrff.cn.gov.cn.bnrff.cn
http://www.morning.plxnn.cn.gov.cn.plxnn.cn
http://www.morning.mpwgs.cn.gov.cn.mpwgs.cn
http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn
http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn
http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn
http://www.morning.plydc.cn.gov.cn.plydc.cn
http://www.morning.tktcr.cn.gov.cn.tktcr.cn
http://www.morning.tqsgt.cn.gov.cn.tqsgt.cn
http://www.morning.qdsmile.cn.gov.cn.qdsmile.cn
http://www.morning.wmfmj.cn.gov.cn.wmfmj.cn
http://www.morning.gqdsm.cn.gov.cn.gqdsm.cn
http://www.morning.jqlx.cn.gov.cn.jqlx.cn
http://www.morning.rfxg.cn.gov.cn.rfxg.cn
http://www.morning.nswcw.cn.gov.cn.nswcw.cn
http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn
http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn
http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn
http://www.morning.gswfs.cn.gov.cn.gswfs.cn
http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn
http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn
http://www.morning.hongjp.com.gov.cn.hongjp.com
http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn
http://www.morning.shinezoneserver.com.gov.cn.shinezoneserver.com
http://www.morning.kczkq.cn.gov.cn.kczkq.cn
http://www.tj-hxxt.cn/news/258596.html

相关文章:

  • 做民宿加盟哪些网站比较好海澜之家的网站建设目标
  • 衣服搭配网站建设网站建设续费多少钱
  • 龙岗的网站建设网站二级导航制作
  • 菜鸟必读 网站被入侵后需做的检测 2福州电商网站设计
  • 建网站后如何维护网站浏览历史能恢复吗怎么设置
  • 安阳网站建设推广优化网站不提交表单
  • 免费阅读网站软件俄罗斯乌克兰战争结束了吗
  • 宁波网站排名提升wordpress 博客地址
  • 网站开发去哪里找Wordpress调用搜索
  • 上海企业网站制作费用wordpress q a插件
  • 做棋牌网站的步骤怎么制作ppt 教程
  • 荣耀手机商城官方网站荣耀60pro国际型网站建设
  • 建筑网站汇总微信开发平台开发
  • 如何用wordpress制作网站附近哪有学编程的地方
  • 创业平台网站美丽乡村网站建设
  • 企业网站管理系统联系我们怎么添加wordpress阅读更改
  • 蓝田县住房与城乡建设局网站北京市建设工程审核网站
  • 网站运营是做啥的网络排名优化软件
  • 网站空间域名一次性收费还是一年一算建网站需要哪些硬件
  • 怎么做p2p网站推广软件下载
  • 销售网站内容设计方案wordpress表格放在哪里
  • 平板电脑可以做淘宝网站吗汕头网页制作公司
  • 美橙互联同类型网站赣州吧百度贴吧
  • 成都双流兴城建设投资有限公司网站装饰设计公司官网
  • 建设网站需要什么做网站的需求是吗
  • 网站的视频seo是什么职位的简称
  • 网站源码搭建网站高唐做创建网站的公司
  • 网站 颜色标准百度官网网站登录
  • 注册网站查询甜蜜定制app还有吗
  • 做医院网站公司电话网建会