操作系统
文章平均质量分 58
maray
Snowflake 高级研发工程师,前蚂蚁集团 OceanBase 内核研发高级专家,产品负责人,本科毕业于华中科技大学,研究生毕业于中科院计算所。主要兴趣领域:互联网应用,大规模数据处理。
展开
-
如何在 C++ 中调用 python 解析器来执行 python 代码(七)?
沙箱上头,继续聊沙箱。今天这个沙箱叫 minijail,是。一搜不得了,是 Google 官方维护的沙箱,用在了 Chrome 中。原创 2023-03-09 10:56:47 · 448 阅读 · 0 评论 -
cache替换算法的研究
全文:http://www.wanfangdata.com.cn/qikan/periodical.Articles/jsjyjyfz/jsjy2000/0002/000213.htm Cache是个传统的课题,在处理机、操作系统和数据库等领域都有深入的研究.传统的cache替换算法有LFU(least frequency used)和LRU(least recently used)转载 2007-04-16 18:21:00 · 6340 阅读 · 2 评论 -
VC与YACC、LEX集成
在这里,将介绍由英国Bumble-Bee Software公司生产的Windows环境下的YACC和LEX集成环境Parser Generator。Parser Generator是Windows下YACC和LEX的实现。它包括一个图形用户界面,同时包括YACC和Lex两个版本,分别叫做AYACC和Alex。Parser Generator非常适合于与VC++集成。 在安装了Par转载 2007-04-03 16:28:00 · 4157 阅读 · 5 评论 -
关于 RDTSC 功能
64 位架构里,RDTSC 为了兼容性,做了个看上去比较低效的事情:TimeStamp 值复制到了 EDX:EAX 两个寄存器里,为了拿到最终值,用户还需要做一下拼接。原创 2022-03-21 14:56:09 · 357 阅读 · 2 评论 -
统计规律与数据编码
问题引入:有100万个字符串,他们长度各异,分布在[1,256]这个区间内。请设计一种方法来依次记录这些字符串的长度。要求:用尽可能少的空间来存储这些长度。例子:例如有下面四个串:hello (5)abc (3)abcd (4)good morning (12)可以用2字节来编码他们的长度:5、3编码到第一个字节,4、12编码到第二个字节,最原创 2009-04-21 21:33:00 · 1706 阅读 · 0 评论 -
fopen为什么慢之后继---用tcpdump抓包看看慢在哪里
本文背景:外国友人用Wireshark监听数据包的方式分析出来了为什么fopen打开部分url的时候很慢的原因。于是我也动手学习了一遍,有收获。抓包命令:tcpdump -i eth1 host 101.227.160.54 and port 80 -Ap -v -s10000命令解释参考:http://www.tcpdump.org/tcpdump_man.h原创 2015-10-24 21:53:47 · 2636 阅读 · 0 评论 -
与64位机的第一次亲密接触
今天阳光明媚,我与64位有个约会。 约会内容如下: 首先,main中创建producer和consumer两个线程,然后等待两个线程执行完毕。理论上讲,屏幕上依次会输出Point 1Point 2Point 3 Unfortunately,代码在打印出Point 2后Segment Fault Core掉了,我将两个pthraed_join()交换位原创 2009-04-21 21:36:00 · 1173 阅读 · 0 评论 -
在关键路径上,编码需谨慎
将大小为1G的src缓冲区中的数据复制到dst缓冲区中,并且跳过所有空格。下面两种循环风格,哪一种你更喜欢?哪种效率更高呢?Try it~-----------------------------------在关键数据路径上,如果需要对每一字节都进行检查,那么使用的检查方法需要格外谨慎。在上例中,I直接检查src[i]是否为空格,II采用了isspace函数来原创 2009-04-21 21:38:00 · 830 阅读 · 1 评论 -
Balance between code efficiency and code readability
List m = getList();m.get(10);m.get(11);Is the code above readable? yes! But is it effective? No!Efficient and readable code requires a neat data-structure.Efficient code requires a customized原创 2013-11-04 11:59:59 · 1391 阅读 · 0 评论 -
i386, x86, x86_64, IA-32, IA-64, 安腾, AMD64 的关系是什么?
x86 是一个统称,用来表示 XX86 指令集兼容的 CPU 架构, Intel 提出,但不专属于 Intel。代码里,i386 通常用来表示 32 位 x86 架构,x86_64 表示 64 位 x86 架构,和 CPU 厂商无关。x86 兼容架构:i386, x86, x86_64, IA-32,AMD64,Xeon,PentiumIA-64 兼容架构:IA-64, 安腾进化路径:Intel 时代:8008 -> 80386 -> 80486 -> 奔腾系列 -> 酷原创 2022-03-21 11:29:36 · 865 阅读 · 0 评论 -
【简介】一个捕捉Linux系统事件工具:systemtap
<br /><br />SystemTap于2005年出初版,已经历尽了5年多的发展,是一个相对成熟的工具。它可以用来捕捉Linux系统事件,例如:系统调用,jiffies的搏动,对proc文件系统的读写事件,对ext3的读写事件等等。<br /> <br />用户使用systemtap特有的脚本语言编写事件处理函数,systemtap将这些脚本进行编译转化成内核模块并插入到内核中,以检测和收集相应事件。SystemTap的基础是kprobes,所以,您的内核需要支持kprobes和kernel debug原创 2011-01-07 11:53:00 · 2093 阅读 · 0 评论 -
国产海光 x86_64 CPU 的 RDTSC 性能测试
RDTSC 是 x86 中最为轻量级的计时方案,虽然它不甚精确坑很多,但特定场景下依然好用。海光的 lscpu flags 中支持 RDTSC,本文通过一个简单 benchmark 来看海光的 RDTSC 实现效率(还不错)。原创 2022-03-21 10:51:05 · 5072 阅读 · 2 评论 -
能再变态点么?
一个700M的数据集文件包含了1,175,646条数据,其中1,175,645条数据的长度要么是0,要么是32,而居然在中间夹杂了一条,它的长度是30! 长度为0或32是通过观察得到的结论,30是完全未曾预料的,naturally,我的代码core掉了……为了定位这一条数据,我采用二分法一点点切文件,然后对切割所得的文件进行检查,step by step, 最后定位到出错的位置:3原创 2009-04-21 21:40:00 · 841 阅读 · 0 评论 -
验证BCL可靠性协议C version1.0[Incomplete]
/** PROMELA Validation Model* 协议层验证** 验证BCL可靠性协议C version1.0** Yuhuang* 2007-7-29*//** 本版本特点:采用集合点来通信,允许CHK、RTT、ACK、DATA丢包,实现了队列自动重发。* 加入了对传输介质的模拟。介质可以丢包,导致包失序。* 加入了对传输介质中存在延迟阻塞的模拟。包可以失序。*原创 2007-07-30 20:57:00 · 1673 阅读 · 0 评论 -
利用LD_PRELOAD给glibc库函数加钩子
网上已经有不少相关文章,具体可参考: 通过getuid、printf等函数讲解了基本的加钩子的方法:http://blog.chinaunix.net/u/9577/showart_1195703.html 如果你希望的不仅仅是替换掉原有库函数,而且还希望最终将函数逻辑传递到原有系统函数,那么你可能需要用到RTLD_NEXT。系统可能提示RTLD_NEXT未定义,这里给出了解决原创 2010-04-06 15:29:00 · 9670 阅读 · 0 评论 -
为什么SpinLock的实现中应该加上PAUSE指令?
当spinlock执行lock()获得锁失败后会进行busy loop(参考这段代码),不断检测锁状态,尝试获得锁。这么做有一个缺陷:频繁的检测会让流水线上充满了读操作。另外一个线程往流水线上丢入一个锁变量写操作的时候,必须对流水线进行重排,因为CPU必须保证所有读操作读到正确的值。流水线重排十分耗时,影响lock()的性能。 inline int rdlock()原创 2013-04-03 17:49:57 · 3962 阅读 · 0 评论 -
Qemu中生成针对具体体系结构的纯净代码的方法---利用GCC的-E选项
实验室正在研究一个叫做Qemu的项目,外国人写的初始代码。里面很多内容是我们不需要的,但是却参杂在我们关注的代码中。突然想到了一个编译命令-E ,它能够一下子就把那些不需要的代码过滤掉。以前几次开会大家都抱怨这个东西干扰信息太多,导致代码分析的连贯性总是被打断,进度特别慢。现在用我发现的那个命令处理下后,代码量只有原来的1/5,并且过滤了所有无关信息。--这个世界清净了。 gcc原创 2008-02-27 12:52:00 · 3111 阅读 · 0 评论 -
STREAM Benchmark及其操作性能分析
STREAM Benchmark及其操作性能分析文/raywill STREAM 是业界广为流行的综合性内存带宽实际性能 测量 工具之一。随着处理器处理核心数量的增多,内存带宽对于提升整个系统性能越发重要,如果某个系统不能够足够迅速地将内存中的数据传输到处理器当中,若干处理核心就会处于等待数据的闲置状态,而这其中所产生的闲置时间不仅会降低系统的效率还会抵消多核心和高主频所带来的性能提升因素。 STREAM 具有良好的空间局部性,是对 TLB 友好、Cache友好的一款测试。STREAM支持原创 2011-03-08 10:50:00 · 29263 阅读 · 3 评论 -
善待内存 [下]
其实,是我的错,我真的没有好好对她。我错了……我真的错了………… 关于《请善待她》,请猛点进入。它描述了我在coding过程中发现的一个现象:当malloc的内存总量大于可用空闲物理内存的时候,会出现与磁盘之间的换页,严重影响性能。于是我怀疑Linux的内存分配机制出了问题[见下图],并给出了一套解决方案。详见全文。+---------------------------------原创 2009-04-04 10:11:00 · 1088 阅读 · 1 评论 -
ticket spin-lock
Ticket spin-lock is an improved spin-lock implementation, which introduces FIFO mechanism for all lock users.Kernel API:__ticket_spin_trylock(arch_spinlock_t *lock) __ticket_spin_unlock(arch_sp原创 2013-11-04 13:39:30 · 1571 阅读 · 0 评论 -
善待内存
背景介绍现在有35块内存,每块200M,均采用malloc分配。在使用中,他们都被填入了10M~100M不等的数据,余下部分空闲。然后我们将这35块内存中的有数据部分复制到一块1G的大内存中(已知有效数据总和不超过1G)。 伪代码如下 #define MAX_PER_BLOCK_MEM_SIZE (1024*1024*200)#define MAX_TOT原创 2009-04-04 10:10:00 · 1164 阅读 · 4 评论 -
Promela BCL-6 A Protocol
/** PROMELA Validation Model* 协议层验证** 验证BCL可靠性协议A version5.0** Yuhuang* 2007-7-26*//** 本版本特点:采用集合点来通信,允许ACK、DATA丢包,实现了队列自动重发。* 加入了对传输介质的模拟。介质可以丢包,导致包失序。** 未完全模拟的问题:ACK、DATA失序问题*//************** 数原创 2007-07-26 19:05:00 · 1335 阅读 · 0 评论 -
编程中,cache_align 用在哪些场合?
内核 per_cpu 结构里struct X { int x,y,z; ....} CACHE_ALIGNED per_cpu[NR_CPUS]这是为了各个 cpu 操作自己的 X 结构时不要影响别的 cpu 的 cache多线程队列Queue{ QueueItem items_[N] int push_ CACHE_ALIGN; int pop_ CACHE_ALIGNED;}另外,如果 Queue 很复杂,成员很多,也可以考虑把 push_、pop_ 中间插入其它原创 2020-05-09 00:50:23 · 1106 阅读 · 0 评论 -
一致性哈希的设计理念
首先看一个最简单的hash函数#define HASH_RANGE 5int simple_hash(int key){ return key%HASH_RANGE}通过调用simple_hash对5、8、9三个值进行哈希,结果如下:simple_hash(5) = 0simple_hash(8) = 3simple_hash(9) = 4在实际应用中,HASH_RANGE是代表着一定的实际意义的,比如机器的台数。下面就以机器台数为例。假设系统中增加了一台机器,这个时候HASH_RANGE = 6原创 2010-08-19 22:00:00 · 1566 阅读 · 1 评论 -
ASAN 极简原理
物理内存有限,虚拟内存无限。ASAN 接管了应用程序的 malloc 流程每次分配内存,一定使用全新的虚拟地址,并且在地址两端加页保护OVER要点:因为虚拟内存资源是“无限”的,所以可以大量浪费。浪费体现在两个方面:分配过的地址空间,即使 free 过了,也不会再次分配给用户。用户感受到的就是内存分配器每次分配出来的内存地址总是比上一次的高。已经 free 过的内存区域这里称为 Dead Zone每次分配一段内存时,总会在两端预留一个页面,并且将这两个页面做读写保护。两端预留的.原创 2022-04-20 11:16:06 · 4097 阅读 · 0 评论 -
学习8086机器指令
想写一个8086的模拟器出来,第一步学习8086机器指令格式。解决了些问题,也还存在很多问题,拿出来讨论下。请先下载一个资料:OPCODES手册 http://byhh.net/f/CS/1175690465/opcodes.rar oo : Function 00 : If mmm = 110, then a displacement follows the operation;原创 2007-04-04 20:48:00 · 8284 阅读 · 11 评论 -
Promela BCL-6 B4.0 Protocol [Incomplete]
/** PROMELA Validation Model* 协议层验证** 验证BCL可靠性协议B version4.0** Yuhuang* 2007-7-27*//** 本版本特点:采用集合点来通信,允许CHK、RTT、ACK、DATA丢包,实现了队列自动重发。* 加入了对传输介质的模拟。介质可以丢包,导致包失序。* 加入了对传输介质中存在延迟阻塞的模拟。包可以失序。*原创 2007-07-27 19:56:00 · 1553 阅读 · 0 评论 -
IRQ共享原理
IRQ lines are a limited resource. A simple way to increase the number of devices a system can host is to allow multiple devices to share a common IRQ. Normally, each driver registers its own handl原创 2009-09-17 15:48:00 · 2571 阅读 · 0 评论 -
内存访问控制论文集
如何有效检测野C/C++指针访问,并在第一时间 core 出现场?原创 2022-09-14 15:06:12 · 183 阅读 · 0 评论 -
VSS是个不错的东西~
$/LexAly/LexAly.cpp***************** Version 4 *****************User: Raywill Date: 07-06-20 Time: 1:21Checked in $/LexAlyComment: 1.0版本完成。实现既定功能。可很好地识别C语法子集Changes:129 Change: int ma原创 2007-06-20 01:23:00 · 1520 阅读 · 0 评论 -
LSE配置备忘
通过摸索,总结出LSE(Liberty Sim Envi)编译可视化执行的一中方法。本文是用LSE自带的IA64的例子来做的。首先我是使用标准的ls-build、ls-link来做,build可以通过,但link阶段报告visualizer相关的函数找不到。注释所有visualizer相关的函数后link通过,生成Xsim可执行文件,可以在命令行下跑IA64的程序了。是什么原因visu原创 2008-03-07 12:49:00 · 1115 阅读 · 0 评论 -
一个简单的C语言词法分析与语法分析器【原】
词法分析可识别内容:标识符:id数字:num关键字:int,char,if,else,while,do,for标号:, , . , ;算术运算符号:=,+,-,*,/,&,!,|,&&,||关系运算符:=,>,==,!=注释://内码定义:单个符号,如{,+,*,> 等,均使用其ascii码做内码,占双或多个字节的符号(包括保留字,标号,数字,运算符等)为原创 2007-06-20 01:20:00 · 26887 阅读 · 10 评论 -
cpu.cfs_quote_us 和 cpu.shares 同时使用的效果
Ceiling enforcement can be used for cases when a hard limit on the amount of CPU that a cgroup can utilize is required当一个资源组里,同时设置了 cfs_quote_us 和 shares,会怎样呢?下面通过场景来回答这个问题。场景 1假设系统有3 个 CPU 核,有2个资源组 A、B,配置如下:A.shares : B.shares = 2:1A 用 2 个 CPU、B.原创 2022-04-14 20:04:42 · 1082 阅读 · 0 评论 -
MIPS系列笔记-CP0 Hazard
CP0 hazard Because resources controlled via Coprocessor 0 affect the operation of various pipeline stages of a MIPS32 processor,manipulation of these resources may produce results that are not detec原创 2009-02-14 21:37:00 · 6110 阅读 · 5 评论 -
面向对象的存储设备
本周举行的存储网络世界大会上显露的一个趋势值得我们注意,那就是一种端到端的存储技术将会取代有十年以上历史的SCSI块存储技术。希捷(Seagate)、Emulex和IBM共同进行了OSD(Object-Based Storage Devices,面向对象的存储设备)联合技术演示。面向对象的存储(Object-Based Storage)对现有SCSI命令集加以扩展,从而把更多的功能和智能从转载 2007-07-08 22:33:00 · 4337 阅读 · 0 评论 -
gdb调试常用命令,attach,br,n,bt
在Oceanbase调试中,必须用到gdb,将常用命令搜集记录如下:1. attach: 用gdb调试一个正在运行中的进程gdb PID2. br: 设置断点br filename:line_numbr namespace::classname::func_name3. n: 单步跳过 s: 单步进入4. finish:执行到函数retun返回5. lis原创 2012-02-01 22:26:01 · 19751 阅读 · 0 评论 -
CGROUP CFS 调度中的 period,burst 概念
Burst 概念用请假打个比方(来自阿里云文档):一年10天年假,结果突然今年家里有突发事件,需要请假30天,那么就把明年、后年的年假借用过来。明年后年就不要再休假了。最多能借多少年假呢?cpu.cfs_burst_us 来控制。先看一个例子:If period is 250ms and quota is also 250ms, the group will get1 CPU worth of runtime every 250ms.# echo 250000 > cpu.cfs_quo.原创 2022-04-14 19:19:10 · 1137 阅读 · 0 评论 -
cgroup cpu 子系统参数深入理解
shares这个容易理解,无论 cpuset.cpus 中有多少个 cpu,它都是按照比例用。cpu.cfs_quota_us这个就有点坑了,用起来会有些费劲。8核机器,ap tasks 里有 20 个线程并行执行,设置 cpu.cfs_quota_us 为 30000(period 为 100000),预期是 cpu 能用到 30% * 8 = 240%,而实际上只用到了 30%。也就是说,20个线程共享 30% 的 cpu。[xiaochu.yh ~/tools/cgroup] $cat /sy原创 2020-08-28 18:05:20 · 1819 阅读 · 0 评论 -
cgroup 实验记录
cgroup 目录操作技巧嵌套结构需要后序递归删除[xiaochu.yh ~/tools/cgroup] $rmdir /sys/fs/cgroup/cpu/oceanbase/deadloop2rmdir: failed to remove ‘/sys/fs/cgroup/cpu/oceanbase/deadloop2’: Device or resource busy[xiaochu.yh ~/tools/cgroup] $# 先删 child,才能删 parent[xiaochu.yh原创 2020-08-27 20:24:12 · 799 阅读 · 0 评论 -
再思linux内核在中断路径内不能睡眠/调度的原因(2010)
Linux内核中断路径中不能睡眠,为什么?这里就行了很深入的讨论,值得一看:http://bbs2.chinaunix.net/viewthread.php?tid=1618430但是,他们的讨论最后没有得出一个明确的结论。其中,cskyrain在8楼的思考触及到了一个要点,但是没有深入展开:cskyrain 发表于 2009-11-24 20:36中断处理程序为什么不能阻塞休眠???以前真没认真思考过!一直认为中断处理函数不能休眠的是天经地义的,可从没认真思考过问什么不能休眠,阻塞。最近看了一原创 2010-07-28 12:14:00 · 20427 阅读 · 0 评论