Skip to content
No description, website, or topics provided.
C C++ QMake Makefile Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cli fix: crash in build_fstree(the "parts" array out of bounds) Aug 8, 2018
debian refactor: use ionice for deepin-anything-tool Apr 15, 2019
docs refactor: fix a typo Aug 19, 2018
kernelmod fix: compatibility with 5.1 kernel May 8, 2019
library feat: Support segmentation search Mar 8, 2019
server delay create index data with application start May 23, 2019
tools Initialize commit Mar 19, 2018
.clog.toml Update CHANGELOG.md Jul 26, 2018
.gitignore feat: support fuzzy search. Jul 13, 2018
CHANGELOG.md
LICENSE Initialize commit Mar 19, 2018
Makefile feat: add deepin-anything-server May 17, 2018
README.md Initialize commit Mar 19, 2018

README.md

Something like everything, but nothing is really like anything...

anything的开发源自于Windows下的everything,它致力于为Linux用户提供一个闪电般速度的文件名搜索功能,并提供了离线搜索功能。原来在Linux中有一个类似的rlocate的程序,但是那个程序有点太老了,而重写一个更好的也不难,因此就重写了一个。

在处理器上,我们希望此工具能覆盖x86、龙芯与申威平台,当然,平台越多越好。

具体使用测试请参见docs/end_user_tester.md,应用程序开发人员请参看docs/app_developer.md,库开发人员请参看docs/lib_developer.md,有关设计方面的考虑请参看docs/design_considerations.md

编译

进入根目录,直接make即可编译生成对应的内核模块与用户态程序。编译所有程序需要安装makegcc,编译内核模块需要安装内核头文件,编译用户态程序没有额外的依赖。编译生成的内核模块名为vfs_monitor.ko(使用了-O3参数优化),在kernelmod目录下。编译生成的用户态共享库位于library/bin目录,分为调试版(debug/libanything.so)与发布版(release/libanything.so),编译生成的用户态命令行测试程序位于cli/bin目录,分为调试版(debug/anything_cli)与发布版(release/anything_cli)。

其中内核模块位于kernelmod目录,用户态共享库位于library目录,命令行测试程序位于cli目录。当前,用户态程序支持所有平台,内核模块暂时仅支持x86与龙芯平台。

当然,你也可以进入每个目录执行make来分模块构建,但是因为cli里的测试程序依赖于library里的动态库,所以需要首先构建library,再构建cli

在运行环境上,内核模块需要依赖内核的CONFIG_KPROBES选项,用户态程序仅依赖于glibc库。

对比

为了说明anything的特性,先来做一个简单但仍有典型意义的文件搜索对比测试。

首先说明下测试环境,测试环境物理机为ThinkPad x230,8G内存,机械硬盘。虚拟机为运行在VirtualBox里的Deepin 15.4,内存为2G,处理器为单核2.9 GHz。

虚拟机的文件系统排除/sys/proc/dev/run目录后共有目录、链接与文件数约38.7万个,其中挂载了一个虚拟机外的文件系统以方便文件交换,在虚拟机内此文件系统类型为vboxsf,大约有11.5万个文件与目录。

测试方法如下:

  • 使用sysctl -w vm.drop_caches=3清空缓存,然后运行find / -name "*hellfire*,耗时约39.9秒
  • 带缓存再次运行find / -name "*hellfire*,耗时约10.1秒,通过运行free命令对比cache项得知新增的文件缓存约占用260MB内存
  • 使用anything的基础索引搜索hellfire,耗时约6毫秒,基础索引占用内存约7MB,测试程序占用内存约14MB
  • 使用anything的二级索引搜索hellfire,耗时0毫秒,二级索引占用内存约230MB,测试程序占用内存约500MB

实际上,多次测试的结果表明,使用基础索引比使用带缓存的find搜索要快大约500倍甚至更多。若使用全内存式的二级索引,anything的搜索速度是使用基础索引搜索速度的20倍以上,但是占用内存将增长35倍。若将二级索引存放在磁盘上,其内存占用将减少到近乎零,在大部分情况下仍然能够取得很好的搜索速度,仍比基础索引有明显的速度加快,但是在原始字符串较多的情况下,因为需要从索引文件中读取较大量的数据,就会显得比基础索引搜索还要慢了,这个是典型的时间空间复杂度互换的问题。

You can’t perform that action at this time.