- 博客(20)
- 资源 (1)
- 收藏
- 关注
原创 编译linux 内核
debian/certs/debian-uefi-certs.pem,由certs/x509_certificate_list需求停止。要editconfig,配置适合自己机器的配置,如处理器arch。
2023-11-30 10:57:36
540
1
原创 TLS 的证书验证过程
根证书颁发机构签发的根证书内包含根证书颁发机构的公钥,并且该根证书嵌入在浏览器中,然后,根证书颁发机构也会用自己的私钥给中间证书颁发机构产生的证书进行签名,接下来,中间证书颁发机构会用自己的私钥给服务器证书进行签名。所以,连接服务器的用户最终拿到的是包含中间证书颁发机构的证书和服务器证书,用户应当用中间证书颁发机构的公钥验证服务器证书的签名,并用保存在自己浏览器的根证书颁发机构的公钥验证中间证书的签名,对吗?中间证书的签名是由根证书颁发机构签发的,客户端验证中间证书是为了建立信任链,以验证服务器证书。
2023-09-19 18:04:27
880
原创 CMake 学习笔记
其中每一章节都会告诉你要学哪些东西,基本每条命令都有超链接链到该条命令的说明文档,先阅读说明文档,大致了解后,根据Todo 列表,依次在CMakeLists.txt里面写好本章所要求的项目,完成CMake build。cmake 就会尝试编译双引号内的代码,如果能编译成功,就会定义HAVE_LOG 变量为true,就表示std::log函数存在。常见的开源软件里检测某些函数是否存在应该就是使用这条命令。一直想了解CMake,但是不知从何入门。最近看了CMake 官方的。,感觉的确很适合入门。
2023-08-31 10:26:24
378
原创 拷贝公钥文件后,ssh 服务器仍提示输入密码
我们因为工作需要,可能在本地包含多个公私钥对,且每个公私钥对在生成时,指定的邮箱也不相同,所以我们在登录一些机器时,会制定不同的公钥文件,但是,有时候就算我们指定了正确的公钥文件,服务端仍提示要求输入密码,这很烦人,使用ssh -vv查看会提示公钥文件invalid format。这时候可能需要通过ssh-add 命令,把指定公私钥对加入ssh-agent系统管理范围。其中-vv 可以看到ssh登录过程中的详细报错。然后,将公钥拷贝至目标机器。最后,指定公钥文件登录。
2023-08-14 10:04:49
1248
原创 如何用C++ map emplace 加快数据插入速度
1. 构造对象所需的参数 或者 2.一个已经构造好的对象(该对象上可能包含堆上分配的空间,拷贝该空间会消耗CPU),c++ 11引入的emplace 函数可以帮上我们这个忙。对于移动构造函数来说,我们需要拷贝基本类型,对于指针类型,我们可以直接拷贝指针所指向地址,如果我们被改变被移动对象的指针变量的值,被移动对象仍然可以使用原地址空间。对于拷贝构造函数来说,我们需要拷贝每种类型,包含为指针类型对象分配新的空间,并拷贝原对象的内容。2. 我们可以使用std::move,把一个左值强制转换为右值引用;
2023-07-15 11:49:10
627
1
原创 cassandra 单数据中心多节点集群从源码编译搭建
下载cassandra源码:git clone git@github.com:apache/cassandra.git下载后切换到你想要的分支,比如说我切换到了2.2分支git checkout cassandra-2.2编译cassandra源码:编译或者说build cassandra 工程需要使用ant工具我使用的是centos 7系统,采用yum instal
2017-07-17 10:29:34
619
原创 HBase 在linux环境下本地编译及调试
为了更深入的了解HBase的工作流程,对源码进行跟踪调试是一个很好的办法,所以我在网上搜了一通,具体的本地编译及调试方法如下:下载HBase源码:可以采用两种办法,办法1,直接从Apace官网下载源码包hbase-1.2.6-src.tar.gz,办法2,使用eclipse的import命令,从git上下载源码包。我使用的是方法2,首先打开eclipse,然后File->import-
2017-07-12 12:05:54
3016
原创 带着O_CREAT和O_RDWR进入linux系统调用open函数
首先,linux内核的open函数是这么定义的SYSCALL_DEFINE3(open, ...),可以查到的宏定义为#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)然后由:#ifdef CONFIG_FTRACE_SYSCALLS#define SYSCALL_DEFINEx(x,
2016-07-28 19:26:41
9634
原创 Ceph cache pool tiering: a scalable and distributed cache
今天看文章扫到了两篇讲ceph 的cache的文章,做个小结。首先是ceph 的一个cache 层。Ceph cache pool tiering[这层](http://www.sebastien-han.fr/blog/2014/06/10/ceph-cache-pool-tiering-scalable-cache/%20%E5%8E%9F%E6%96%87%E7%BD%91%E5%9D%80
2016-07-21 20:06:41
1395
原创 flashcache_md_write
voidflashcache_md_write(struct kcached_job *job){ struct cache_c *dmc = job->dmc; struct cache_md_block_head *md_block_head; unsigned long flags; VERIFY(job->action == WRITEDISK || job
2016-05-14 21:19:36
400
原创 flashcache之创建
在flashcache_conf.c中,可以看到flashcache_target结构体是这样定义的,其中ctr被赋值为flashcache_ctr,所以flashcache的创建函数为flashcache_ctrstatic struct target_type flashcache_target = { .name = "flashcache", .version= {1,
2016-05-10 19:34:25
691
原创 flashcache之hash
dmc->size表示flashcache中block的数目,而在flashcache_ctr中: dmc->assoc_shift = ffs(dmc->assoc) - 1;因为dmc->assoc表示一个set中块的数目,那么dmc->assoc_shift则表示dmc->assoc二进制形式中0的个数。这样可以使用位运算加快除法速度。也就是说: num_cache_sets = dm
2016-05-10 18:32:48
1440
原创 generic_make_request函数初探
generic_make_request()函数会接手一个已经基本初始化好的bio,并使用make_request_fn将请求置于驱动程序的请求队列上。即把该bio传给设备对应的驱动程序。参数bio中bi_dev和bi_sector都已经设定为要进行IO的对应的设备的具体地址。其中在make_request_fn(每个设备会对应一个请求队列(request_queue),该请求队列上会有对应的mak
2016-04-15 18:04:53
3621
3
原创 jbd 之 handle
journal_startjournal_start函数的作用是取得一个原子操作描述符handle_t。该handle_t要么是当前进程已有的,要么是新创建的。且要保证日志中还剩下参数nblocks规定的空闲块数start_this_handle在journal_start函数得到一个handle_t之后,要确保日志中有nblocks块供该handle_t使用。首先handle_t是肯定要与当前的
2016-03-28 19:56:18
805
原创 写给自己看的 linux 2.6查找inode之path_lookup
写给自己看的 linux 2.6查找inode之path_lookup path_lookup是根据给定的文件名查找inode。 其函数原型为: path_lookup(const char *name, unsigned int flags,struct nameidata *nd) 其中有一个nameidata的实例nd,它既是规定查找的起点,也是查找结束后的终点。在开始查找时
2016-03-12 17:08:46
1473
原创 disksim raid 部分源代码解析
disksim的代码真的是不好读啊。 首先从disksim_main.c开始里面是disksim开始执行的地方。从disksim开始运行到发请求在RAID上的重新映射的函数流程是这样: disksim_main.c::disksim_run_simulation() -----> disksim.c:disksim_simulat
2016-03-01 20:31:24
1200
原创 gem5 abstractMemory simpleMemory
粗略的把gem5 documentation扫了一遍。仍不知道如何建立一个以PCM位介质的内存模型。于是又google了一段时间,在gem5 users 的mailing list中找到了点有用的东西how and where to start gem5。于是按照他的建议,看了下源码src/mem/Abstrac_memory.* src/mem/simple_mem.*。似乎有了点理解。
2016-02-06 12:21:28
1980
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人