ZNS与LevelDB相关记录
仅做简单记录,自用,没太大价值
最大数据传输大小
1 |
|
LevelDB的写入文件操作
①日志文件的写入
创建与销毁
1 |
|
写入
1 |
|
②后台合并线程
1 |
|
1 |
|
nvme盘被ceph占用
device-mapper: remove ioctl on luks-xxxx failed: Device or resource busy
zonefs
1 |
|
f2fs
千万注意f2fs的调度设置mq-deadline,有可能出现问题
mount: /root/rocksdb/f2fs: mount(2) system call failed: Structure needs cleaning.
f2fs版本有点老,换成阿里云源后依然没找到更新的安装包
1 |
|
在以下网站找到安装包:f2fs-tools package in Ubuntu
认真阅读网站内容并对比自身操作系统版本下载合适的文件
而后对着github仓库的安装步骤:jaegeuk/f2fs-tools
1 |
|
注意卸载之前安装的f2fs-tools,并且Before compilation中的软件全部存在
1 |
|
1 |
|
ConfZNS支持传统Zone不仅需要修改femu代码,同时需要修改内核驱动代码
1 |
|
1 |
|
1 挂载f2fs文件系统后一直随机写入第257个zone,破坏了顺序写的限制
2 f2fs环境需求(内核版本,f2fs版本,调度器)
3 14版本 Error: Failed to get number of blocks per zone,16版本无法正常运行
4 自己制作镜像而不是用femu提供的
由于需要图形界面,在vmware的Ubuntu虚拟机中制作qemu镜像
[Ubuntu 22.04.2] Running kernel seems to be up-to-date. Restarting services Daemons using outdated
测试未修改的femu与confzns能否成功运行f2fs
解决 Github SSH 连接超时
修改Windows host文件权限
spdk相关设置步骤
1 |
|
250G主机问题
vscode无法连接主机
VSCode server unexpected “Missing GLIBC >= 2.28”
Provide legacy server when remote requirements fail
解决方法:
1 更新vscode至1.86.2,很多功能不能用了 ×
2 下载1.85并禁用更新
can-i-run-vs-code-server-on-older-linux-distributions
Failed building wheel for pillow
解决安装Failed building wheel for pillow
debug经历
1 各个FileState的锁只能保证各自的原子性,不能保证全局静态变量(cur_max_lba )的原子性
2 reset zone之前设成了10而不是904,导致zone is full
3 table cache pin了一部分文件,导致内存占用
1 |
|
Could not find operator[].
gdb升级
从12.1升级13.1
解决 ‘makeinfo‘ is missing on your system.
gmp is missing while configuring building gdb from source
升级后仍然未能解决问题,删除gdb可执行文件后由apt重新安装gdb
1 |
|
AER request execute failed
1 |
|
1 |
|
1 |
|
work_version无法中止
全网最细!LSM-tree delete 性能优化(RocksDB,Lethe)
《Lethe: A Tunable Delete-Aware LSM Engine》笔记
https://disc-projects.bu.edu/lethe/
https://github.com/BU-DiSC/lethe-codebase.git
问题所在:key为string而不是int
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
lethe修改
1 |
|
1 |
|
1 |
|
1 |
|
用正确版本的makefile替换当前版本的makefile以编译zenfs
由于当前Rocksdb并没有CreateFromString,故直接自己加接口与实现,得到ZenFS FileSystem
1 |
|
1 |
|
单独增加ZenFS日志
1 |
|
file age文件由追加写改成清空写
1 |
|
zenfs
安装libzbd:https://github.com/westerndigitalcorporation/libzbd
安装gflags:apt-get install libgflags-dev
1 |
|
1 |
|
invalid new-expression of abstract class type ‘rocksdb::ZonedWritableFile’
1 |
|
1 |
|
比较函数
1 |
|
1 |
|
在C++中,当你使用标准库的排序功能(如 std::sort
)或任何需要比较的数据结构(如 std::set
或 std::map
)时,提供给这些功能的比较函数需要满足特定的性质。这些性质确保比较函数能够正确地指导排序或数据结构的行为。以下是比较函数需要满足的主要性质:
- 反射性
比较函数对于任何元素 a
,必须返回 false
当作 a < a
的判断:
1 |
|
- 反对称性
对于任何元素 a
和 b
,如果 a < b
是 true
,那么 b < a
必须是 false
:
1 |
|
- 传递性
对于任何元素 a
、b
和 c
,如果 a < b
是 true
并且 b < c
是 true
,那么 a < c
也必须是 true
:
1 |
|
- 强传递性
除了上述的基本传递性之外,比较函数还应满足强传递性,这涉及到等价的情况。即如果 a
等于 b
(在排序意义上,即 !comp(a, b) && !comp(b, a)
),并且 b < c
,则 a < c
:
1 |
|
- 总体性
对于任何两个元素 a
和 b
,比较函数应该能返回一个确定的比较结果,即 a < b
、b < a
或两者都不成立(认为它们等价),从而保证元素可以完全排序。
实现建议
- 当定义一个比较函数时,确保它是 非成员函数 或者 静态成员函数,这样它就不会依赖于对象的状态。
- 对于复杂类型的比较,考虑可能的边界情况和特殊值,如空值、极限大小等。
- 在实现比较函数时,要特别小心处理浮点数的比较,避免因精度问题导致的错误排序。
通过确保这些性质,你的比较函数可以安全地用于标准库中的排序和其他数据结构,保证它们的正确性和效率。
在C++中,比较函数通常用于定义元素之间的排序关系。当使用比较函数(如 cmp
)对元素 f1
和 f2
进行比较时,函数返回的 true
或 false
值具有特定的意义:
- 返回 true:
- 这意味着在比较函数定义的排序规则下,第一个参数
f1
应该排在第二个参数f2
之前。换句话说,根据定义的准则,f1
小于(或优先于)f2
。这个返回值告诉排序算法或任何使用该比较函数的数据结构,f1
在排序顺序中应该出现在f2
的前面。
- 这意味着在比较函数定义的排序规则下,第一个参数
- 返回 false:
- 这意味着根据比较函数的排序规则,
f1
不应该排在f2
之前。这并不一定意味着f1
大于f2
,因为false
的返回值还可能意味着f1
和f2
是等价的(在排序意义上相等)。所以,返回false
可以被解释为f1
大于或等于f2
,或者说f1
不小于f2
。
- 这意味着根据比较函数的排序规则,
scatter/gather I/O
linux文件IO与内存映射:分散/聚集IO技术(scatter-gather)
Linux: When to use scatter/gather IO (readv, writev) vs a large buffer with fread
画图工具:
PPT
visio
word插入图片后变模糊
leveldb上运行YCSB工作负载
github仓库地址:https://github.com/ls4154/YCSB-cpp
很好的解决思路
可以试一下将memcpy()替换掉,自己写一个for循环进行拷贝,找到错误
vmware扩展分区
首先将未分配的空间放进大目录下(/dev/sda2),而后再在/dev/sda5里resize
内核查询函数:elixir.bootlin.com
gpt
润色以下文本,使其更具学术性,语义更加通顺。你需要具有分区固态盘与日志合并树,计算机存储的相关知识。 整体的文字数不需要太大的改变,文字数为原先文字数的100%-110%最好,注意不用出现“我们”一词,以及一些比较口语化的词汇
润色以下文本,使其更具学术性,语义更加通顺。你需要具有分区固态盘与日志合并树,计算机存储的相关知识。 整体的文字数不需要太大的改变,文字数为原先文字数的100%-110%最好,注意不用出现“我们”一词,以及一些比较口语化的词汇
润色并扩充以下文本,使其更具学术性,语义更加通顺。你需要具有日志合并树,计算机存储的相关知识。
润色以下文本,使其更具学术性,语义更加通顺。你需要具有分区固态盘与日志合并树,计算机存储的相关知识。 整体的文字数不需要太大的改变,文字数为原先文字数的100%-110%最好,注意不用出现“我们”一词,以及一些比较口语化的词汇,同时注意纠正语句中的错别字并在发现错别字后第一时间报告
我现在正在编写论文的相关工作部分,现在需要介绍这篇论文,请用两三句话介绍它的主要工作,注意语言风格与论文的相关工作风格保持一致,突出主要工作而不是空泛的概念,用中文回答
不要过分依赖人工智能,对人工智能发脾气是没有任何意义的
endnote
Endnote GB/T 7714-2015(numeric)格式文献插入与修改
2015版本的style
参考文献不在最后一页,如何使用EndNote将参考文献统一放在参考文献那一章?
其实不用那么麻烦,选择文末endnote生成的文献列表,直接拖拽到目标位置(注意这里必须拖拽,不要ctrl+x剪切,这样不会消除文献列表的域代码),你会发现此后更新的文献全部都在新位置而非文末
git submodule sync
git rm –cached plugin/zenfs
杂项
set(HAVE_SNAPPY OFF)
fio测试zns脚本:ZNS : 解决传统SSD问题的高性能存储栈设计(fs–>io–>device)
1 |
|
confzns:
1 |
|
1 |
|
512字节时各命令输出
1 |
|
1 |
|
1 |
|
块大小为4096
1 |
|
1 |
|
1 |
|