亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: FastCFS POSIX API簡介 [打印本頁]

作者: happy_fish100    時間: 2022-03-10 15:42
標(biāo)題: FastCFS POSIX API簡介
剛發(fā)布的FastCFS V3.2提供系統(tǒng)調(diào)用API(如 open、write、writev、read、readv、close 等)和 C API(如fopen、fwrite、fread、fclose等)兩大類POSIX API,應(yīng)用程序可以通過這兩類API使用FastCFS存儲。FastCFS在POSIX API名稱前面加上前綴 fcfs_,比如 fcfs_open、fcfs_read等等,函數(shù)原型及用法和POSIX API完全一致。

FastCFS可以通過FUSE mount為本地文件目錄,為什么還要推出POSIX API呢?應(yīng)用程序直接調(diào)用FastCFS提供的POSIX 接口,主要有兩大好處:1. 減少FUSE這個中間環(huán)節(jié),部署和運維更加簡單方便;2. 直接在用戶態(tài)調(diào)用接口,不存在FUSE在用戶態(tài)和內(nèi)核態(tài)的交互行為,性能更高,CPU占用明顯降低(fused進程對CPU消耗比較大)。單機實測發(fā)現(xiàn)隨機寫IOPS提升 20+%,隨機讀大約提升 5%。


C/C++使用FastCFS POSIX API

FastCFS提供的動態(tài)庫和頭文件,可以采用裝包或者源碼編譯方式,推薦使用裝包方式。CentOS 和 RHEL下包名為 FastCFS-api-devel,Debian和Ubuntu下包名為 fastcfs-api-dev。動態(tài)庫為/usr/lib64/libfcfsapi.so,你的程序在編譯時需要增加動態(tài)庫選項 -lfcfsapi。源碼需要引用兩個頭文件,如下所示:
#include "fastcfs/api/std/papi.h"
#include "fastcfs/api/std/capi.h"


程序初始化調(diào)用:
//必須放置在daemon_init, fork或clone調(diào)用之后
fcfs_posix_api_init_start();


或者:
//可以放置在daemon_init, fork或clone調(diào)用之前
fcfs_posix_api_init();

//必須放置在daemon_init, fork或clone調(diào)用之后
fcfs_posix_api_start();

程序退出前需要調(diào)用 fcfs_posix_api_stop() 完成收尾工作。示例程序參見FastCFS項目下的 src/api/tests/test_papi_copy.c

不修改程序代碼的情況下,可以使用FastCFS提供的preload動態(tài)庫訪問FastCFS存儲。使用示例如下:
LD_PRELOAD=/usr/lib64/libfcfspreload.so ls -l /opt/fastcfs/fuse

或者:
export LD_PRELOAD=/usr/lib64/libfcfspreload.so
ls -l /opt/fastcfs/fuse

注意:第二種方式下環(huán)境變量LD_PRELOAD一直生效,除非退出終端或者執(zhí)行:
unset LD_PRELOAD

動態(tài)庫使用的配置文件默認(rèn)為/etc/fastcfs/fcfs/fuse.conf,可以通過環(huán)境變量 FCFS_PRELOAD_CONFIG_FILENAME 設(shè)置。

受限于glibc實現(xiàn)方式,preload機制對于部分Linux命令會失效,比如 md5sum、dd。因此我們提供的這種方式是試驗性的,感興趣的朋友可以進行測試和驗證。下面列舉preload機制失效的4種場景:
  1. 靜態(tài)編譯(不采用動態(tài)庫方式);
  2. 程序設(shè)置了 suid 標(biāo)志;
  3. 通過匯編調(diào)用函數(shù)(比如glibc打開文件通過匯編調(diào)用syscall);
  4. 采用了內(nèi)聯(lián)函數(shù)(比如glibc的 feof_unlocked 和 ferror_unlocked等函數(shù))。

感興趣的朋友請點擊FastCFS開源項目,歡迎大家測試和體驗。

友情提示
  * CentOS 7下內(nèi)核對FUSE文件屬性緩存無效,CentOS 8(Linux Kernel 4.18)沒問題。推薦使用 Linux Kernel 4.18及更高版本;
  * Linux內(nèi)核在每次寫入時都會去獲取文件的擴展屬性(xattr)security.capability,這將明顯影響文件寫入性能。除非應(yīng)用程序真正需要文件擴展屬性(如調(diào)用了setxattr、getxattr或listxattr等API),否則不要將FastCFS的fuse.conf中的配置項xattr_enabled設(shè)置為true!







歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2