존재하지 않는 파일의 stat / lstat는 디스크 탐색을 유발합니까?


1

올바른 폴더에서 라이브러리 파일을 검색 할 때 응용 프로그램은 현재 가능한 위치 위치에 대해 두 개의 lstat를 수행합니다. 이제 나는이 lstat (응용 프로그램이 웹 서비스이므로 초당 수백 개의 lstat가있을 수 있음)가 항상 추가 디스크 탐색을 유발하는지, 아니면 탐색이 캐시되는지 궁금합니다.

시스템은 ext4 기반 파일 시스템이있는 Linux (2.6. 커널)입니다.

PHP-CGI strace의 일부 :

PHP-CGI strace :

lstat("/home/www/mydomain.com/inc/myLibrary/php/classes/myClass.php", 0x7fffa805a710) = -1 ENOENT (No such file or directory)
lstat("/usr/share/php/inc/myLibrary/php/classes/myClass.php", 0x7fffa805a710) = -1 ENOENT (No such file or directory)
getcwd("/home/www/mydomain.com/misc", 4096) = 32
lstat("/home/www/mydomain.com/misc/./inc/myLibrary/php/classes/myClass.php", 0x7fffa805a710) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/inc/inc/myLibrary/php/classes/myClass.php", 0x7fffa805a710) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/inc/myLibrary/php/classes/myClass.php", 0x7fffa805a660) = -1 ENOENT (No such file or directory)
lstat("/usr/share/php/inc/myLibrary/php/classes/myClass.php", 0x7fffa805a660) = -1 ENOENT (No such file or directory)
getcwd("/home/www/mydomain.com/misc", 4096) = 32
lstat("/home/www/mydomain.com/misc/./inc/myLibrary/php/classes/myClass.php", 0x7fffa805a660) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/inc/inc/myLibrary/php/classes/myClass.php", 0x7fffa805a660) = -1 ENOENT (No such file or directory)
getcwd("/home/www/mydomain.com/misc", 4096) = 32
lstat("/home/www/mydomain.com/misc/inc/myLibrary/php/classes/myClass.php", 0x7fffa805c7c0) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/misc/inc/myLibrary/php/classes", 0x7fffa805c600) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/misc/inc/myLibrary/php", 0x7fffa805c450) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/misc/inc/myLibrary", 0x7fffa805c2a0) = -1 ENOENT (No such file or directory)
lstat("/home/www/mydomain.com/misc/inc", 0x7fffa805c0f0) = -1 ENOENT (No such file or directory)
open("/home/www/mydomain.com/misc/inc/myLibrary/php/classes/myClass.php", O_RDONLY) = -1 ENOENT (No such file or directory)


/* FILE FOUND */

open("/home/www/mydomain.com/inc/classes/myClass.php", O_RDONLY) = 7
fstat(7, {st_mode=S_IFREG|0775, st_size=7734, ...}) = 0
fstat(7, {st_mode=S_IFREG|0775, st_size=7734, ...}) = 0
fstat(7, {st_mode=S_IFREG|0775, st_size=7734, ...}) = 0
fstat(7, {st_mode=S_IFREG|0775, st_size=7734, ...}) = 0
mmap(NULL, 7734, PROT_READ, MAP_SHARED, 7, 0) = 0x7f2225786000
stat("/home/www/mydomain.com/inc/classes/myClass.php", {st_mode=S_IFREG|0775, st_size=7734, ...}) = 0

답변:


0

어떻게 든 OS는 정보가 필요하지만 파일이 있는지 여부에 관계없이 정보가 필요합니다. 분명히 파일을 찾고있는 모든 상위 폴더의 폴더 목록을 읽어야합니다.

그러나 너무 걱정하지 마십시오. 일단 읽은 후에는 이러한 정보가 캐시에 유지되므로 매번 디스크를 검색 할 필요가 없습니다. 어떤 이유로 캐시 된 정보가 삭제 된 경우에만 (최신 데이터의 경우 OS에서 메모리에이 공간이 필요할 수 있음) OS는 디스크를 다시 봐야합니다.


1
이것을 스스로 증명하려면 이것을 시도하십시오. 시스템을 다시 시작하면 캐시가 지워집니다. 그런 다음 "찾기"명령을 실행하십시오. 디스크가 찾는대로 시청하십시오. 명령이 완료되면 명령을 다시 실행하십시오. 디스크 활동량이 현저히 줄어 듭니다.
Anthony Giorgio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.