gpt4 book ai didi

c++ - 使用 gpfs​​_fcntl 的 EINVAL

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:18 25 4
gpt4 key购买 nike

我正在尝试对 IO 密集型代码使用预取提示。我根据我对 gpfs​​_fcntl() 手册页的理解设置了代码,但确实得到了一个 EINVAL。我现在有点迷茫,我做错了什么 - 任何提示表示赞赏。

挂载:/dev/scratch16 on/bgscratch type gpfs​​ (rw,dev=cadmos-gss.gss1a:scratch16,ldev=scratch16)

Error: Prefetch using gpfs_fcntl failed: Invalid argument (22), 32768b at 7713095680 from /bgscratch/foo.dat

文件:-rw-rw-r-- 1 delalond bbp 14739308544 Jul 25 2012/bgscratch/foo.dat

来源:

void BufferedFile::prefetch( const uint64_t offset, const uint64_t size )
{
if( file_.fd == -1 )
file_.fd = ::open( filename.c_str(), O_RDONLY );
if( file_.fd == -1 )
{
LBWARN << "open() failed: " << lunchbox::sysError << std::endl;
return;
}
struct
{
gpfsFcntlHeader_t hdr;
gpfsAccessRange_t acc;
} arg;
arg.hdr.totalLength = sizeof(arg);
arg.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
arg.hdr.fcntlReserved = 0;
arg.acc.structLen = sizeof(arg.acc);
arg.acc.structType = GPFS_ACCESS_RANGE;
arg.acc.start = offset;
arg.acc.length = size;
arg.acc.isWrite = 0;
if( gpfs_fcntl( file_.fd, &arg ) != 0 )
LBWARN << "Prefetch using gpfs_fcntl failed: " << lunchbox::sysError
<< ", " << size << "b at " << offset << " from " << filename
<< std::endl;
}

编辑:我可以在独立应用程序中重现该问题,并且一旦启动大于 4GB 就会发生错误,即使它是一个很长很长的 64 位系统。

最佳答案

您正在尝试在文件结束后读取。

给定 fileSize,尝试类似的操作

arg.acc.length = fileSize > offset + size ? size : fileSize - offset;

关于c++ - 使用 gpfs​​_fcntl 的 EINVAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16146032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com