自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

liangll的博客

liangll的博客描述

  • 博客(39)
  • 收藏
  • 关注

转载 【GCC】GCC设置部分代码的优化选项

Function Specific Option Pragmas,在特定代码前保存当前的编译选项,然后对特定的代码使用O0优化级别,最后再恢复之前保存的编译选项。参数值可以是数字,也可以是字符串。以O开头的字符串被认为是一个优化选项,其他的选项以-f开头。GCC可以对部分代码设置不同的优化选项,在编译时使用其指明的优化选项,而不用编译命令里指定的优化参数。原文地址:https://www.cnblogs.com/DF11G/p/14421342.html。有两种方法可以实现该功能。

2023-11-29 22:46:45 350

翻译 【翻译】File Caching in Distributed File Systems

原文:https://www.tutorialspoint.com/file-caching-in-distributed-file-systems。

2023-04-24 12:20:05 156

原创 fuse:纠结的page下刷流程之fuse_writepage_in_flight

关于奇葩的4.19版本的fuse_writepage_in_flight

2023-02-27 14:23:36 406

原创 【无标题】

从MySQL 5.7.5开始,buffer pool以chunk为单位进行管理,多个chunk组成一个instance。通常一个mysql实例会包含1到多个buffer pool的instance。既然InnoDB的buffer pool自定向下分为了四层逻辑,初始化自然也是按照这个顺序进行。设置一些全局变量,根据buf_pool_size总量和instance数量计算单个instance的size,多次调用buf_pool_init_instance创建指定数量的实例,每个instance对象的类型为;

2022-06-20 23:21:56 148

原创 <simple,fast,and practical non-blocking and blocking concurrent Queue Aligorithms>的fifo Queue实现

Maged M. Michael和Michael L. Scott于1996年发表的论文。最有价值的部分是完善了Valois于1995年论文中实现的lock-free fifo queue。从之前的分析可知,Valois的实现存在的问题是Tail指针可能在很长一段时间内都没有指向真正的last node。Scott在Introduction中详细描述了Valois的问题:Unfortunately, the algorithm allows the tail pointer to lag behin

2022-02-07 21:13:01 516

翻译 给翻译翻译什么叫TMD <Ringing in a new asynchronous I/O API>

虽然内核从2.5就开始支持异步IO(AIO),但是长久以来用户一直对现有实现充斥着抱怨。目前的AIO接口不但难用也非常低效,而且并不是所有类型的IO都得到了完善的支持。现在,随着Jens Axboe提出的名为io_uring的新接口的引入,这种情况也许会得到改善。正如名称所展现的那样,io_uring引入了内核最需要的组件:环形缓冲区。设置一个完整的AIO实现需要包含对操作的提交,以及在未来某个时间点对完成数据的收集。io_uring通过两个环形缓冲区分别实现提交队列和完成队列来达到以上目的。应用程序的

2022-01-30 14:43:48 141

原创 <Implementing Lock-Free Queues> -- Linked list Implementations

Valois在94年写的文章,给出了用链表和数组实现的无互斥操作的FIFO Queue,并基于此给出了解决CAS所存在的ABA问题的方案。本文仅关注该文章中的Linded list Implementations部分。一 概念和背景Lock-Free数据结构的一个特征是较慢(slow)或者处于停止状态(stopped,例如被tracing的)的线程不会导致其他线程无法访问该数据结构实例。这里的表述需要和Non-blocking algorithm的概念结合起来理解,数据结构的Lock-Free强调对.

2022-01-27 17:54:46 751

原创 【C++】阻止类被实例化

不想一个类被实例化通常有两个目的:抽象类和工具类抽象类实现该类的的就是想成为一个抽象类,抽象类一般只被继承,不能被实例化,例如最基本的例子【动物类】是一个抽象类;【猴子类】【猫类】【狗类】这三个类继承自【动物类】;【猴子类】【猫类】【狗类】可以被实例化;【动物类】不能被实例化;这种类更多的是用来定义接口,而完全不关心实现。工具类这种类提供一些功能但是一般不需要实现成一个实体,感觉上这种类更多的像是发挥了namespace的作用,或者说把一些功能模块化,体现隔离或者解耦思想。例如一个所谓

2021-09-27 23:24:11 2511

原创 fuse ko background queue机制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?fuse_connfuse_io_priv二、使用步骤1.引入库2.读入数据总结前言内核和backend的交互效率一直是fuse架构中比较核心的问题,为了尽量提高交互效率fuse ko做了很多细节上的努力,虽然整体上来看依然是然并卵。其中一些feature依然值得学习,比如background queue。本文基于内核版本4.19来分析下fuse ko的background queue组件。一

2021-07-18 21:17:24 553 1

原创 mysqld的信号处理系统

一. mysqld的信号处理mysqld的信号处理部分分为两大部分逻辑:信号处理初始化:my_init_signals(); 信号处理工作线程的创建:start_signal_handler();说白就是把将对信号的异步处理转换成同步处理,也就是用一个专门的线程来“同步地等待”信号的到来并进行处理,而其它的线程可以完全不被该信号中断/打断(interrupt)。这样就在相当程度上简化了在多线程环境中对信号的处理。可以保证主要的线程不受信号的影响。这样整个进程对信号就可以完全预测,因为它不再是异步

2021-06-13 20:51:20 259

原创 shell脚本函数return

function fc { return 200}ret= fcecho $ret

2021-06-12 18:57:20 785

原创 gmock试用

萌新来体验一下gmock。去https://github.com/google/googletest.git上clone下来

2021-05-28 19:45:06 172

原创 leetcode 链表题总结

链表题目是手撕常见题,这里针对链表题做一些总结。主要关注Easy和Medium难度,实际遇到Hard就认命吧。在链表题目中有这么几个注意点:指针丢失典型场景就是节点插入,例如在a和b节点间插入x错误的写法:a->next = x;x->next = a ->next;这比较符合人脑本能,我们人肉插队也是这么个思考逻辑,大家想想每次排队干个啥,是不是大多数人总是本能的先确定我要插在哪个哥们后面,看准了那哥们儿后背直接快准狠贴上去,然后再回头给后面的b找个借口。但是在代码

2021-05-05 22:55:52 285

原创 fd_clone给fuse带来了什么

fd_clone给fuse带来了什么查看fuse protocol,可以看到如下的表述Multi-ThreadingBackground: When a file is opened, the Linux kernel creates a "file description" for the I/O state, and returns a "file descriptor" to userland. That descriptor can be freely passed to the du

2021-01-17 14:54:42 579

原创 innodb学习笔记(一)  aio的使用

innodb学习(一)aio的使用这里先以mysql 5.7.26版本进行分析。innodb可以配置aio线程的数量,在my.cnf中可以看到读线程和写线程数量的配置,这里一例各自为8。实际代码中srv0start.cc负责aio的初始化,这里实际对应srv_n_read_io_threads和srv_n_write_io_threads两个参数;当然除了指定的读线程和写线程外,还有一个log io thread和ibuf io thread。所以实际的io线程总数就是:srv..

2020-10-04 14:17:50 731

原创 intxx_t/uintxx_t都在哪里

intxx_t/uintxx_t都在哪里uint8_t, int64_t, uint32_t诸如此类的类型,都是从C99开始通过typedef定义的,在标准头文件stdint.h里,目的主要是为了解决跨平台时不同的平台会有不同的字长导致的一些代码上的混乱;在C++11中,这些定义被放到了标准头文件cstdint中,见https://en.cppreference.com/w/cpp/header/cstdint。实际在写代码时,由于很多C++的标准头文件其实里面也include了cstdint,所以

2020-09-02 12:51:54 718

原创 文件系统--create和mknod什么关系

mknod系统调用 是没有所谓的create系统调用的,只有mknod系统调用。mknodat和mknod两个syscall实际都调用do_mknodat()函数。 do_mknodat()都干啥呢。---------------------------------------------------namei.clong do_mknodat(int dfd, const char __user *filename, umode_t mode, unsigned i...

2020-08-24 14:54:41 607

原创 glibc 2.17的fread代码路径

先看一下fread()吧。不玩儿虚的直接glibc搜代码,在libio/iofread.c里:_IO_size_t_IO_fread (buf, size, count, fp) void *buf; _IO_size_t size; _IO_size_t count; _IO_FILE *fp;{ _IO_size_t bytes_requ...

2020-04-23 15:27:51 501

原创 docker学习2:image id和image digest的生成及存储

2019-04-18 14:40:36 4047

原创 effective C++读书笔记--【条款07:为多态基类声明virtual析构函数】

问题base class的指针p,指向一个derived class,如果:base class带着一个non-virtual析构函数; derived class对象经由这个base class指针被删除;这种情况一旦发生,结局就是:其结果未有定义----实际执行时通常发生的是对象的derived成分没有被销毁解决办法解铃还需系铃人,作者说冤有头债有主,即然罪魁是bas...

2019-04-01 21:10:14 680

原创 effective C++读书笔记--【条款06:若不想使用编译器自动生成的函数,就该明确拒绝】

蓝图这条其实基本上就是针对copy构造函数和copy assignment操作符这两个函数的,为什么这么说呢,其他的函数,不想用的话,不要声明不要定义就完了,但是copy构造函数和copy assignment操作符不声明不定义的话编译器会自动整一套public的出来,所以这让人比较为难,作者给出了两个方案:声明为private,但是不予以定义; 使用Uncopyable base cl...

2019-03-31 21:42:16 143

原创 effective C++读书笔记--【条款05:了解C++默默编写并调用哪些函数】

蓝图码农没干 -->编译器代劳 -->编译器什么时候动手 -->编译器的劳动产出的特殊之处 -->编译器的copy assigment的坑空类作者提出了一个所谓的“空类”的概念,对于普通码农来讲,空结构体可能更易...

2019-03-31 18:09:37 177

原创 golang打印当前package name

有的时候需要在程序运行中打印当前package name,比如一些log系统,在每条log中希望打印出是在哪个pkg内(当然打印文件名也是可以的)。网上找了找,基本上也是先用runtime找到调用文件,然后通过path.Dir来找上级文件夹名,虽然也可以,但是总觉有点“取巧”。见:https://stackoverflow.com/questions/32163425/golang-how-to-...

2019-01-28 16:03:50 3720

原创 protobuf试用(C++)

书写proto文件主要根据https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/文章来操作关于grpc官方示例的解读:http://doc.oschina.net/grpc?t=57966试用嘛,就是这么简单:$more lm.helloworld.protosyntax = "proto2";package lm;me...

2018-12-30 19:54:23 1309

原创 cronolog日志切分工具基本使用

安装略过,用ping命令来做列子。需要执行的shell为pingTst.sh内容如下,简单到不能再简单:#!/bin/bashping 127.0.0.1命令行执行命令:./pingTst.sh |cronolog -l ./ping.log ./ping.log.%Y-%m-%d-%H &解释一下:1.脚本pingTst.sh的输出管道到cronolog;...

2018-10-31 10:56:49 824

原创 《Docker源码分析》对照v1.12.6版本代码(1):9.5.3 执行镜像下载

在Docker镜像下载环节实现Docker镜像的下载,源码位于/docker/distribution/pull_v1.go,如下:-------------------------------------------------------------docker/distribution/pull_v1.gofunc (p *v1Puller) Pull(ctx context.Con...

2018-09-13 21:15:53 633

原创 docker学习1:存储驱动--overlay(1)概览

概念事情是这样的:OverlayFS是一个类似于AUFS的堆叠文件系统,据说相比AUFS更加简单,效率更高,2014年合入3.18版本内核主线; 针对这个OverlayFS,Docker提供了一个对应的存储驱动程序,唤做overlay,后来给改进改进又出了个overlay2; 所以,OverlayFS是linux内核提供的一种文件系统,而overlay和overlay2是Docker针...

2018-09-11 19:42:44 369

原创 docker源码学习1:main入口函数(1)

最近参与docker相关项目,用的docker版本是v1.12.6,正好想学习docker源码,市面上关于docker源码分析的书暂时只有《Docker 源码分析》这一本(后面简称《分析》)。不过正文p2就来了句“本书关于Docker的分析均基于Docker 1.2.0版本的源码”,docker源码现在变化频率非常大,1.12.6的代码肯定已经大不一样了。通常像我一样的菜鸟码农学习源码第一件事...

2018-09-10 17:30:36 1898

原创 leveldb源码学习2--Put操作--1)总体流程

Put操作的含义和接口定义Put操作是levelDB对用户提供的一个接口,作用是把一个kv对写入到库中,定义为:---------------------------------------------------------------------------------db_impl.cc// Default implementations of convenience metho...

2018-09-09 19:28:07 547

原创 effective C++读书笔记--【条款03:尽可能使用const】

这一节的意思其实总结下来就是一个目的:“对象不该被改变”的语义约束尽量交给编译器来做,方法就是使用const,说人话就是如果程序员希望一个对象的值是不能被改变的,请积极大胆的给这个对象加上const。然后为什么要尽量使用const呢,作者大体从4个角度来说明这个const的使用场景:const指针和指向const对象的指针; STL迭代器与const结合后的效果; 函数的返回值或参数搞...

2018-09-08 19:40:25 167

原创 mac搭建golang开发环境并say hello

安装去http://golang.org下载安装包双击安装,不赘述。安装完毕可以在终端输入go version来确认是否安装成功。环境变量1.建一个文件夹:"your path"/"your dir",并在这个dir下面mkdir三个子文件夹bin,pkg和src,例如我的是 /Users/username/workspace/goProject,那么实际如下所示。bin,pk...

2018-09-05 17:00:29 7452

原创 effective C++读书笔记--【条款02:尽量以const,enum,inline替换#define】

摘要这一节按照顺序说了以下这么5件事情:上来首先强调一个观念,尽量用const常量来替换#define定义,原因有两个,1) const常量名会进入记号表方便调试;2)#define会导致目标码出现多份对象;第1条引申出两个特殊情况分别列出在第2和第3; 但是第1条所说的const常量有两个特殊情况,这里第一个特殊情况是定义常量指针,因为常量定义式通常放在头文件,因此头文件内的常量指针必...

2018-09-04 14:20:40 196

原创 leveldb源码学习1--compaction--1)level及file选择

前言leveldb中level之间的compaction是leveldb一个核心功能,由一个背景线程执行,背景线程中BackgroundCompaction()函数完成主体工作,包括两个任务:若imm_非空,则将imm_写入到磁盘,生成新的level 0中的sstable文件; 根据一些依据来选择某个level比如level n,将level n中的文件与level n+1的文件进行合并...

2018-09-03 20:45:31 576

原创 python上import media

python上import media最近在玩儿python,正好遇到需要import media模块,发现没有,尝试安装,网上搜了一下,大体步骤如下: - 安装PIL,后来发现是需要安装pllow - 安装PyGraphics - 安装ampy - 安装pygame - 安装numpy - 安装setuptools 理论上装好这5个库就应该可以开心的import media了PIL库

2017-12-30 11:02:24 2010

转载 Linux 的 NUMA 技术

本文转载自:http://www.ibm.com/developerworks/cn/linux/l-numa/NUMA(Non-Uniform Memory Access Architecture)系统在市场上的应用越来越广泛,许多厂商都成功推出了基于NUMA架构的服务器,本文重点讨论了当前Linux的NUMA技术,主要包括:存储管理、NUMA调度和用户层的API,并在SGI的Altix

2016-07-21 23:03:23 506

原创 LINUX-内核-中断分析-中断向量表(3)-arm

arm中断概念在《ARM体系结构与编程》第9章中说到,ARM 中有个概念叫做“异常中断”,也就是包括外部中断在内的各种异常。显然,ARM体系的“异常中断”概念更加接近MIPS体系中的“异常”概念。 既然更类似MIPS体系,那么自然的ARM体系就存在“异常中断入口”和“异常中断向量表”的概念。arm的异常中断向量表非向量化中断ARM体系定义了7种异常中断,在《ARM体系结构与编程》第9章的表9.

2016-07-21 21:47:22 6526

原创 LINUX-内核-中断分析-中断向量表(2)-mips

mips中断概念在《MIPS体系结构透视》的第5章说到,在MIPS中,中断、陷阱、系统调用和任何可以中断程序正常执行流的情况全被都被称为异常。 以上这种统一到“异常”的概念及其逻辑当然会体现在MIPS的异常入口点的设计中,特别如MIPS中断入口点的引出。MIPS的异常入口点(中断入口点)及异常向量概念的引出非向量化中断根据《MIPS体系结构透视》第5章介绍,类似x86这样的CISC处理器根据所发生

2016-07-19 21:39:22 4779

原创 LINUX-内核-中断分析-中断向量表(1)-x86

x86体系中断概念在《深入理解Linux内核》第四章中提到,Intel文档提出了两个 概念。 第一个概念是把同步和异步中断分别称为异常(exception)和中断(interrupt); 第二个概念是进一步的,对于中断和异常,Intel又再细分了很多类,将中断分为可屏蔽中断和不可屏蔽中断;将异常分为故障、陷阱、异常中止和编程异常。 x86体系中断向量概念的引出以上这些概念及其逻辑当然会体现在x

2016-07-18 23:38:42 12271

转载 内存术语:Bank(内存库)

本文转自:http://jingyan.baidu.com/article/ca00d56c94b3c4e99eebcf3f.htmlBank (内存库) 在内存行业里,Bank至少有三种意思,所以一定要注意。1、在SDRAM内存模组上,"bank 数"表示该内存的物理存储体的数量。(等同于"行"/Row)2、Bank还表示一个SDRAM设备内部的逻辑存储库的数量。(现

2016-07-18 00:03:12 8555 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除