一个特殊的无锁算法

07 Jun 2016 | 无锁, 原子操作 |

前言

一般的无锁算法都是基于原子读写、原子CAS等原子操作指令实现的,其原子性通过LOCK#指令前缀锁住总线来保证,并且起到读写屏障的效果。其实在某些特定平台(比如x86)和特定应用条件下可以只利用普通读写+编译屏障来实现完全的无锁。最近在阅读论文Scalable, High Performance Ethernet Forwarding with CUCKOOSWITCH,文中提到了一个在x86平台,”multiple-reader, single writer”和”read-heavy workload”条件下,只通过普通读写和编译屏障实现的无锁哈希表,在这里简单学习一下其中的无锁算法,如果理解有误欢迎留言指出。

Continue Reading →

OpenSUSE Leap在线更新到Tumbleweed小记

04 Jun 2016 | Linux, OpenSUSE |

之前在这台笔记本上装了OpenSUSE Leap 42.1之后就没动过,确实如坊间传言一般,非常稳定。不过最近有一件事却让我很不爽,Leap的GNOME是3.16的,而我喜欢的Zuki系主题只支持最新的3.18和3.20。作为一个一万年的Arch党来说,一切版本号引起的问题都不能忍,于是一怒之下把系统从Leap稳定版升到Tumbleweed滚动版。

Continue Reading →

DPDK中ACL(Access Control List)的使用

29 May 2016 | DPDK, ACL |

什么是ACL

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.显然,设定了多少个类别就会有多少个匹配结果。

Continue Reading →

关于init_MUTEX()的消失的探索

28 Jun 2015 | Linux, Kernel, mutex, semaphore |

前言

最近在学习ldd3,在写scull的时候,发现在输入#include <asm/semaphore.h>的时候,QtCreator竟然没有路径补全提示,隐隐约约感觉遇到坑了。果然,新版本内核是没有这个文件的,搜寻了一番,发现新版本中应该变成了<linux/semaphore.h>。本以为就这样解决了,却出了编译错误,init_MUTEX()找不到。百度了一番,找到了不少文章,比如这个。根据百度的结果,应该是说init_MUTEX()这个函数被废除了,网上的做法都是用sema_init()代替。也许是最近太无聊了,于是想把这一部分的前因后果搞清楚。

Continue Reading →

使用QtCreator进行Linux内核开发

19 Jun 2015 | QtCreator, Linux, Kernel |

前言

研二的实验室生活即将到来,导师安排搞内核开发。由于之前一直习惯于QtCreator,想继续用下去,于是花了一晚上进行配置,记录一下配置过程。

Continue Reading →

test highlight

17 Jun 2015 | test, highlight |

#include <stdio.h>
int main()
{
    size_t i = 0;
    for (; i < 100; i++) {
        printf("test\n");
    }
    return 0;
}

Continue Reading →

1 2 3