• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Apache doesn't cache htaccess configs

    February 5th, 2013
    tech
    When I previously suggested that Apache improve performance on .htaccess files by caching them and then watching for changes with inotify, Chris wrote:
    just invalidate its cache
    This is very sensible, except Apache doesn't actually cache .htaccess files between requests.

    Apache checks .htaccess files in a monster function, ap_directory_walk. It's called on every request, and if AllowOverride is set it will call ap_parse_htaccess on every directory from the root out to the leaf. In ap_parse_htaccess you can see that it does have a per-request cache for parsed .htaccess files:

        /* firstly, search cache */
        for (cache = r->htaccess; cache != NULL; cache = cache->next) {
            if (cache->override == override && strcmp(cache->dir, d) == 0) {
                *result = cache->htaccess;
                return OK;
            }
        }
    
        ... more sanity and safety checks ...
    
        dc = ap_create_per_dir_config(r->pool);
    
        ... load and parse the htaccess file into dc ...
    
        /* cache it */
        new = apr_palloc(r->pool, sizeof(struct htaccess_result));
        new->dir = parms.path;
        new->override = override;
        new->override_opts = override_opts;
        new->htaccess = dc;
    
        /* add to head of list */
        new->next = r->htaccess;
        r->htaccess = new;
    
        return OK;
    

    Now it may be that the overhead of parsing .htaccess files just isn't that big and that in many cases a cache would just be a waste of memory. While I doubt that, this is testable. To get a best-case for caching we could test just something like:

       /var/www/foo.html
       /var/www/.htaccess
    
    Comparing this to the version that has the configuration options in a <Directory> block should tell us the maximum we could expect to gain from caching.

    Update 2013-02-08: I ran some tests on the above configuration with ab, but the variance was so extreme (some runs of 10k requests averaged 4k/s while others averaged 500/s) that I think something else is wrong. I tried running longer tests with more requests but ab consistently died with apr_socket_recv: Operation timed out (60) before finishing the test.

    Comment via: google plus, facebook

    Recent posts on blogs I like:

    Crying in museums

    Exhibits that made me want a better world The post Crying in museums appeared first on Otherwise.

    via Otherwise January 6, 2023

    My Rainbow Kit

    For Christmas I got a really fun kit about rainbows. It had a rainbow catcher, a really cool necklace, a streamer thingy, and it also had a really really cool pinwheel, and it also had a bracelet and a pinata. Unfortunately the pinata didn't work out …

    via Anna Wise's Blog Posts January 5, 2023

    Phones

    I think that once a kid is in third grade they should be able to get a phone. I think that while sometimes parents might want kids not to have them at certain ages, phones can be quite useful at times. Tablets don't have GPS, they don't have WiFi…

    via Lily Wise's Blog Posts January 5, 2023

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact