IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 学了手内核常见的汇编指令(2):宏定义cmpxchg -> 正文阅读

[系统运维]学了手内核常见的汇编指令(2):宏定义cmpxchg

聊cmpxchg的楔子

近些日子,一直埋头于进程上下文/软中断对TCP传输控制块的访问,总想着在这个点里为TCP传输优化做点事。

原因也很简单,因为进程上下文/软中断的锁。

对于这种锁,最常见的就是TCP发送数据的入口。

int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) 
{ 	
	int ret;
	  	
	lock_sock(sk); 	
	ret = tcp_sendmsg_locked(sk, msg, size); 	
	release_sock(sk);  	

	return ret; 
}
EXPORT_SYMBOL(tcp_sendmsg);

简单明了,lock_sock上锁,release_sock解锁。

而对于TCP的所有,都需要等待上层的解锁操作,才能继续自己的工作,定时器、TSQ、DelayACK和PMTU都不例外。像极了被地主强取豪夺的佃农,但TCP生下来就得吃这碗饭,所以TCP传输优化也应将关注点放一些在进程上下文/软中断的锁上,毕竟地主少克扣点,佃农的日子也会好过很多。

这几天,往复看了很多遍lock_sockrelease_sock。虽然更多是在lock_sock上下功夫,但对release_sock也执念颇深。

release_sock的回调是tcp_release_cb,函数名也简单易懂,释放TCP传输控制块的函数功能。

在这里,我第N次见到了老面孔cmpxchg。

宏定义cmpxchg

cmpxchg(void *ptr, unsigned long old, unsigned long new) :将ptr指针指向的内容和old比较,当值相同,将new的值写入ptr指向的内容,并返回没有变动的old值表示成功;当值不同,将ptr指向的内容写入old,并返回变动的old值表示失败。ptr指向的是内存对象存储的值。

宏定义cmpxchg是纯汇编实现的函数体,也在函数体前保证了原子性,这使得cmpxchg函数强大,其他一切实现的都不如它,它高效、安全、不会牵引出更多的问题,除了晦涩。

Linux里有很多地方有cmpxchg的身影,以至于我对它的存在不能视而不见。

为什么宏定义cmpxchg那么经常的被使用,那就得聊聊它的能力。但我并不愿撸源码的实现,晦涩的,除了让人厌恶,也让我觉得恶心。

于是,我打算换一种方式,比强撸代码有用的多。

在开始之前,还是得对cmpxchg的功能有个印象,才好让我继续发挥。

cmpxchg的关键,功能实现的函数。对,又一层宏定义,具体实现是__raw_cmpxchg。

/*

  • Atomic compare and exchange. Compare OLD with MEM, if identical,
  • store NEW in MEM. Return the initial value in MEM. Success is
  • indicated by comparing RETURN with OLD.

*/
#define __raw_cmpxchg(ptr, old, new, size, lock)

cmpxchg能干什么,我这么解释,想必就都明白了。
在这里插入图片描述
对于 *ptr和old相同的,好比*ptr找到了对应的条目,那么交换成新条目(*ptr==old2,*ptr==new2);而*ptr和old不同的,就好比没有条目,那该做的是将这个条目记录下来(*ptr !=old4,old4==*ptr);返回OLD,可以让调用方得到结果。

宏定义cmpxchg和网络的路径交换简直一摸一样。


其实上,现实的交易所也是这样运转的,能兑换的,你可以去交易所按汇率去兑换;
不能兑换的,交易所也会记录下你要交易的信息。

cmpxchg也得益于这类交换机制的应用。

至于汇编指令,延展出来又是一堆废话,本意并不在此,写到大半作罢。

至此,门外的吵闹声已经打乱了我的思绪,我只好加入他们。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:59:17  更:2022-02-01 21:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:36:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码