Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:64026 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 61649 invoked from network); 21 Nov 2012 14:15:58 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 21 Nov 2012 14:15:58 -0000 Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain zend.com does not designate 209.85.214.170 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 209.85.214.170 mail-ob0-f170.google.com Received: from [209.85.214.170] ([209.85.214.170:58031] helo=mail-ob0-f170.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 8B/CB-20662-D12ECA05 for ; Wed, 21 Nov 2012 09:15:58 -0500 Received: by mail-ob0-f170.google.com with SMTP id wp18so7467811obc.29 for ; Wed, 21 Nov 2012 06:15:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type :x-gm-message-state; bh=liKBFYwpivBmCQvepMebBIa0mC221ZCmRDW7AgLsvts=; b=GKZ7d5X9NYcsP34JLQ/2eTp8GuoAaEtELKr8gv0JfMYeDlDRX/2+uJRyJ5I/capLFj PFEAGHy+f1xp0hhpvXxmfNbAHTAgk8Cvcww3XqkRkzTeQC28hh3Q5CMdlw5pUfEDnxxe giaac4evZYiR7GbEKTMpwqTenrCuj29v4jhqR9t0C6SW595OOXh1VXQgAFLR1Pmgbnna PaEFUJ8qprkjTZYYVs3z+y/t4rs4RnTVtvCUijGAfrFilIuVgo26dnGnLS5Rk0k+9TXx LXSNAt6jSCc5kD819MzyXUXXf9DqDj3FJ852Ct2xeetYA3Lnbm/B7jSD7l6tgjLLPdRA C1JA== MIME-Version: 1.0 Received: by 10.182.18.165 with SMTP id x5mr16549137obd.73.1353507355006; Wed, 21 Nov 2012 06:15:55 -0800 (PST) Received: by 10.182.14.234 with HTTP; Wed, 21 Nov 2012 06:15:54 -0800 (PST) Date: Wed, 21 Nov 2012 17:15:54 +0300 Message-ID: To: Pierre Joye Cc: PHP Internals Content-Type: multipart/alternative; boundary=f46d043be10e18956004cf01fde6 X-Gm-Message-State: ALoCoQk9MGxgKcoWtC/FqB1kLFhJTUrML0gz7czT9Dq8NbTkiBNfR6F3RagsiiW3x8Y+IxdG4c+vDT0uHoTOMgRtLhctk5SSkgIVLnSCm8zWLcT5rNuTyLKTecTIfxnX+/3egTG//OX9 Subject: Eliminating stat() calls in opcode caches for include_once From: dmitry@zend.com (Dmitry Stogov) --f46d043be10e18956004cf01fde6 Content-Type: text/plain; charset=UTF-8 Hi Pierre, To avoid stat() syscalls the opcode cache has to override zend_resolve_path() and zend_open_stream() callbacks with something like the following functions. static char* my_resolve_path(const char *filename, int filename_len TSRMLS_DC) { if ((EG(opline_ptr) && *EG(opline_ptr) && (*EG(opline_ptr))->opcode == ZEND_INCLUDE_OR_EVAL && ((*EG(opline_ptr))->extended_value == ZEND_INCLUDE_ONCE || (*EG(opline_ptr))->extended_value == ZEND_REQUIRE_ONCE))) { CACHE_BUCKET *b = OPCODE_CACHE_FIND(filename TSRMLS_CC); if (b) { return b->real_path; } } return orig_resolve_path(filename, filename_len TSRMLS_CC); } static int my_stream_open(const char *filename, zend_file_handle *handle TSRMLS_DC) { if ((EG(opline_ptr) && *EG(opline_ptr) && (*EG(opline_ptr))->opcode == ZEND_INCLUDE_OR_EVAL && ((*EG(opline_ptr))->extended_value == ZEND_INCLUDE_ONCE || (*EG(opline_ptr))->extended_value == ZEND_REQUIRE_ONCE))) { CACHE_BUCKET *b = OPCODE_CACHE_FIND(filename TSRMLS_CC); if (b) { handle->type = ZEND_HANDLE_FILENAME; handle->opened_path = estrdup(b->real_path); return SUCCESS; } } return orig_steam_open(filename, handle TSRMLS_CC); } Thanks. Dmitry. --f46d043be10e18956004cf01fde6--