[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

mirrormanager future features



MirrorManager, for what I really wanted to see by the Fedora 7
release, has been a success.  But there are still several gotchas I'd
like to iron out before Fedora 8.

* The mirrorlist mod_python applet consumes too much memory on the app
  servers.  It basically reads in a 2MB mirrorlist_cache pickle file
  which is lists, by directory, of what mirrors hold what content.
  Handy to have, but in mod_python, that blows the RSS size out to
  ~27MB per process, times all the httpd processes that have run that
  code, each with their own private copy.  Not pretty.

  The mirrormanager TurboGears backend isn't fast enough to handle all
  the client requests for mirrorlists, hence I exported the data for
  mod_python to use.  But the mod_python trick takes too much memory.

  The way out?  Split the mod_python applet into two pieces:

  1) Yet another daemon, listening on a local UNIX socket,
  that has a copy of the mirrorlist cache.  It calculates the answers
  to return.

  2) The mod_python applet connects to the daemon, passes it's list
  of args, and gets back the answer list.  It handles redirects too.

  In this way, the daemon can fork() itself if necessary to handle the
  traffic, but those forks() use copy-on-write memory, and the
  children will never touch the pickle, so they'll all share mostly
  the same memory.  One copy of the mirrorlist_cache, used by all
  children.

  Since I'm saving so much RSS memory here, I can add back into the
  mirrorlist_cache all the directories which are being omitted
  now. So, we will be able to return the list for any dir or file that
  the public mirrors know about, not just a few as we do now.

  I've got a stab at this, but am still working on the details.  I'll
  want to do some time tests against the new code, to make sure it
  isn't too much slower for clients, but a quick swag shows it'll be
  OK; 0.3sec or so per request, even in parallel, which IMHO is "good
  enough".

* Mike's redirection stuff is included in the above already, so
  that'll be online as soon as the rest is.


Now, to find the time before F8...

Still to come, provided I find a lot of time (unlikely), or someone
else steps up to help:

* Designate a way for mirrors to claim themselves to be always
  up-to-date.  Probably will require a sysadmin to set this bit, as
  it's somewhat dangerous.  But there are cases, e.g. a local
  out-of-line squid proxy, where it makes sense to do it.  This change
  will change the schema, and has repercussions throughout the code,
  so I haven't wanted to make it lightly.

* Some people want metalink support.  Conceptually it's possible, and
  even pretty easy once we've got the daemon above working right.  But
  as noted on f-d-l, it's been 10 weeks since someone asked for it and
  even sent some code that doesn't quite integrate but was a starting
  point, and I haven't had time to get to it.  It's not looking good
  for me to add that right now, but I'd be happy to review patches.

* I've wanted to add the libgeoip country->continent mappings, so we
  can fall back netblock -> country -> continent -> global but I
  don't know C->Python bindings code at all, and need that exported in
  python-GeoIP for mm to use.

* I've got pending a request to change the fedora.repo files to make
  yum treat the list as in priority order.  I really want the
  continent mappings in place before doing that though...

  Should we let countries with <3 mirrors return their own lists?  Right
  now if a country has <3 mirrors, the users get the global list back.

Anything else people really need to see?


Thanks,
Matt

-- 
Matt Domsch
Linux Technology Strategist, Dell Office of the CTO
linux.dell.com & www.dell.com/linux


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]