• S
    Fully activate the sliding window pack access. · 60bb8b14
    Shawn O. Pearce 提交于
    This finally turns on the sliding window behavior for packfile data
    access by mapping limited size windows and chaining them under the
    packed_git->windows list.
    
    We consider a given byte offset to be within the window only if there
    would be at least 20 bytes (one hash worth of data) accessible after
    the requested offset.  This range selection relates to the contract
    that use_pack() makes with its callers, allowing them to access
    one hash or one object header without needing to call use_pack()
    for every byte of data obtained.
    
    In the worst case scenario we will map the same page of data twice
    into memory: once at the end of one window and once again at the
    start of the next window.  This duplicate page mapping will happen
    only when an object header or a delta base reference is spanned
    over the end of a window and is always limited to just one page of
    duplication, as no sane operating system will ever have a page size
    smaller than a hash.
    
    I am assuming that the possible wasted page of virtual address
    space is going to perform faster than the alternatives, which
    would be to copy the object header or ref delta into a temporary
    buffer prior to parsing, or to check the window range on every byte
    during header parsing.  We may decide to revisit this decision in
    the future since this is just a gut instinct decision and has not
    actually been proven out by experimental testing.
    Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
    Signed-off-by: NJunio C Hamano <junkio@cox.net>
    60bb8b14
sha1_file.c 47.1 KB