daily memorandum 2.3.0
CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ | 本
2005-03-04 (Fri)
_ [linux] file-max の default値
昨日の話の続き。 file-max の値ってマシンによって違うみたいだし、 default がどうなってるのか調べてみた。
例によって kernel source を追ってみると、 fs/file_table.c に files_init() という関数があって、 中身はこんな感じになっている。
void __init files_init(unsigned long mempages)
{
int n;
/* One file with associated inode and dcache is very roughly 1K.
* Per default don't use more than 10% of our memory for files.
*/
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = n;
(以下略)
コメントを読むと、
- file 1コ開くのに、だいたい 1KB 必要。
- file 関係に使うメモリ量は、全体の 10% 以下にする。
という感じらしい。
ちなみに、この files_init() は fs/dcache.c の vfs_caches_init() から
void __init vfs_caches_init(unsigned long mempages)
{
(略)
files_init(mempages);
(略)
}
という感じで呼ばれ、さらにこの vfs_caches_init() は init/main.c の start_kernel() から
asmlinkage void __init start_kernel(void)
{
(略)
vfs_caches_init(num_physpages);
(略)
}
という感じで呼ばれている。 この num_physpages というのがシステムの物理メモリ量(ページ数)で、 それが files_init() まで渡ってる、ということみたい。
実際に file-max の値と実メモリ量の値を比べてみると
メモリ650MBのマシンと、メモリ1GBのマシンの file-max の値を表示してみると、こんな感じ。
% cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 659554304 647757824 11796480 0 14594048 437010432
Swap: 1258426368 2002944 1256423424
MemTotal: 644096 kB
MemFree: 11520 kB
MemShared: 0 kB
Buffers: 14252 kB
Cached: 425964 kB
SwapCached: 804 kB
Active: 304268 kB
Inactive: 295704 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 644096 kB
LowFree: 11520 kB
SwapTotal: 1228932 kB
SwapFree: 1226976 kB
% cat /proc/sys/fs/file-max
65528
% cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 1057492992 974512128 82980864 0 190038016 406695936
Swap: 2097434624 0 2097434624
MemTotal: 1032708 kB
MemFree: 81036 kB
MemShared: 0 kB
Buffers: 185584 kB
Cached: 397164 kB
SwapCached: 0 kB
Active: 464172 kB
Inactive: 166960 kB
HighTotal: 131008 kB
HighFree: 7676 kB
LowTotal: 901700 kB
LowFree: 73360 kB
SwapTotal: 2048276 kB
SwapFree: 2048276 kB
% cat /proc/sys/fs/file-max
104851
ということで、だいたい実メモリの 1/10 になっていることがわかる。
結論として
file-max は tunable なので、default より多少増やすことは可能だが、 メモリとの兼ね合いで値を決めないといけない、ってことですね。 間違っても INT_MAX とかにしてはイカソ、と。(^^;