[llvm] r329648 - [CachePruning] Fix comment about ext4 per-directory file limit. NFC
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 10 14:02:08 PDT 2018
As I said that wasn't the limit I was hitting. Here is the program that I
wrote:
#include <stdint.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main() {
for (uint64_t i = 0;; ++i) {
char buf[256];
snprintf(buf, 256, "d/%032lx", i);
if (i % 65536 == 0)
puts(buf);
int fd = open(buf, O_CREAT);
if (fd == -1) {
printf("open: %s\n", strerror(errno));
return 1;
}
close(fd);
}
}
The output ends in:
d/00000000000000000000000000980000
d/00000000000000000000000000990000
d/000000000000000000000000009a0000
d/000000000000000000000000009b0000
d/000000000000000000000000009c0000
d/000000000000000000000000009d0000
d/000000000000000000000000009e0000
d/000000000000000000000000009f0000
open: No space left on device
df:
Filesystem 1K-blocks Used
Available Use% Mounted on
[redacted] 856678580 780069796 33068920 96% [redacted]
df -i:
Filesystem Inodes IUsed
IFree IUse% Mounted on
[redacted] 54411264 18824333 35586931 35% [redacted]
Peter
On Tue, Apr 10, 2018 at 1:40 PM, Fangrui Song <maskray at google.com> wrote:
>
> su
> truncate -s 100G 100G
> mkfs.ext4 100G
> mkdir ext4
> mount 100G ext4
> cd ext4
>
> mkdir p
> cd p
> python3 -c 'for i in range(6600000):\n with open(str(i),"w"): pass'
>
>
> It runs out of inodes with some message like:
>
> OSError: [Errno 28] No space left on device: '6553587'
>
>
> umount ext4; dumpe2fs 100G # says the inodes are used up
> ...
> Free inodes: 0
> ...
>
>
> On 2018-04-10, Peter Collingbourne wrote:
>
>> No, these were empty files. It wasn't an inode limit because I could still
>> create files in other directories.
>>
>> Peter
>>
>> On Tue, Apr 10, 2018 at 10:35 AM, Fangrui Song <maskray at google.com>
>> wrote:
>>
>> On 2018-04-09, Peter Collingbourne wrote:
>>
>> Are you sure about that? I'm pretty sure that before writing that
>> comment I
>> wrote a small program that created lots of files (not
>> subdirectories)
>> in a
>> directory until it started getting error messages, which started
>> happening at
>> around 6000000 files.
>>
>> Peter
>>
>> I guess you created a file of 100GiB. The number of inodes is roughly
>> 6553600.
>>
>> 100*1024*1024*1024 / 16384 = 6553600.0 where 16384 is the default
>> bytes-per-inode (man mke2fs).
>>
>> % truncate -s 100G 100G
>> % mkfs.ext4 100G
>> % dumpe2fs 100G
>> .....
>> Inode count: 6553600
>> .....
>>
>> Each file consumes one inode and the number of files in that directory
>> is limited by this factor.
>>
>> On Mon, Apr 9, 2018 at 5:12 PM, Fangrui Song via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>> Author: maskray
>> Date: Mon Apr 9 17:12:28 2018
>> New Revision: 329648
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=329648&view=rev
>> Log:
>> [CachePruning] Fix comment about ext4 per-directory file limit.
>> NFC
>>
>> There is a limit on number of subdirectories if dir_nlinks is
>> not
>> enabled (31998), but per-directory number of files is not
>> limited.
>>
>> Modified:
>> llvm/trunk/include/llvm/Support/CachePruning.h
>>
>> Modified: llvm/trunk/include/llvm/Support/CachePruning.h
>> URL: http://llvm.org/viewvc/llvm-pr
>> oject/llvm/trunk/include/llvm/
>> Support/
>> CachePruning.h?rev=329648&r1=329647&r2=329648&view=diff
>> ===========================================================
>> =========
>> =======
>> ===
>> --- llvm/trunk/include/llvm/Support/CachePruning.h (original)
>> +++ llvm/trunk/include/llvm/Support/CachePruning.h Mon Apr 9
>> 17:12:28 2018
>> @@ -52,9 +52,8 @@ struct CachePruningPolicy {
>> /// the number of files based pruning.
>> ///
>> /// This defaults to 1000000 because with that many files
>> there
>> are
>> - /// diminishing returns on the effectiveness of the cache,
>> and
>> some file
>> - /// systems have a limit on how many files can be contained
>> in a
>> directory
>> - /// (notably ext4, which is limited to around 6000000 files).
>> + /// diminishing returns on the effectiveness of the cache,
>> and
>> file
>> + /// systems have a limit on total number of files.
>> uint64_t MaxSizeFiles = 1000000;
>> };
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>> --
>> --
>> Peter
>>
>> --
>> 宋方睿
>>
>> --
>> --
>> Peter
>>
>
> --
> 宋方睿
>
--
--
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180410/69bcd898/attachment.html>
More information about the llvm-commits
mailing list