Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:38961 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 80193 invoked from network); 15 Jul 2008 14:50:45 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 15 Jul 2008 14:50:45 -0000 Authentication-Results: pb1.pair.com smtp.mail=amirh@metacafe.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=amirh@metacafe.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain metacafe.com designates 91.198.254.7 as permitted sender) X-PHP-List-Original-Sender: amirh@metacafe.com X-Host-Fingerprint: 91.198.254.7 war.metacafe.com Linux 2.6 Received: from [91.198.254.7] ([91.198.254.7:35097] helo=war.office.mc) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 1D/9D-11609-049BC784 for ; Tue, 15 Jul 2008 10:50:44 -0400 Received: from metacafe.com (brain.office.mc [192.168.0.3]) by war.office.mc (Postfix) with ESMTP id EAE05100804C for ; Tue, 15 Jul 2008 14:51:30 +0000 (UTC) Received: from 192.168.1.119 ([192.168.1.119]) by brain.office.mc ([192.168.0.3]) with Microsoft Exchange Server HTTP-DAV ; Tue, 15 Jul 2008 14:49:34 +0000 Received: from amirh by brain.office.mc; 15 Jul 2008 17:50:36 +0300 To: PHP Internals List Content-Type: multipart/alternative; boundary="=-I/Kf0plAc5wzE7u+mRGo" Date: Tue, 15 Jul 2008 17:50:36 +0300 Message-ID: <1216133436.6875.35.camel@amirh> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 Subject: lstat call on each directory level From: amirh@metacafe.com (Amir Hardon) --=-I/Kf0plAc5wzE7u+mRGo Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, I've noticed a weird behavior when doing file access from PHP: PHP seems to make an lstat call on each of the parent directories of the accessed file, for example see this script: When running with strace -e lstat I see this: lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/var/www", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0 lstat("/var/www/metacafe", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/var/www/metacafe/test", 0x7fbfff9b10) = -1 ENOENT (No such file or directory) Measuring total syscalls time for an apache process on a production server, I found out that ~33% of the time it spends in syscalls is spent on lstat. I did a pretty deep web search on the issue and came out with nothing. I'll also note that I did a small experiment - moving our root portal folder to /, this gave an amazing performance improvement! So my questions are: What is the reason for doing these lstat calls? How can it be disabled? if not by configuration, maybe by patching php (can you direct me to where is this being done in php's source?) Thanks! -Amir. --=-I/Kf0plAc5wzE7u+mRGo--