我们知道,在C中,整数类型(short
,int
,long
)分为有符号和无符号两种,以int
为例,单纯一个int
代表有符号整型signed int
,这里signed
可以省略;无符号整型需要显示指明unsigned int
。
然而char
是个例外。当然,C语言中,字符类型也分signed char
和unsigned char
,然而单写char
的时候,究竟是有没有符号的?答案是不确定。
最近群里有人问,在non-EAL环境下使用DPDK有什么不同。自己对这一部分的实现原理了解的也不多,所以查找、总结了一下DPDK中的lcore实现原理。
首先,关于non-EAL,并不是说整个程序完全不使用EAL(这样的话几乎所有DPDK功能都不可用)。程序本身还是要执行rte_eal_init()
来对EAL初始化,通过参数-l
、-c
或者--lcores
来指定使用哪些cpu lcore,在每一个管辖的lcore上绑定一个线程待命,这些线程由EAL管理,即为EAL线程。除此之外,也可以手工利用pthread运行新的线程,这些线程不受EAL控制,就是所谓的non-EAL线程。由于EAL线程与lcore的绑定关系,很多地方用lcore指代其上的EAL Thread。
一年多没更新了,这不是我想要的。
这段时间发生了太多的事,颓废过,也迷茫过。朋友圈基本上没更新,算是在很多人眼里“消失”了;心情最复杂的时候,在微博里写了两个不知所云的打油诗;知乎继续骗赞,收藏夹大小从100长到了500。不得不说,知乎虽然水答案的人越来越多,但是依旧是高质量文本最多的社交网站,可以说是我这两年精神能量的最大来源了。也慢慢的接触到了各种群体,接触到了和自己情况一样的一些人,孤独感减少了很多。有句话深得我心:
祈求上天赐予我平静的心,接受不可改变的事;给我勇气,改变可以改变的事;并赐予我,分辨此两者的智慧。
于是,座右铭改成了:
纵然是个loser,也要做个积极向上的loser!
我也知道了有些仗注定打不赢,敌人强大到全世界没人打得赢。但是还是要亮剑啊……
不过总的来说,生活明朗了许多,临近毕业了,期待第一份工作,期待未来的转机。
荒废这么久,现在域名已经到期,多说已经坚持不住挂掉了。去Godaddy续了费,又用友言代替了多说(感觉uyan还是撑不久的样子,没办法disqus国内被墙,Coding-comments
这种又非要注册,我的读者不能全都是程序员吧)。
不知不觉26岁了……开始和朋友讨论中年危机……
努力活下去吧,生活还是挺精彩的
一般的无锁算法都是基于原子读写、原子CAS等原子操作指令实现的,其原子性通过LOCK#
指令前缀锁住总线来保证,并且起到读写屏障的效果。其实在某些特定平台(比如x86)和特定应用条件下可以只利用普通读写+编译屏障来实现完全的无锁。最近在阅读论文Scalable, High Performance Ethernet Forwarding with CUCKOOSWITCH
,文中提到了一个在x86平台,”multiple-reader, single writer”和”read-heavy workload”条件下,只通过普通读写和编译屏障实现的无锁哈希表,在这里简单学习一下其中的无锁算法,如果理解有误欢迎留言指出。
之前在这台笔记本上装了OpenSUSE Leap 42.1之后就没动过,确实如坊间传言一般,非常稳定。不过最近有一件事却让我很不爽,Leap的GNOME是3.16的,而我喜欢的Zuki系主题只支持最新的3.18和3.20。作为一个一万年的Arch党来说,一切版本号引起的问题都不能忍,于是一怒之下把系统从Leap稳定版升到Tumbleweed滚动版。
DPDK中的ACL(Access Control List)模块提供了数据包分类功能,根据文档Packet Classification and Access Control
中所述:
The ACL library is used to perform an N-tuple search over a set of rules with multiple categories and find the best match (highest priority) for each category.
大体来说,就是事先定义一些基于数据包N元组的规则,每一个规则都有一个优先级,并且归属到一个或多个不同类别;然后对于输入的数据包进行规则检查,如果该数据包满足一个类别里的某些规则,返回结果是其中优先级最高的那个,如果类别中的规则都不满足就返回0.显然,设定了多少个类别就会有多少个匹配结果。