我有一个困惑的问题。我有一个使用sg执行自定义CDB 的库。有几个系统通常在sg中存在内存分配问题。通常,sg驱动程序的硬限制约为4mb,但是我们在这几个请求〜2.3mb的系统上看到了它。也就是说,CDB正在准备分配2.3mb的传输。这里应该没有任何问题:2.3 <4.0。
现在,机器的配置文件。它是一个64位CPU,但是运行的CentOS 6.0是32位(我没有构建它们,也没有任何与该决定有关的信息)。此CentOS发行版的内核版本为2.6.32。他们有16GB的RAM。
这是系统上的内存使用情况(尽管,由于此错误发生在自动测试期间,所以我尚未验证这是否反映了从sg返回此errno的状态)。
top - 00:54:46 up 5 days, 22:05, 1 user, load average: 0.00, 0.01, 0.21
Tasks: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 15888480k total, 9460408k used, 6428072k free, 258280k buffers
Swap: 4194296k total, 0k used, 4194296k free, 8497424k cached
我从Linux Journal中找到了这篇有关在内核中分配内存的文章。该文章已过时,但似乎与2.6有关(有关作者的一些评论位于顶部)。文章提到内核被限制为大约1gb的内存(尽管从文本上还不能完全清楚地知道每个1gb是用于物理,虚拟还是全部)。我想知道这是否是针对2.6.32的准确陈述。最终,我想知道这些系统是否达到了这个极限。
尽管这并不是我的问题的真正答案,但我想知道2.6.32的要求的准确性。那么,内核的实际内存限制是多少?这可能是故障排除的考虑因素。欢迎其他任何建议。令他们感到困惑的是,这些系统与许多其他系统没有出现相同的问题。