共享内存原理

本文主要说一下共享内存的原理

本文源码来自于 glibc 2.27

一、共享内存的底层实现

我们看一下 shm_open 的源码实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int shm_open (const char *name, int oflag, mode_t mode) {
SHM_GET_NAME (EINVAL, -1, "");
oflag |= O_NOFOLLOW | O_CLOEXEC;
/* Disable asynchronous cancellation. */
int state;
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &state);
int fd = open (shm_name, oflag, mode);
if (fd == -1 && __glibc_unlikely (errno == EISDIR))
/* It might be better to fold this error with EINVAL since
directory names are just another example for unsuitable shared
object names and the standard does not mention EISDIR. */
__set_errno (EINVAL);
pthread_setcancelstate (state, NULL);
return fd;
}

查看更多

Inotify详解

Inotify详解

inotify 可以用来监控文件或者目录的变化,确定这些被监控的对象是否发生特定的事件。

一、如何使用

使用 inotify API 关键步骤如下:

  • 使用 inotify_init() 来创建一个 inotify 实例。系统调用会返回一个文件描述符
  • 使用 inotify_add_watch() 来添加文件项到监控列表,通知内核自己感兴趣的文件以及事件。每个监控项都由路径名和相关联的位掩码组成。掩码指定了需要对路径监控的具体事件。返回一个监控描述符,用于后面的操作。此系统调用也可以执行相反的删除操作,将之前添加的监控项从 inotify 实例中删除。
查看更多

undefined

  1. QPS:(Queries Per Second)每秒查询。是一台服务器每秒能够相应的查询次数
  2. TPS:(Transactions Per Second)每秒事务。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

QPS vs TPS
QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。如访问一个页面会请求服务器2次,一次访问,产生一个“T”,产生2个“Q”。

查看更多

undefined

linux软件管理

一、rpm工具

rpm 是linux下软件包管理工具。rpm 也是一种打包格式,使用rpm工具进行管理,但是rpm包与包之间存在依赖,可能会出现升级某个包导致依赖的其他包版本不匹配。而yum 工具可以帮我们解决这个问题。

1
2
3
4
5
6
7
8
9
mysql-community-common-5.6.49-2.el7.x86_64
mysql: 软件名称部分
community-common: 软件组件部分
5: 主版本号
6: 次版本号
49: 修订号
2: 发布次数
el7: 平台名称,表示适用于哪种发行版
x86_64: 系统位数,i386 等表示适用于32位,x86_64 表示适用于64位,noarch 表示通用

rpm 命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-q: 查询已安装的软件名称
-qa: 显示已安装的所有的软件列表
-qi: 查询指定安装软件的详细信息
-ql: 查看指定的软件包在系统中对应的目录和文件列表
-qf: 查看当前指定的文件或目录对应的软件包,比如:rpm -qf /usr/bin/vim
-qpi: 查询未安装软件的详细信息,比如:rpm -qpi tomcat-7.0.94-1.el6.noarch.rpm
-qpl: 查询未安装软件的安装路径,比如:rpm -qpl tomcat-7.0.94-1.el6.noarch.rpm
-V: 校验软件包的正确性,比如:rpm -V tomcat-7.0.94-1.el6.noarch.rpm
-Va: 校验所有软件包的正确性
-e: 需要root权限,卸载软件包。其他软件可能依赖此软件,卸载此软件之后导致其他软件不可用,如果存在依赖关系,则会显示依赖信息,如果执意要删除,可以使用忽略依赖的选项: --nodeps。例如:rpm -e --nodeps vim-enhanced
-i: 安装,需要root权限,安装前会查询已安装的相关软件,并卸载与之冲突的软件。在进行软件安装时,可能系统当中缺少某个依赖,导致无法正常安装,可以使用 --force 选项进行强制安装,但无法保证安装后能够正常使用。常规的解决办法是先安装需要的依赖软件包,再安装该软件,或者使用yum工具
-ivh: 安装一个软件。例如: rpm -ivh tomcat-7.0.94-1.el6.noarch.rpm
-U: 升级软件,如果对应的软件包原来未安装,则直接安装,和 -i 的效果相同
-F: 升级软件,如果对应的软件原来未安装,则放弃安装

查看更多

undefined

binutils toolchain 工具集

查看更多
工具 功能
1
2
3
抓火焰图:
perf record -F 99 -a -g -p $PID -- sleep 180
perf script -i perf.data > perf.unfold