
Linux
文章平均质量分 85
羽飞
这个作者很懒,什么都没留下…
展开
-
TIPS 二进制程序暴露符号给动态链接库使用
在支持插件/扩展的C/C++系统中,通常会支持在程序运行时加载动态链接库。这时二进制程序会提供一些函数/接口让动态链接库调用,但是这些函数在二进制程序中又不会使用,导致在编译时编译器直接把这些符号删除了,加载链接库就会由于找不到符号而失败。本文将描述一种将仅在动态链接库中使用的符号如何暴露出来的方法。原创 2024-09-29 09:49:56 · 877 阅读 · 0 评论 -
munmap导致的BUG
一次线上BUG的分析过程原创 2017-01-29 18:06:46 · 4177 阅读 · 0 评论 -
Translation Lookaside Buffer (TLB)
CPU每次访问虚拟内存,虚拟地址都必须转换为对应的物理地址。从概念上说,这个转换需要遍历页表,页表是三级页表,就需要3次内存访问。就是说,每次虚拟内存访问都会导致4次物理内存访问。简单点说,如果一次虚拟内存访问对应了4次物理内存访问,肯定比1次物理访问慢,这样虚拟内存肯定不会发展起来。幸运的是,有一个聪明的做法解决了大部分问题:现代CPU使用一小块关联内存,用来缓存最近访问的虚拟页的PTE。这块内存翻译 2017-08-10 14:58:18 · 9217 阅读 · 0 评论 -
CBW/CWDE/CDQE扩展指令
CBW/CWDE/CDQE扩展指令使用符号扩展的方式对源操作数进行双倍扩展。CBW指令(将字节转换到字)复制源操作数的符号位(bit 7)到AH寄存器的所有位。CWDE(将字转换为双字)指令复制AX寄存器的符号位(bit 15)到EAX寄存器的高16位。 CBW和CWDE使用同一个操作数。CBW用于操作数大小是16位,CWDE用于操作数属性是32位。有些汇编器可能会强制区分操作数大小。而有些认为这原创 2017-11-02 16:38:01 · 15329 阅读 · 6 评论 -
python pkg_resource.DistributionNotFound: ReviewBoard
httpd部署ReviewBoard报错: DistributionNotFound: ReviewBoard网上查到很多解决方法,但是都不管用。自己查pkg_resources文档,发现pkg_resources文档说需要distribution需要是egg包,但是我用pip install的包是dist,所以不支持。但是我自己的虚拟机上,ReviewBoard包也是dist,没有...原创 2018-02-08 11:42:10 · 776 阅读 · 0 评论 -
SLUB 代码笔记
数据结构主要包含两个缓存对象(CPU的kmem_cache_cpu和内存节点numa的kmem_cache_node),还有一个描述本身slab数据的kmem_cache。CPU缓存struct kmem_cache_cpu { void **freelist; // 指向第一个空闲对象。 struct page *page; // 从哪个页面分配 ...原创 2018-07-17 13:20:52 · 930 阅读 · 0 评论 -
munmap参数错误导致进程空间异常
munmap传入错误参数len,系统不会帮忙校验有效性,而是能删则删,把[addr,addr+len]范围内的进程空间全部移除掉,不管中间是否有空洞。原创 2018-07-19 12:57:38 · 1309 阅读 · 0 评论 -
用户空间的SystemTap探测是怎么工作的
这篇文章介绍SystemTap在用户层的实现原理。对文档进行了部分摘抄翻译,原文易懂,建议阅读原文:How SystemTap Userspace Probes Work。另外介绍另一篇文档:动态追踪技术漫谈在给Bitcoin增加SystemTap时,对它的实现感到很疑惑,还有这会增加多少开销。 实际上,我想知道的是:使用SystemTap的可执行程序会增加什么指令? 使用st...翻译 2018-08-01 17:02:58 · 1184 阅读 · 0 评论 -
BUG FIX:进程退出时hang住
问题描述进程kill后迟迟不退出,pstack看到一直在等锁:Thread 1 (Thread 0x2b3db1e9d900 (LWP 83917)):#0 0x00002b3db6193f4d in __lll_lock_wait () from /lib64/libpthread.so.0#1 0x00002b3db61915ae in _L_lock_39 () from /li...原创 2018-10-26 11:01:48 · 1730 阅读 · 0 评论 -
页错误处理 Page Fault Handling
原文链接: http://www.informit.com/articles/article.aspx?p=29961&seqNum=5当一个进程要访问一个虚拟页,而这个虚拟页对应的PTE不在页表中, 或者这个PTE在某种方式上禁止访问,比如这页不存在或者访问模式跟这页的访问权限冲突,那么就会触发一个页错误。 页错误由CPU触发,page_fault_handler处理。因为Lin...翻译 2019-01-30 14:13:17 · 3436 阅读 · 2 评论 -
TIP linux下hook memset函数
linux下hook memset函数memset在libc.so中。hook可以帮助我们查找一些问题,比如hook memset可以根据某些memset参数特征记录一些信息,可以记录下调用栈信息。hook的代码:#define _GNU_SOURCE#include <stdlib.h>#include <stdio.h>#include <dlfcn....原创 2019-07-31 11:45:42 · 454 阅读 · 0 评论 -
core文件中查看切换出去协程的栈信息
使用协程时,如何在core文件中查看swapout的协程栈信息NOTE core文件中查看切换出去协程栈信息的方法,直接使用请跳到"实现"这一节.背景最近开始流行使用协程来更进一步提升C/C++程序的性能,可能是受go语言的影响。据说go是天生支持协程的。协程切换时直接发生在用户态,相对于线程,效率更高。而且基于“优秀的”协程库上编写同步模式的代码,可以达到异步的性能。但是协程在调试时...原创 2019-09-20 12:56:20 · 854 阅读 · 0 评论 -
Linux 从core信息中找到TLS信息
Linux X86-64环境上在core文件中查找TLS变量信息原创 2016-08-09 16:59:07 · 4308 阅读 · 0 评论 -
pthread_key泄露问题检测
本文记录了查找pthread_key_create创建失败或者TLS资源泄露问题的查找过程原创 2016-07-26 11:03:14 · 1185 阅读 · 1 评论 -
Linux中POSIX文件锁的实现
我试图通过个人的理解方式讲解Linux文件锁的实现,使用的内核版本是3.13.0。POSIX文件锁简介先简单说下什么是文件锁。Linux文件锁有两种:协同锁(有些成为建议锁)和强制锁。Linux读写文件时不会对协同锁做校验,只会对强制锁做验证。我只想看Linux内核如何同步多个进程同步读写,因此不考虑协同锁。对于强制锁,按读写属性分,有读锁和写锁,或者解释为共享锁和排斥锁。原创 2014-11-30 20:18:15 · 4004 阅读 · 3 评论 -
HAProxy内存池简介
HAProxy介绍HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。HAProxy内存池概述HAProxy的内存池按照类型分类,每种类型的内存池都有一个名字(name),用链表记录空闲链表,每种类型的内存池中的元素大小都是相等的,并且按照16原创 2015-03-22 12:35:43 · 1048 阅读 · 0 评论 -
HAProxy中描述符管理
本文试图描述HAProxy中对描述符的管理,以从中获取收益以应用到自己的程序中,并提高程序的效率。原创 2015-04-05 21:08:13 · 1201 阅读 · 0 评论 -
GCC对乘法的优化
这个标题有点大,我并没有看过GCC的源码,所以也不知道很准确的GCC对乘法的优化。但是我做了几个测试,发现GCC的强大之处,与君共享。 突然想到做这个测试,是因为前段时间有个面试,出了一个很基础的问题,y = x * 63怎么优化。这种是学校的学生都会做的问题: y = (x << 6) - x; 可是这种方法到底能提升多少效率?有数据有真相。 我测试的平台是在Linux 2.6.32,GCC原创 2015-05-09 10:58:08 · 2065 阅读 · 0 评论 -
GLIBC中NPTL线程实现代码阅读
glibc中thread的实现,加深对POSIX线程的理解原创 2015-05-15 20:09:32 · 5805 阅读 · 2 评论 -
添加Linux系统调用(ubuntu, 3.13.0)
Ubuntu上3.13版本添加Linux系统调用原创 2015-06-01 10:04:09 · 1902 阅读 · 0 评论 -
推测的删除锁(Speculative Lock Elision):实现高并发多线程执行
SLE全称Speculative Lock Elision,我称之为推测的删除锁。这是一篇关于SLE的论文翻译,但是因为本人英语功底很差,所以翻译的不通顺而且会有很多错误的地方。之所以把它发出来,是因为个人感觉SLE设计的很巧妙,而且没有搜索很多到关于SLE的文章,这里的目的只是为了让大家了解SLE。有兴趣的同学最好看论文原文。翻译 2015-05-24 20:31:30 · 2733 阅读 · 0 评论 -
TIP 链接错误 link error
TIP 链接错误 link error环境OS : linux 3.13.0gcc : 4.8.2code: sqlite-3.5.3详细信息执行的编译命令gcc -fpic -ftemplate-depth-64 -m64 -DLINUX -DLINUX_X86 -DOPENBOSS -DV20 -DGANSU -D_REENTRANT -D__OPENBOSS_NGMAKE__ -D_原创 2016-01-12 14:35:39 · 1156 阅读 · 0 评论 -
TIP: system errno 12 Cannot allocate memory
system/fork函数执行失败,错误码12,Cannot allocate memory,相关资料汇总原创 2016-01-14 16:08:53 · 6934 阅读 · 0 评论 -
Linux 性能测试工具
Linux 性能测试工具原创 2016-03-29 16:02:35 · 3372 阅读 · 0 评论 -
SystemTap介绍
SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。原创 2016-03-17 11:46:21 · 2933 阅读 · 0 评论