学了手内核常见的汇编指令(2):宏定义cmpxchg

本文探讨了cmpxchg指令在Linux中的应用,特别是在TCP传输控制块锁中的重要性。cmpxchg用于原子性地比较并交换内存位置的值,常用于锁的实现。文章通过比喻解释了cmpxchg的功能,并指出其在进程上下文和软中断场景中的关键作用。尽管cmpxchg的底层实现涉及晦涩的汇编,但其高效、安全的特性使其成为首选。
摘要由CSDN通过智能技术生成

聊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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值