New Linux xfs/reiser file systems

Started by Bruce Momjianover 24 years ago70 messages
#1Bruce Momjian
pgman@candle.pha.pa.us

I was talking to a Linux user yesterday, and he said that performance
using the xfs file system is pretty bad. He believes it has to do with
the fact that fsync() on log-based file systems requires more writes.

With a standard BSD/ext2 file system, WAL writes can stay on the same
cylinder to perform fsync. Is that true of log-based file systems?

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#2Alfred Perlstein
bright@wintelcom.net
In reply to: Bruce Momjian (#1)
Re: New Linux xfs/reiser file systems

* Bruce Momjian <pgman@candle.pha.pa.us> [010502 14:01] wrote:

I was talking to a Linux user yesterday, and he said that performance
using the xfs file system is pretty bad. He believes it has to do with
the fact that fsync() on log-based file systems requires more writes.

With a standard BSD/ext2 file system, WAL writes can stay on the same
cylinder to perform fsync. Is that true of log-based file systems?

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

The "problem" with log based filesystems is that they most likely
do not know the consequences of a write so an fsync on a file may
require double writing to both the log and the "real" portion of
the disk. They can also exhibit the problem that an fsync may
cause all pending writes to require scheduling unless the log is
constructed on the fly rather than incrementally.

There was also the problem that was brought up recently that
certain versions (maybe all?) of Linux perform fsync() in a very
non-optimal manner, if the user is able to use the O_FSYNC option
rather than fsync he may see a performance increase.

But his guess is probably nearly as good as mine. :)

--
-Alfred Perlstein - [alfred@freebsd.org]
http://www.egr.unlv.edu/~slumos/on-netbsd.html

#3Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Alfred Perlstein (#2)
Re: New Linux xfs/reiser file systems

The "problem" with log based filesystems is that they most likely
do not know the consequences of a write so an fsync on a file may
require double writing to both the log and the "real" portion of
the disk. They can also exhibit the problem that an fsync may
cause all pending writes to require scheduling unless the log is
constructed on the fly rather than incrementally.

Yes, this double-writing is a problem. Suppose you have your WAL on a
separate drive. You can fsync() WAL with zero head movement. With a
log based file system, you need two head movements, so you have gone
from zero movements to two.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#4Alfred Perlstein
bright@wintelcom.net
In reply to: Bruce Momjian (#3)
Re: New Linux xfs/reiser file systems

* Bruce Momjian <pgman@candle.pha.pa.us> [010502 15:20] wrote:

The "problem" with log based filesystems is that they most likely
do not know the consequences of a write so an fsync on a file may
require double writing to both the log and the "real" portion of
the disk. They can also exhibit the problem that an fsync may
cause all pending writes to require scheduling unless the log is
constructed on the fly rather than incrementally.

Yes, this double-writing is a problem. Suppose you have your WAL on a
separate drive. You can fsync() WAL with zero head movement. With a
log based file system, you need two head movements, so you have gone
from zero movements to two.

It may be worse depending on how the filesystem actually does
journalling. I wonder if an fsync() may cause ALL pending
meta-data to be updated (even metadata not related to the
postgresql files).

Do you know if reiser or xfs have this problem?

--
-Alfred Perlstein - [alfred@freebsd.org]
Daemon News Magazine in your snail-mail! http://magazine.daemonnews.org/

#5Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Alfred Perlstein (#4)
Re: New Linux xfs/reiser file systems

Yes, this double-writing is a problem. Suppose you have your WAL on a
separate drive. You can fsync() WAL with zero head movement. With a
log based file system, you need two head movements, so you have gone
from zero movements to two.

It may be worse depending on how the filesystem actually does
journalling. I wonder if an fsync() may cause ALL pending
meta-data to be updated (even metadata not related to the
postgresql files).

Do you know if reiser or xfs have this problem?

I don't know, but the Linux user reported xfs was really slow.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#6mlw
markw@mohawksoft.com
In reply to: Bruce Momjian (#1)
Re: New Linux xfs/reiser file systems

Bruce Momjian wrote:

I was talking to a Linux user yesterday, and he said that performance
using the xfs file system is pretty bad. He believes it has to do with
the fact that fsync() on log-based file systems requires more writes.

With a standard BSD/ext2 file system, WAL writes can stay on the same
cylinder to perform fsync. Is that true of log-based file systems?

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

I did see poor performance on reiserfs, I have not as yet ventured into using
xfs.

I occurs to me that journalizing file systems will almost always be slower on
an application such as postgres. The journalizing file system is trying to
maintain data integrity for an application which is also trying to maintain
data integrity. There will always be extra work involved.

This behavior raises the question about file system usage in Postgres. Many
databases, such as Oracle, create table space files and operate directly on the
raw blocks, bypassing the file system altogether.

On one hand, Postgres is easy to use and maintain because it cooperates with
the native file system, on the other hand it incurs the overhead of whatever
silliness the file system wants to do.

I would bet it is a huge amount of work to use a "table space" system and no
one wants that. lol. However, it should be noted that a bit more control over
database layout would make some great performance improvements.

The ability to put indexes on a separate volume from data.
The ability to put different tables on different volumes.
And so on.

In the short term, I think poor performance on a journalizing file system is to
be expected, unless there is an IOCTL to tell the FS to leave the files alone
(and postgres calls it). A Linux HOWTO which informs people that certain file
systems will have performance issues and why should handle the problem.

Perhaps we can convince the Linux community to create a "dbfs" which is a
stripped down simple no nonsense file system designed for applications like
databases?

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

#7Matthew Kirkwood
matthew@hairy.beasts.org
In reply to: mlw (#6)
Re: Re: New Linux xfs/reiser file systems

On Thu, 3 May 2001, mlw wrote:

I would bet it is a huge amount of work to use a "table space" system
and no one wants that.

From some stracing of 7.1, the most common syscall issued by
postgres is an lseek() to the end of the file, presumably to
find its length, which seems to happen up to about a dozen
times per (pgbench) transaction.

Tablespaces would solve this (not that lseek is a particularly
expensive operation, of course).

Perhaps we can convince the Linux community to create a "dbfs" which
is a stripped down simple no nonsense file system designed for
applications like databases?

Sync-metadata ext2 should be fine. Filesystems fsck pretty
quick when they contain only a few large files.

Otherwise, something like "smugfs" (now obsolete) might do.

Matthew.

#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Matthew Kirkwood (#7)
Re: Re: New Linux xfs/reiser file systems

Matthew Kirkwood <matthew@hairy.beasts.org> writes:

From some stracing of 7.1, the most common syscall issued by
postgres is an lseek() to the end of the file, presumably to
find its length, which seems to happen up to about a dozen
times per (pgbench) transaction.

Tablespaces would solve this (not that lseek is a particularly
expensive operation, of course).

No, they wouldn't; or at least they'd just create a different problem.
The reason for the lseek is that the file length may have changed since
the current backend last checked it. To avoid lseek we'd need some
shared data structure that maintains the current length of every active
table, which would be a nuisance to maintain and probably a source of
contention delays.

(Of course, such a data structure would just be the tip of the iceberg
of what we'd have to maintain for ourselves if we couldn't depend on the
kernel to do it for us. Reimplementing a filesystem doesn't strike me
as a profitable use of our time.)

regards, tom lane

#9Bruce Momjian
pgman@candle.pha.pa.us
In reply to: mlw (#6)
Re: New Linux xfs/reiser file systems

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

I did see poor performance on reiserfs, I have not as yet ventured into using
xfs.

I occurs to me that journalizing file systems will almost always be slower on
an application such as postgres. The journalizing file system is trying to
maintain data integrity for an application which is also trying to maintain
data integrity. There will always be extra work involved.

Yes, the problem is that extra work is required on PostgreSQL's part.
Log-based file systems make sure all the changes get onto the disk in an
orderly way, but I believe it can delay what gets written to the drive.
PostgreSQL wants to be sure all the data is on the disk, period.
Unfortunately, the _orderly_ part makes the _fsync_ part do more work.
By going from ext2 to a log-based file system, we are getting _farther_
from a raw device that if we just sayed with ext2.

ext2 has serious problems with corrupt file systems after a crash, so I
understand the need to move to another file system type. I have been
waitin for Linux to get a more modern file system. Unfortunately, the
new ones seem to be worse for PostgreSQL.

This behavior raises the question about file system usage in Postgres. Many
databases, such as Oracle, create table space files and operate directly on the
raw blocks, bypassing the file system altogether.

OK, we have considered this, but frankly, the new, modern file systems
like FFS/softupdates have i/o rates near raw speed, with all the
advantages a file system gives us. I believe most commercial dbs are
moving away from raw devices and toward file systems. In the old days
the SysV file system was pretty bad at i/o & fragmentation, so they used
raw devices.

The ability to put indexes on a separate volume from data.
The ability to put different tables on different volumes.
And so on.

We certainly need that, but raw devices would not make this any easier,
I think.

In the short term, I think poor performance on a journalizing file system is to
be expected, unless there is an IOCTL to tell the FS to leave the files alone
(and postgres calls it). A Linux HOWTO which informs people that certain file
systems will have performance issues and why should handle the problem.

Perhaps we can convince the Linux community to create a "dbfs" which is a
stripped down simple no nonsense file system designed for applications like
databases?

It could become a serious problem as people start using reiser/xfs for
their file systems and don't understand the performance problems. Even
more likely is that they will turn off fsync, thinking reiser doesn't
need it, when in fact, I think it does.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#10Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Tom Lane (#8)
Re: Re: New Linux xfs/reiser file systems

Matthew Kirkwood <matthew@hairy.beasts.org> writes:

From some stracing of 7.1, the most common syscall issued by
postgres is an lseek() to the end of the file, presumably to
find its length, which seems to happen up to about a dozen
times per (pgbench) transaction.

Tablespaces would solve this (not that lseek is a particularly
expensive operation, of course).

No, they wouldn't; or at least they'd just create a different problem.
The reason for the lseek is that the file length may have changed since
the current backend last checked it. To avoid lseek we'd need some
shared data structure that maintains the current length of every active
table, which would be a nuisance to maintain and probably a source of
contention delays.

Seems we should cache the file lengths somehow. Not sure how to do it
because our file system cache is local to each backend.

(Of course, such a data structure would just be the tip of the iceberg
of what we'd have to maintain for ourselves if we couldn't depend on the
kernel to do it for us. Reimplementing a filesystem doesn't strike me
as a profitable use of our time.)

Ditto. The database is complicated enough.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#11bpalmer
bpalmer@crimelabs.net
In reply to: Bruce Momjian (#9)
Re: Re: New Linux xfs/reiser file systems

This behavior raises the question about file system usage in Postgres. Many
databases, such as Oracle, create table space files and operate directly on the
raw blocks, bypassing the file system altogether.

OK, we have considered this, but frankly, the new, modern file systems
like FFS/softupdates have i/o rates near raw speed, with all the
advantages a file system gives us. I believe most commercial dbs are
moving away from raw devices and toward file systems. In the old days
the SysV file system was pretty bad at i/o & fragmentation, so they used
raw devices.

I'm starting to like the idea of raw FS for a few reasons:

1) Considering that postgresql now does WAL, the need for a logging FS
for the database doesn't seem as needed (is it needed at all?).

2) Given the fact that postgresql is trying to support many OSs,
depending on, for example, XFS on a linux system will cause many
problems. What about solaris? How about BSD? Etc.. Using raw db MAY be
easier than dealing with the problems that will arise from supporting
multiple filesystems.

That said, the ability to use the system's FS does have it's advantages
(backup, moving files, etc).

Just some thoughts..

- Brandon

b. palmer, bpalmer@crimelabs.net
pgp: www.crimelabs.net/bpalmer.pgp5

#12Kaare Rasmussen
kar@webline.dk
In reply to: Bruce Momjian (#10)
Re: Re: New Linux xfs/reiser file systems

kernel to do it for us. Reimplementing a filesystem doesn't strike me
as a profitable use of our time.)

Ditto. The database is complicated enough.

Maybe some kind of recommendation would be a good thing. That is, if the
PostgreSQL community has enough knowledge.

A section in the docs that discusses various file systems, so people can make
an intelligent choice.

--
Kaare Rasmussen --Linux, spil,-- Tlf: 3816 2582
Kaki Data tshirts, merchandize Fax: 3816 2501
Howitzvej 75 �ben 14.00-18.00 Web: www.suse.dk
2000 Frederiksberg L�rdag 11.00-17.00 Email: kar@webline.dk

#13Gavin Sherry
swm@linuxworld.com.au
In reply to: mlw (#6)
Re: Re: New Linux xfs/reiser file systems

On Thu, 3 May 2001, mlw wrote:

This behavior raises the question about file system usage in Postgres. Many
databases, such as Oracle, create table space files and operate directly on the
raw blocks, bypassing the file system altogether.

On one hand, Postgres is easy to use and maintain because it cooperates with
the native file system, on the other hand it incurs the overhead of whatever
silliness the file system wants to do.

It is not *that* hard to write a 'postgresfs' but you have to look at
the problems it creates. One of the biggest problems facing sys admins of
large sites is that the Oracle/DB2/etc DBA, having created the
purpose-build database filesystem, has not allowed enough room for
growth. Like I said, a basic file system is not difficult, but volume
management tools and the maintenance of the whole thing is. Currently,
postgres administrators are not faced with such a problem.

There is, of course, the argument that pgfs need not been enforced. The
problem is that many people would probably use it so as to have a
'superior' installation. This then entails the problems above, creating
more work for core developers.

Gavin

#14Christopher Kings-Lynne
chriskl@familyhealth.com.au
In reply to: mlw (#6)
RE: Re: New Linux xfs/reiser file systems

Just put a note in the installation docs that the place where the database
is initialised to should be on a non-Reiser, non-XFS mount...

Chris

-----Original Message-----
From: pgsql-hackers-owner@postgresql.org
[mailto:pgsql-hackers-owner@postgresql.org]On Behalf Of mlw
Sent: Thursday, 3 May 2001 8:09 PM
To: Bruce Momjian; Hackers List
Subject: [HACKERS] Re: New Linux xfs/reiser file systems

Bruce Momjian wrote:

I was talking to a Linux user yesterday, and he said that performance
using the xfs file system is pretty bad. He believes it has to do with
the fact that fsync() on log-based file systems requires more writes.

With a standard BSD/ext2 file system, WAL writes can stay on the same
cylinder to perform fsync. Is that true of log-based file systems?

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

I did see poor performance on reiserfs, I have not as yet ventured into
using
xfs.

I occurs to me that journalizing file systems will almost always be slower
on
an application such as postgres. The journalizing file system is trying to
maintain data integrity for an application which is also trying to maintain
data integrity. There will always be extra work involved.

This behavior raises the question about file system usage in Postgres. Many
databases, such as Oracle, create table space files and operate directly on
the
raw blocks, bypassing the file system altogether.

On one hand, Postgres is easy to use and maintain because it cooperates with
the native file system, on the other hand it incurs the overhead of whatever
silliness the file system wants to do.

I would bet it is a huge amount of work to use a "table space" system and no
one wants that. lol. However, it should be noted that a bit more control
over
database layout would make some great performance improvements.

The ability to put indexes on a separate volume from data.
The ability to put different tables on different volumes.
And so on.

In the short term, I think poor performance on a journalizing file system is
to
be expected, unless there is an IOCTL to tell the FS to leave the files
alone
(and postgres calls it). A Linux HOWTO which informs people that certain
file
systems will have performance issues and why should handle the problem.

Perhaps we can convince the Linux community to create a "dbfs" which is a
stripped down simple no nonsense file system designed for applications like
databases?

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

#15Noname
john@mwk.co.nz
In reply to: Christopher Kings-Lynne (#14)
Reiser and XFS -- tell the maintainers

There might be a problem, but if no one mentions it to the maintainers of
those
fs's, it will not get fixed...

Regards
John

#16Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Christopher Kings-Lynne (#14)
Re: Re: New Linux xfs/reiser file systems

Just put a note in the installation docs that the place where the database
is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file
systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#17Christopher Kings-Lynne
chriskl@familyhealth.com.au
In reply to: Bruce Momjian (#16)
RE: Re: New Linux xfs/reiser file systems

Well, arguably if you're setting up a database server then a reasonable DBA
should think about such things...

(My 2c)

Chris

-----Original Message-----
From: Bruce Momjian [mailto:pgman@candle.pha.pa.us]
Sent: Friday, 4 May 2001 9:42 AM
To: Christopher Kings-Lynne
Cc: mlw; Hackers List
Subject: Re: [HACKERS] Re: New Linux xfs/reiser file systems

Just put a note in the installation docs that the place where the database
is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file
systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#18Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Christopher Kings-Lynne (#17)
Re: Re: New Linux xfs/reiser file systems

Well, arguably if you're setting up a database server then a reasonable DBA
should think about such things...

Yes, but people have trouble installing PostgreSQL. I can't imagine
walking them through a newfs.

(My 2c)

Chris

-----Original Message-----
From: Bruce Momjian [mailto:pgman@candle.pha.pa.us]
Sent: Friday, 4 May 2001 9:42 AM
To: Christopher Kings-Lynne
Cc: mlw; Hackers List
Subject: Re: [HACKERS] Re: New Linux xfs/reiser file systems

Just put a note in the installation docs that the place where the database
is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file
systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

--
Bruce Momjian                        |  http://candle.pha.pa.us
pgman@candle.pha.pa.us               |  (610) 853-3000
+  If your life is a hard drive,     |  830 Blythe Avenue
+  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#19mlw
markw@mohawksoft.com
In reply to: Bruce Momjian (#16)
Re: New Linux xfs/reiser file systems

Bruce Momjian wrote:

Just put a note in the installation docs that the place where the database
is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file
systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

I have looked at Reiser, and I don't think it is a file system suited for very
large files, or applications such as postgres. The Linux crowd should lobby
against any such trend. It is ok for many moderately small files. ReiserFS
would be great for a cddb server, but poor for a database box.

XFS is a real big file system project, I'd bet that there are file properties
or management tools to tell it to leave directories and files alone. They
should have addressed that years ago.

One last mention..

Having better control over WHERE various files in a database are located can
make it easier to deal with these things.

Just a thought. ;-)

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

#20carl garland
carlhgarland@hotmail.com
In reply to: mlw (#19)
Re: Re: New Linux xfs/reiser file systems

Just put a note in the installation docs that the place where the

database

is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now.

I still think this is not necessarily the right approach either. One
major purpose of using a journaling fs is for fast boot up time after
crash. If you have a 100 GB database you may wish to have the data
on XFS. I do think that the WAL log should be on a separate disk and
on a non-journaling fs for performance.

Best Regards,
Carl Garland

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

#21Thomas Swan
tswan@ics.olemiss.edu
In reply to: Bruce Momjian (#16)
Re: New Linux xfs/reiser file systems

mlw wrote:

Bruce Momjian wrote:

Just put a note in the installation docs that the place where the database
is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file
systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

I have looked at Reiser, and I don't think it is a file system suited for very
large files, or applications such as postgres. The Linux crowd should lobby
against any such trend. It is ok for many moderately small files. ReiserFS
would be great for a cddb server, but poor for a database box.

XFS is a real big file system project, I'd bet that there are file properties
or management tools to tell it to leave directories and files alone. They
should have addressed that years ago.

One last mention..

Having better control over WHERE various files in a database are located can
make it easier to deal with these things.

I think it's worth noting that Oracle has been petitioning the kernel
developers for better raw device support: in other words, the ability to
write directly to the hard disk and bypassing the filesystem all
together.

If the db is going to assume the responsibility of disk write
verification it seems reasonable to assume you might want to investigate
the raw disk i/o options.

Telling your installers that a major performance gain is attainable by
doing so might be a start in the opposite direction. I've monitored a
lot of discussions and from what I can gather, postgresql does it's own
set of journaling operations. I don't think that it's necessary for
writes to be double journalled anyway.

Again, just my two cents worth...

#22mlw
markw@mohawksoft.com
In reply to: carl garland (#20)
Re: New Linux xfs/reiser file systems

Here is a radical idea...

What is it that is causing Postgres trouble? It is the file system's attempts
to maintain some integrity. So I proposed a simple "dbfs" sort of thing which
was the most basic sort of file system possible.

I'm not sure, but I think we can test this hypothesis on the FAT32 file system
on Linux. As far as I know, FAT32 (FAT in general) is a very simple file system
and does very little during operation, except read and write the files and
manage what's been allocated. Plus, the allocation table is very simple in
comparison all the other file systems.

Would pgbench run on a system using ext2, Reiser, then FAT32 be sufficient to
get a feeling for the type of performance Postgres would get, or am I just off
the wall?

If this idea has some merit, what would be the best way to test it? Move the
pg_xlog directory first, then try base? What's the best methodology to try?

carl garland wrote:

Just put a note in the installation docs that the place where the

database

is initialised to should be on a non-Reiser, non-XFS mount...

Sure, we can do that now.

I still think this is not necessarily the right approach either. One
major purpose of using a journaling fs is for fast boot up time after
crash. If you have a 100 GB database you may wish to have the data
on XFS. I do think that the WAL log should be on a separate disk and
on a non-journaling fs for performance.

Best Regards,
Carl Garland

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

#23Michael Samuel
michael@miknet.net
In reply to: Bruce Momjian (#9)
Re: Re: New Linux xfs/reiser file systems

On Thu, May 03, 2001 at 11:41:24AM -0400, Bruce Momjian wrote:

ext2 has serious problems with corrupt file systems after a crash, so I
understand the need to move to another file system type. I have been
waitin for Linux to get a more modern file system. Unfortunately, the
new ones seem to be worse for PostgreSQL.

If you fsync() a directory in Linux, all the metadata within that directory
will be written out to disk.

As for filesystem corruption, I can say the e2fsck is among the best fsck
programs out there, and I've only ever had 1 occasion where I've lost any
data on an ext2 filesystem, and that was due to bad sectors causing me to
lose the root directory. (Well, apart from human errors, but that doesn't
count)

OK, we have considered this, but frankly, the new, modern file systems
like FFS/softupdates have i/o rates near raw speed, with all the
advantages a file system gives us. I believe most commercial dbs are
moving away from raw devices and toward file systems. In the old days
the SysV file system was pretty bad at i/o & fragmentation, so they used
raw devices.

And Solaris' 1/01 media has better support for O_DIRECT (?), which they claim
gives you 93% of the speed of a raw device. (Or something like that; I read
this in marketing material a couple of months ago)

Raw devices are designed to have filesystems on them. The only excuses for
userland tools accessing them, are fs-specific tools (eg. dump, fsck, etc),
or for non-unix filesystem tools, where the unix VFS doesn't handle things
properly (hfstools).

The ability to put indexes on a separate volume from data.
The ability to put different tables on different volumes.
And so on.

We certainly need that, but raw devices would not make this any easier,
I think.

It would be cool if either at compile time or at database creation time, we
could specify a printf-like format for placing tables, indexes, etc.

It could become a serious problem as people start using reiser/xfs for
their file systems and don't understand the performance problems. Even
more likely is that they will turn off fsync, thinking reiser doesn't
need it, when in fact, I think it does.

ReiserFS only supports metadata logging. The performance slowdown must be
due to logging things like mtime or atime, because otherwise ReiserFS is a
very high performance FS. (Although, I admittedly haven't used it since it
was early in it's development)

--
Michael Samuel <michael@miknet.net>

#24mlw
markw@mohawksoft.com
In reply to: mlw (#6)
Re: New Linux xfs/reiser file systems

Michael Samuel wrote:

ReiserFS only supports metadata logging. The performance slowdown must be
due to logging things like mtime or atime, because otherwise ReiserFS is a
very high performance FS. (Although, I admittedly haven't used it since it
was early in it's development)

The way I understand it is that ReiserFS does not attempt to separate files at
the block level. Multiple files can live in the same disk block. This is cool
if you have many small files, but the extra overhead for large files such as
those used by a database, is a bit much.

I read some stuff about a year ago, and my impressions forced me to conclude
that ReiserFS was geared toward applications. Which is a pretty good thing for
applications, but not for databases.

I really think a simple low down dirty file system is just what the doctor
ordered for postgres.

Remember, general purpose file systems must do for files what Postgres is
already doing for records. You will always have extra work. I am seriously
thinking of trying a FAT32 as pg_xlog. I wonder if it will improve performance,
or if there is just something fundamentally stupid about FAT32 that will make
it worse?

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

#25Ken Hirsch
kenhirsch@myself.com
In reply to: carl garland (#20)
Re: New Linux xfs/reiser file systems

Before we get too involved in speculating, shouldn't we actually measure the
performance of 7.1 on XFS and Reiserfs? Since it's easy to disable fsync,
we can test whether that's the problem. I don't think that logging file
systems must intrinsically give bad performance on fsync since they only log
metadata changes.

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

Ken Hirsch

#26Noname
teg@redhat.com
In reply to: mlw (#19)
Re: Re: New Linux xfs/reiser file systems

mlw <markw@mohawksoft.com> writes:

I have looked at Reiser, and I don't think it is a file system suited for very
large files, or applications such as postgres.

What's the problem with big files? ReiserFS v2 doesn't seem to support
it, while v3 seems just fine (of the ondisk format)

That said, I'm certainly looking forward to xfs - I believe it will be
the most widely used of the current batch of journaling file systems
(reiserfs, jfs, XFS and ext3, the latter mainly focusing on an easy
migration path for existing system)

--
Trond Eivind Glomsr�d
Red Hat, Inc.

#27Michael Samuel
michael@miknet.net
In reply to: mlw (#24)
Re: Re: New Linux xfs/reiser file systems

On Fri, May 04, 2001 at 08:02:17AM -0400, mlw wrote:

The way I understand it is that ReiserFS does not attempt to separate files at
the block level. Multiple files can live in the same disk block. This is cool
if you have many small files, but the extra overhead for large files such as
those used by a database, is a bit much.

It should be at least as fast as other filesystems for large files. I suspect
that it would be faster in fact. The only catch is that the performance of
reiserfs sucks when it gets past 85% or so full. (ext2 has similar problems)

You can read about all this stuff at http://www.namesys.com/

I really think a simple low down dirty file system is just what the doctor
ordered for postgres.

Traditional BSD FFS or Solaris UFS is probably the best bet for postgres.

Remember, general purpose file systems must do for files what Postgres is
already doing for records. You will always have extra work. I am seriously
thinking of trying a FAT32 as pg_xlog. I wonder if it will improve performance,
or if there is just something fundamentally stupid about FAT32 that will make
it worse?

Well, for a starters, file permissions...

Ext2 would kick arse over FAT32 for performance.

--
Michael Samuel <michael@miknet.net>

#28Roland Roberts
roland@astrofoto.org
In reply to: Bruce Momjian (#18)
Re: Re: New Linux xfs/reiser file systems

"Bruce" == Bruce Momjian <pgman@candle.pha.pa.us> writes:

Well, arguably if you're setting up a database server then a
reasonable DBA should think about such things...

Bruce> Yes, but people have trouble installing PostgreSQL. I
Bruce> can't imagine walking them through a newfs.

In most of linux-land, the DBA is probably also the sysadmin. In
bigger shops, and those which currently run, say Oracle or Sybase, the
two roles are separate. When they are separate, you don't have to
walk the DBA through it; he just walks over to the sysadmin and says
"I need X megabytes of space on a new Y filesystem."

roland
--
PGP Key ID: 66 BC 3B CD
Roland B. Roberts, PhD RL Enterprises
roland@rlenter.com 76-15 113th Street, Apt 3B
rbroberts@acm.org Forest Hills, NY 11375

#29Noname
teg@redhat.com
In reply to: Bruce Momjian (#1)
Re: New Linux xfs/reiser file systems

I got some information from Stephen Tweedie on this - please keep him
"Cc:" as he's not on this list

************************************************************************
Bruce Momjian <pgman@candle.pha.pa.us> writes:

I was talking to a Linux user yesterday, and he said that performance
using the xfs file system is pretty bad. He believes it has to do with
the fact that fsync() on log-based file systems requires more writes.

Performance doing what? XFS has known performance problems doing
unlinks and truncates, but not synchronous IO. The user should be
using fdatasync() for databases, btw, not fsync().

First, XFS, ext3 and reiserfs are *NOT* log-based filesystems. They
are journaling filesystems. They have a log, but they are not
log-based because they do not store data permanently in a log
structure. Berkeley LFS, Sprite and Spiralog are log-based
filesystems.

With a standard BSD/ext2 file system, WAL writes can stay on the same
cylinder to perform fsync. Is that true of log-based file systems?

Not true on ext2 or BSD. Write-aheads are _usually_ close to the
inode, but not always. For true log-based filesystems, writes are
always completely sequential, so the issue just goes away. For
journaling filesystems, depending on the setup there may be a seek to
the journal involved, but some journaling filesystems can use a
separate disk for the journal so no seek is required.

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

A database normally preallocates its data files and then performs most
of its writes using update-in-place. In such cases, fsync() is almost
always the wrong thing to be doing --- the data writes have changed
nothing in the inode except for the timestamps, and there's no need to
flush the timestamps to disk for every write. fdatasync() is
designed for this --- if the only inode change is timestamps,
fdatasync() will skip the seek to the inode and will only update the
data. If any significant inode fields have been changed, then a full
flush is done.

Using fdatasync, most filesystems will incur no seeks for data flush,
regardless of whether the filesystem is journaling or not.

Cheers,
Stephen
************************************************************************

--
Trond Eivind Glomsr�d
Red Hat, Inc.

#30Kaare Rasmussen
kar@webline.dk
In reply to: Bruce Momjian (#16)
Re: Re: New Linux xfs/reiser file systems

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file

What is a 'default file system' ? I know that untill now, everybody is using
ext2. But that's only because there hasn't been anything comparable. Now we
se ReiserFS, and my SuSE installation offers the choice. In the future, I
believe that people can choose from ext2, ReiserFS,xfs, ext3 and maybe more.

systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

No, I don't think it's a big hurdle. If you just want to play with
PostgreSQL, you wont care. If you're serious, you'll repartition.

--
Kaare Rasmussen --Linux, spil,-- Tlf: 3816 2582
Kaki Data tshirts, merchandize Fax: 3816 2501
Howitzvej 75 �ben 14.00-18.00 Web: www.suse.dk
2000 Frederiksberg L�rdag 11.00-17.00 Email: kar@webline.dk

#31Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Ken Hirsch (#25)
Re: Re: New Linux xfs/reiser file systems

[ Charset ISO-8859-1 unsupported, converting... ]

Before we get too involved in speculating, shouldn't we actually measure the
performance of 7.1 on XFS and Reiserfs? Since it's easy to disable fsync,
we can test whether that's the problem. I don't think that logging file
systems must intrinsically give bad performance on fsync since they only log
metadata changes.

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

There have been multiple reports of poor PostgreSQL performance on
Reiser and xfs. I don't have numbers, though. Frankly, I think we need
xfs and reiser experts involved to figure out our options here.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#32Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Michael Samuel (#27)
Re: Re: New Linux xfs/reiser file systems

On Fri, May 04, 2001 at 08:02:17AM -0400, mlw wrote:

The way I understand it is that ReiserFS does not attempt to separate files at
the block level. Multiple files can live in the same disk block. This is cool
if you have many small files, but the extra overhead for large files such as
those used by a database, is a bit much.

It should be at least as fast as other filesystems for large files. I suspect
that it would be faster in fact. The only catch is that the performance of
reiserfs sucks when it gets past 85% or so full. (ext2 has similar problems)

That is pretty standard for most modern file systems. They need that
free space to optimize.

You can read about all this stuff at http://www.namesys.com/

I really think a simple low down dirty file system is just what the doctor
ordered for postgres.

Traditional BSD FFS or Solaris UFS is probably the best bet for postgres.

That is my opinion. BSD FFS seems to be general enough to give good
performance for a large scale of application needs. It is not as fast
as XFS for streaming large files (media), and it doesn't optimize small
files below the 1k size (fragments), and it does require fsck on reboot.

However, looking at all those for PostgreSQL, the costs of the new Linux
file systems seems pretty high, especially considering our need for
fsync().

What I am really concerned about is when xfs/reiser become the default
file systems for Linux, and people complain about PostgreSQL
performance. And if we require special file systems, we lose some of
our ability to easily grow. Because of ext2's problems with crash
recovery, who is going to want to put other data on that file system
when they have xfs/reiser available. And boots are going to have to
fsck that ext2 file system.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#33Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Kaare Rasmussen (#30)
Re: Re: New Linux xfs/reiser file systems

[ Charset ISO-8859-1 unsupported, converting... ]

Sure, we can do that now. What do we do when these are the default file
systems for Linux? We can tell them to create other types of file

What is a 'default file system' ? I know that untill now, everybody is using
ext2. But that's only because there hasn't been anything comparable. Now we
se ReiserFS, and my SuSE installation offers the choice. In the future, I
believe that people can choose from ext2, ReiserFS,xfs, ext3 and maybe more.

But some day the default will be a log-based file system, and people
will have to hunt around to create a non-log based one.

systems, but that is a pretty big hurdle. I wonder if it would be
easier to get reiser/xfs to make some modifications.

No, I don't think it's a big hurdle. If you just want to play with
PostgreSQL, you wont care. If you're serious, you'll repartition.

Yes, but we could get a reputation for slowness on these log-based file
systems.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#34Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Bruce Momjian (#33)
Re: New Linux xfs/reiser file systems

[ Charset ISO-8859-1 unsupported, converting... ]

I got some information from Stephen Tweedie on this - please keep him
"Cc:" as he's not on this list

************************************************************************
Bruce Momjian <pgman@candle.pha.pa.us> writes:

I was talking to a Linux user yesterday, and he said that performance
using the xfs file system is pretty bad. He believes it has to do with
the fact that fsync() on log-based file systems requires more writes.

Performance doing what? XFS has known performance problems doing
unlinks and truncates, but not synchronous IO. The user should be
using fdatasync() for databases, btw, not fsync().

This is hugely helpful. In PostgreSQL 7.1, we do use fdatasync() by
default it is available on a platform.

First, XFS, ext3 and reiserfs are *NOT* log-based filesystems. They
are journaling filesystems. They have a log, but they are not
log-based because they do not store data permanently in a log
structure. Berkeley LFS, Sprite and Spiralog are log-based
filesystems.

Sorry, I get those mixed up.

With a standard BSD/ext2 file system, WAL writes can stay on the same
cylinder to perform fsync. Is that true of log-based file systems?

Not true on ext2 or BSD. Write-aheads are _usually_ close to the
inode, but not always. For true log-based filesystems, writes are
always completely sequential, so the issue just goes away. For
journaling filesystems, depending on the setup there may be a seek to
the journal involved, but some journaling filesystems can use a
separate disk for the journal so no seek is required.

I know xfs and reiser are both log based. Do we need to be concerned
about PostgreSQL performance on these file systems? I use BSD FFS with
soft updates here, so it doesn't affect me.

A database normally preallocates its data files and then performs most
of its writes using update-in-place. In such cases, fsync() is almost
always the wrong thing to be doing --- the data writes have changed
nothing in the inode except for the timestamps, and there's no need to
flush the timestamps to disk for every write. fdatasync() is
designed for this --- if the only inode change is timestamps,
fdatasync() will skip the seek to the inode and will only update the
data. If any significant inode fields have been changed, then a full
flush is done.

We do pre-allocate our log file space in chunks to avoid inode/block
index writes.

Using fdatasync, most filesystems will incur no seeks for data flush,
regardless of whether the filesystem is journaling or not.

Thanks. That is a big help. I wonder if people reporting performance
problems were using 7.0.3. We only added fdatasync() in 7.1.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#35mlw
markw@mohawksoft.com
In reply to: mlw (#6)
Re: New Linux xfs/reiser file systems

Michael Samuel wrote:

Remember, general purpose file systems must do for files what Postgres is
already doing for records. You will always have extra work. I am seriously
thinking of trying a FAT32 as pg_xlog. I wonder if it will improve performance,
or if there is just something fundamentally stupid about FAT32 that will make
it worse?

Well, for a starters, file permissions...

Ext2 would kick arse over FAT32 for performance.

OK, I'll bite.

In a database environment where file creation is not such an issue, why would ext2
be faster?

The FAT file system has, AFAIK, very little overhead for file writes. It simply
writes the two FAT tables on file extension, and data. Depending on cluster size,
there is probably even less happening there.

I don't think that anyone is saying that FAT is the answer in a production
environment, but maybe we can do a comparison of various file systems and see if any
performance issues show up.

I mentioned FAT only because I was thinking about how postgres would perform on a
very simple file system, one which bypasses most of the normal stuff a "good"
general purpose file system would do. While I was thinking this, it occurred to me
that FAT was about he cheesiest simple file system one could find, short of a ram
disk, and maybe we could use it to test the assumptions about performance impact of
the file system on postgres.

Just a thought. If you know of some reason why ext2 would perform better in the
postgres environment, I would love to hear why, I'm very curious.

#36Stephen C. Tweedie
sct@redhat.com
In reply to: Bruce Momjian (#34)
Re: New Linux xfs/reiser file systems

Hi,

On Fri, May 04, 2001 at 01:49:54PM -0400, Bruce Momjian wrote:

Performance doing what? XFS has known performance problems doing
unlinks and truncates, but not synchronous IO. The user should be
using fdatasync() for databases, btw, not fsync().

This is hugely helpful. In PostgreSQL 7.1, we do use fdatasync() by
default it is available on a platform.

Good --- fdatasync is defined in SingleUnix, so it's probably safe to
probe for it and use it by default if it is there.

The 2.2 Linux kernel does not have fdatasync implemented, but glibc
will fall back to fsync if that's all that the kernel supports. 2.4
implements both with the required semantics.

--Stephen

#37Joe Conway
joe@conway-family.com
In reply to: Bruce Momjian (#31)
1 attachment(s)
Re: Re: New Linux xfs/reiser file systems

Before we get too involved in speculating, shouldn't we actually measure

the

performance of 7.1 on XFS and Reiserfs? Since it's easy to disable

fsync,

we can test whether that's the problem. I don't think that logging file
systems must intrinsically give bad performance on fsync since they only

log

metadata changes.

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

There have been multiple reports of poor PostgreSQL performance on
Reiser and xfs. I don't have numbers, though. Frankly, I think we need
xfs and reiser experts involved to figure out our options here.

I've done some testing to see how Reiserfs performs
vs ext2, and also various for various values of wal_sync_method while on a
reiserfs partition. The attached graph shows the results. The y axis is
transactions per second and the x axis is the transaction number. It was
clear that, at least for my specific app, ext2 was significantly faster.

The hardware I tested on has an Athalon 1 Ghz cpu and 512 MB ram. The
harddrive is a 2 year old IDE drive. I'm running Red Hat 7 with all the
latest updates, and a freshly compiled 2.4.2 kernel with the latest Reiserfs
patch, and of course PostgreSQL 7.1. The transactions were run in a loop,
700 times per test, to insert sample data into 4 tables. I used a PHP script
running on the same machine to do the inserts.

I'd be happy to provide more detail or try a different variation if anyone
is interested.

- Joe

Attachments:

fs_perf_diff.jpgimage/jpeg; name=fs_perf_diff.jpgDownload
����JFIF,,��C		

 $.' ",#(7),01444'9=82<.342��C			

2!!22222222222222222222222222222222222222222222222222��m�"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?��(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(���n.%�"B�I#TP2I'��4%���w����?����Q�	����k���c�@���w����?����Q�	����k���c�@���w����?����Q�	����k���c�@���w����?����Q�	����k���c�@���w����?����Q�	����k���c�@���w����?����Q�	����k���c�@���w����?����Q�	����k���c�@���w����?����U�xoS�����U��������I����	�(b�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�����<�/�����SWA\�����x���W_�)������;Y�=���_�5
 FW���G�v���I09���R�������K�����J7�D���!6��Ey/�*_��T��)����|[�ES[�����~����_s�!]�=j����~k��]�k���_�4����]!�!�(��P��2��v��~��������<����r�������Qo�(�lJv�f2�[sp|������ud�%��-����+r�BL����|���r�z���hW����,t(#m8`]ORo���=���r�[��E_��#�U7/��jk:m���p�~���i��Z�pgr���m)�8�oSx;��C����Ey����������x�O6��b��5������U�q�T�$.���
zcu���o}�����������p���bQg*B|��%;J�}Y��LV��0�M<��%�6���0'q���y� �~4�k�����)&�]2�#�5,��&9$�1\����l�}~KM&H��L��_9�a<�0�$4���eM��^9b���W7��L4���v���DV�ZG"�\�[HK@7nR��T��u�P\���9�?�
���WU�W?��xO�����tQEQEQEQEQEQEQEW?������J���f���;1�������w+��H��;+���WZM��a`v\]����M��$Q�
��!��<���������M��:���u�D����G.@;�e�S�rx=OZ�@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s�;��y�_�]��������<�/�����SPAEej�$�49c�Q�Xd�w*lg8�!A��������X����K��������y���:a�����)���&t�W5������y��?�`x_���//�U�,O�����������/�����n�Q4~-�����vVv�Bm������F��[��#`9s�i;I�Z���}b���FK�P!r����*�j���wT����j��S�K��T�Q�${�Sl[�r��nX��>��7`��V;x����Zi�����q%�[���HdT.� F��s�U27����;i�w��2�E|�ZD�o&�.B����#����)rT������2�
1�FF�p�AS�#�I\>����J�O���=V�+�V]:}A"��!6�/�b�C���p�@Ac��
>�;�n5W�3�>�u2�9G����q��lV>����I�}
��	�n�E��b8�)V%rHY1�����(��+����<'�aY?����
��C�!�	��VO�"����(��(��(��(��(��(��(�~�F�.<Q�5Kc�
���F$uq0cT1S�x�}�/mu�6��m �^@�k#,N���Q"��
��r��+�R�������5��n�4V����X�(PN�����z���Tvz�n��w�"�i+-�	s�����������(z7�����m�hah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����(�����c�����Eg�ah��
���t�
?���X��:�hQ@��Z?���?���-��V?���ZP���@��O���G��U����V�������*����+��.��<G$ze�:iw,��( ��W]\�����x���W_�)�^�N��6}����fvy�+��\dq�~UW�����w���V��j�*�L�5�EZ2iz����h����?���G4?�i��
��ZtS�����}b�����w�k��V�.�Ce��-�����bX����Yx8	a�:�����O>��_6�>�����@h6F�F���f�b��v_���[Y�wwW[�����e����98�RG<3<�����%U`J6��oC���� ���L�o[��:L�m����|�������19�Ds����9v��-�b�u��x��m6�W������|���x����wYEa���:��X�Y/�c�x�H8��"{�A�Q��c�����������_�����G����h��vt����9����k7:���3����K%�k����*�K(��&���(��
*9����[��c����H�U�I�9�O
��W��4�x���+��s������s����H�����?�����d��+��(��(��(��(��(��(��(��(��+�������*��F�WA\����=��W��6��:
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��w�$����
���M]s�;��y�_�]���z���/����;���=�����|��x���V��������*ae99{I/$��#��
U&���_�j���}����
�����G��_�@�?���u��Q�)����������?����D��VmCO���w
���qg���acd�����Jd��wde���*�A>��>�i��w-���A�v����X@�/�|�}��������P���wh�� ��1'�o61�������������t����M54��|��j�'n9d�	�W�;J�=$q~�n�C�O
��j�:~��y��WP������63m��m���|[�I��z���$������B��R"��X��{�e�����x4�4\[�
>���y^	<��HI���AbIb:���m���w\Z���O#��$P��3�.I$�D$��3�P'�����(�j��vE|�w���s*bcV��ee<k��C���
$���E4�l�/�C�ksAM��o6���6������
�G�C�isZxr�M���x�d[��h��Tc9��&��Y��N��F�tzdI����c��g1RA#x�4��jz��q�iGU������yo^t�e�H!��nW,�Q���*{	���[O��.�����q���r��z�O��U�4-P�w�U������n��F$��#�f$�;��W���$��5���Ajq�9��%u�g,'Py���Nz��O�mV]a[�����e���E�����3�g
&�9��HU���5!��[����sw=��K9
	
�)��eX�s&SrJ�r��"��6�n���y9� 
���q&�ILd�6�<
#�t�uI�H��D�&M���*%u��|d��x'��������C������Eu]s�!������+'��]PAEPEPEPEPEPEPEPEP\����=��W��6��
��?�����
������QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW?���'�%��U���j�+��������*��E5tV^��Z��I:���|}�#��+?��7�{���k����j���LB�P����o��(�o��7�{���k����N��=������i����=�+�}/���y�i�}�����im=����i�f�@NX�����[M[��mB�^;�%��|�e@��$�eb;��[��6�<��V2�G����G2���u�����b��S��+q�n�l.��O�K{]22%�t�d������LR@p��!6����|�3��#����I���G�!M��,�eE��L��y#����V�u'�,5K��#wX&W*����/ ��������%�]�I�-5;�B"e���3m����>}�����xW��z:xE�;t�����T)��v�b8<���K�A$�2�O<6���\K0D���F
��d�O�j�������\Zj��t�-��ee��bBp�r@���5_�6m}�Mv�O"�sF�J��tuud,
�R��7���)&�{�5/jz��RGw��
V�a[�VB�3C����$;�?�e���]���i��[!]��[�UF���.�����R^j�n�qko{�Z[Ov�-��eF���9`0=G�s�m?Y��Iwi���QIz����F�2��w��b[��6O��^��j�6�e����������f���HD�������PHp���zsz����6��O���n5K�����K|�
��%��7F�0���^2H�+���9wh�S��t���t�P�v���?1+$#��E����V�Z�������8fWh[$a�9S�#��V_��9�?�
���WU��m/R��c�k)����khV����FP,v�F�!�f���3��<C�!�	��VO�"����(��(��(��(��(��(��(��(�����(z7�����m�t���C�����m(���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���O<K�`�����W?���'�%��U���j�(�[��=��=�:����p��m�@��y�	#�23�����������?�9Z��I+���0����L��������V��Q���?�x�g�|uo������o�+�u����Q�0��Q����eP���oS�Td�v�"�\���W@�ckebl"r��k�����`��b0����}���+�_A2A��K�Eb��_���|�#f$�q2.UIm��qU��,�;9,�� �����1"6#*x8 ��='�w����Cg��M���N�s�t�OE�!>t~S���!J�d���M���Ki�V����M6�n�TDT4R����P3�C��@74�
h:5�\iz&�c;!F���"b����U��;�#���\y�������_����2pG"��_4����
6������L���� ���+o�2�6r6�$�%��.�[+�i�d�-�������F�����F	�P�U E�����������$���W�����4�q"���v~A��;O�zH$i�����t�HT�>��H���#�����~������Z4�����K����$��$����>���v>(m�������7�	v�L#������y������v����mb�H���}��e��>XU16��������-�|�s�!������+'��]V>��g��6��}B�)O��lo��]�0lg�M�6a��T$��?�|�k��O�c��w�w�.w����g���QEQEQEQEQEQEQEQEW?y�%F��U����������(z7�����m�tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE����I���u����
�x!�����(��T)$r(eu#x �1@Q\�� ���SC��t?�M��x?��M����4�Q\�� ���SC��t?�M��x?��M����4b��vz�����N�\�m�a�������~`���*v�A�~�!����I~��n]A��69|�UDb<y@�
�O\'� ���SC��t?�M��x?��M����4i�������//�����(��[�D�$fR��A�n9-���<caq�{�H��I����Vw1�`R
�`������O�A<�B�������?���
�����h��]6�P��K�]]���$��<����n#�h�$'<��~P
#�f�|;�����O$��Vk��+�#-��#�,r{������*h�.�����O��������&����5��}cu�R-�>S>��|�S#.��q���'2M��i�,m|5��A*%�\[�q�w�p��%�I����'���T���]�G� ���SC��t?�MI�&���[�J�]<w7Zz�W�QTe�#R�&��0f�$���?��I����$���Y��P!���\���_�O��������&��A<�B�����������o��o�Mf$�m��k��lmCBF�� l#����j6�S�tO4��jl�,�C9W?1�����
��x#�Q����}I��\��������+Z��~�/#�����iuvM�q��p�dd?���(��(��(��(��(��(��(��OZ��<�t�����6��\H�c-�5f�2��0('$gB��k3�zr���}����Esma-��q������aH��������[�qo,sA*�H�2���AG9�;��(z7�����m�ji0ZZ��6�I
�V�������A��^k����W�'ZJ�����zQ��(P�m��W�9$��9�������������&������?�;����o�J����������&������?�;����o�J����������&������?�;����o�J����������&������?�;����o�J����&��v�I<�!�"�5.�>�*��$�u���?�wC��4���@��������M7�%Q�?�wC��4���@��������M7�%Q�?�wC��4���@��������M7�%Q�?�wC��4���@��0���O
x��K�P�.�Q%�K{R��
��s��r�����}������M7�%V��(�I�5�)B1��gAEp����������x�C[�BA1.�3�6.�����@�l�������M7�%T8���qi&��AEs�c���t?�M��T}������M7�%R$�(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	�����(��~0������i��*��������	��������?������Z���x�5�k�WJ��]���
2H��z���q�'����PEPEPEPEPEPEPEPEP\����=��W��6��
��?�����
������QEQEQEQE�_�Ym�-7K�z���$��@+)�.�A�u�/��~�������@@���|(��k��[����o��Ao}�Z����
�fP�*��Y���[��@h,������:����Py�lg�$PX���g�^��N��������}Z2��7f�;��>�3D��D��X�
���H����=i��v�i�}���������{���r>$���H8`_'��o�t�F����+y5�uh�q�$�)<�	_0w���[�0�2Q���:�9FQ�5����~����>I/�������gl��`���`;��$��[��6�N�=�����I�����H��f����9Bnra4M;@$C*(v�0��I��J�>�����O���.��M���*�ZF��;��$�k�oj�.��Ed\�����3"�L��'��0pGM�j��a�f��[���ko���321P\�w*���'����'''��;���$����eX|/&���Z�]�SM�\^��9P�Em�6������jzO�_��(�����q����� 1e��M���Y>S�(V��I���]"�L�]������c�2NI8��j�'������K�������c�Mj_]�^:���~������"yH����O��;�{�> i�/�����>�c������91��a�>�x`M�x~�I�;R�=��N��`�0��:�_��,�]x�8n.#�
�d��������s���������/N��z5b�SN]�����_�.�C�����[�Y���v�JVx���;rNMv������e��]��T�����6���Ud��nU*s�m,���|P�/t_���-��bx*��g�v'�9�����z�j����O��6������QEx��$\��Ci�}�
:�O:K������@�O$� ��U�����������EyV���J�P��N����Y��� L}�g�O?68��W?�5	|S=��Zo��IZ��X���q��
`��<�f���^W&�>�[����e��+��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��3����������rV�g�?���}����
(��(��(��(��(��(��(��(��+�������*��F�WA\����=��W��6��:
(��
(��
d�E�D�K*�,�*�{�@��&�+x$�y(�R�#�UU$�z+����]�>���7���E�D
���G^��$������>�n��x\,�
��#��sU�C���I����
�;��OB�{�\�<S��<Sx-�n��E�&%�I������e�;��My?�>*j�)���m-�-�T�N��J�s�?ur��1��&���uk-3�������B�Qk�@���N���O�����;)e���h����k���^Mh"=��82���5b��L�c�g#9�+�k?C����+.�maX�"�|�����>���p��<��6�OiRS�y���kM/D�-�x�lo��@Ae/�����\�\��~���=<C�]\2�v�#�	�A���;�g���������
�c��������A<~�p���<�G�`��{E�����m����i|��,�$�,I�x�+�8�J
1z��Tq\�u?z�������W�,/nm���n��bU�4U�@0�<kZ�5��^#��J��4&�dPa.���(nH&9��������A�R���'�o�K��Fd	VoL��p2��n�z�<1��KH��������������d���=rkIU����_�6�jt���f��t�����'���/"G�P����G��Y��2��3(�p�8l�~�4K�n��2��yT��k���lA���Q�T
j+�U'-��J�I���QPfQE���A���o4����7��9�Iz�+�������W������)
����g(@r�8a��P}q�r;PiN�vM4tae;I�4���s��&�'����xF������`_����]���<;r�#���uc�������7p��yU��Ne
����A�����x7B6�"M{;y�3*�cT�%W�g�'��u5u+%hS�~%���hR�u���E�W��c
��	/o�i��C���H|�rI�<��c|I�|�!� ��"��e"5���Ge�+����*q����+(���=�1�y�~��g�A��xJ�_x�M�};T�0DR�c$�Ibg�'=	 ����-��r����66�$����l���y��J�<d��G�xo���z_�t���-����6'P�670#��$�:~�<���tu:_Y�=(����n��ox�_hS�3Z%�Gv�G,
���G\0��x�S\����^���'n��(�$(�o.��������{x�Y_�U'���Y��>���#�GN��1#D�2mda���GB���������	8�[Cf��<o��7�$�_�zm��|���;�Q����{c-�g��4h�'m>�v��
�f���`�C'	��c�p;V�Q��#e����������Uk}F�������x����S(*\`�����5�V0i���(�AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~��1������J���g�<c���o���@Q@Q@Q@Q@Q@Q@Q@Q@s���P�o�_���J�+�������*��F�PAEP\7��"���-�!��U��eh��T�v	��p�c�S��k�����B��E@�p�eA�R�g>�����%%R�������m-���5��/��!yZ�Z�0��"7�O��s��r8��=����ozmR]Z��9��������E$��Xr+���x�E��t�J.�(��d%#��4M���;�:�O��:E��V�a�y�o�-�����~��d�8�ZI�4�OV�#Y����]���H��|��m���j�?9���b�>�9�i�8���~�f�@��D�����i���<c�;�=�����9�w�V2�T�w{�����m���(�`��(��(��(��(��(��(��(��(�^��H�#{xY.s��@D�P�p�/��`MEs�<9�-?���O���c�����.��Aw�m@x+ ���G\M���;K�a<��QnrK���6���A^�����x{H������!�I6n$mo���a����7���J]B��t�u��������b��
����	9�u����n�N���/zpm���3��#����QiW�v���14�"���l��r��(l�b�t�s���l-nt���v�I.�3�{���6����F[!�z��%5gaK����x��8���+���E�QcI��gA:��c%�nT�8%H������/m`������I)X3�Y�{NA(@���a���E/�Mi��Qi%���r������K�^��e��
�`eT���'�I������[�*$��i�h�e����2���9%�zaq�2}�����w���5So�Vx���_\�Z%��
��t�lc���`�Y�ci?|u'��8�c���>{���[�kz���%���(���H�O�������.ot��5x���I5���h�?�|5��h�'D(�m���p� �5����p �����+�#�	X�P�"0ee# �:�+3W����:���[���Qdu��!�7q�9���@5��x_�6�u�x{A�xtdb�M+�<�+���Y��9e��i��{��o��iW�5������<G�gE���K�&��r����vPs���s�9�/�&��[;��A��L_OX�/�VP�����;�#�=������O��J������4��e�y�@^�$�l�Z0~���&������������D�D���~���\����WC�,�v���kr����/,����e]�
�,
����p��s���������koq���(�z*��;W3�O�s<�G���p�����d�W�s�@9�=���\�i+8�����u?�1������_�V�~�x"pW�8����r>��W�?��F�o�h�d0q��#��'�<6
h[�OB����:l+���2������O9�a7�6�����	i'7���y

1�IbK���k��>l,�i�Z���}H��{�N���-����dgp#?.�}�����j�k����/
���I2��t����0�a��'�������
�=��5�]&�A�\H��|�';x8%� 	��w�������BJ�����=r��������yY�:d�c���V9������A*w`�"g��5�>;=k��Wm���[2<RrB0F��O�����}V+W5n��V�������q>t�(����E\�'������
|O��������t������C�w9G�8��d�M����Lk�A�}�������V0�RQ��'��������n�6SW�S�5�_�������"����5c%���$U!:�U
�1����K-<w�S�,l�#w��e�7(��)l!P��z0��8$c������~�>��G�Q\��WF�."�������4��H��N�
�pT����Mn'�<1&�o����Kwq�)b}���x��q���=Fstj-���U��,�(����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�M4V�I<�$QF��G`��I$�V��|+el���NdLdC:���p��={
�KdTa)|*�AEy���-5����U��t����]v�%x.H�*:�9���������w�eR�CxVmf��<�2I�
k�j�U�t7XJ��[��z}V���t�}B���&m�K�V5-�q�G8��3��/��*I�<A�W��e(,mr�����#`����x���O
Z����}z��O De$�h
��0����(�S���?cF?�����|a����Keq6�q�H"�����dH�������L��$��5�)6*�|�Y��`K�.O��i��t��K
�	`]���/�1����:�rrsZ�v��o�������/��w������'�9�-���9��h7����[}o�>#��.n4���0��%��?{)�#���c���d�`��g�?���}����
�sRz+����$��(�3
(��
(��
(��
(��
(��
(��
(��
��?�����
������W?y�%F��U�������(������E�K�Q��rK�Ic�:�D��q�c�>d�RFk���>M���u<$�I~��#VS$�GPEtQ|���o����XNk�_�<��^�.���)���gb�|�B��'#��p;���k�J�e���u�����0M{'�p��261����'�$��������G��5���(�P��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����/m}R�}�F��q�t�ppy���N|��>	����U����Z���X�H�g
���]�k�����R�7��H��&��,��o5W#����'��p�f��K��Z�U#�}��������Z�����Z��s�Y�r�r���(�HQEQEQEQEQEQEQEQEQEQL�h���y�H��K���UT�I��3Q����n��r��|�hY����b�;�@�<U������
S���v�W���e���z����fB��v	K.71��g8�*���o_����i��w�}�
���;Y�'���1���a��;/Su���mG����_L����F��������=��q���#����xON�f�_�u-�y<��	���q����3����q�����rn2�����waN��X�$�5���B�P�dzB9
b�F�0~l��NI
� mrIjv�r���o����M��-��X�i���b�,������Nx�m�����4���IVIY���<�Q�`�` �~� ���Xif��gi��~f<������q��g?�]������=���������_�W-u�o�t��6G
�(�7(U�9pk���W�����4��\�O<��r,��c�r���x����4&X��iYyhV��lt�
>���&m�;x�5-�3�8��4QX�}�oVQE
(��3����������rV�g�?���}����
(��(��(��(��(��(��(��(��+�������*��F�WA\����=��W��6��:
(��8o��#���t�F��q�n�����w�^���9?�������@�-��Q#d	#Eq�0��;q��"����$������n���P��\�O^L�9J���^�,?��[
;��~�of����\�'�J����P��;�5K
��Z��Q\gQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~��E�hW�\��B��t��[�S�=��
)���m;�����hZ����VGy-O��#qS�������y���x3�������e��(�Ws�j�J�$�������W��4WG<$�H��D`��FAuV������_�N�ZnJ��$����(���@��(��(��(��(��(���������o.!��Ln�g����x�(�MEy�����IZ��m��~�o���~�`�^�u5��&x�sf�'���a��J����P���]�)R��n���zz�K	5����[��w���<w�����bVY�T*��� ��zg�����5��Z���.�#�
*��YKd��q���E���g��__j7�0�i��r���6F���FA5��Z�����z}���Uc`3���O$�����������?���_��3�2���N�H�RZ����nV,I�K�0:q��*g�wR�t�n�lTBL���4���I@J���UTpNO��{t�/�>�����[�2YmG[�n�{\J�T����G�I$��t=~��/iWP]Y���<�7|�_�po���������Q*�%���&����
�����[Y��on��(W''p9$��QY7p��(��(��(��(��(��(?Y�������G%hV~��1������J���(��(��(��(��(��(��(�nV���5�I#Y��]�Z*�D)%��������;�G��oR��-��<��f�#T���V42D��Hy��\������MF��7P�$1�����,1��~^����O�5��a�y&��h�]���H�a8�3��^>U�������2��N-n-"�p���
�bI-�2I9=�q��t]+�:��Z�v��U�o3J���4��@�G$c$��$n�8 ���+{x���$q��U�8�y?�/�����?�����:������Gs�tk�#��-fheP���z��FAE��)d���O,��1D�Y��D�UP:�LXz����� xs��v��)j_�����:��E�'�r���$����9�������Xm�W����N��6PvF����:w�|���K��]s�W��f�����5[���O�.��(����������.3�=��1�R��C�1��m:+��&Z_�����"���4�e�������+��3]�p��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]���e�������+��3G�&Z_�����"���5�Q@��&Z_�����"���4�e�������+��3]��6��<M���c��R��.����vd`��1U�Gz����-_�VV��j��Y�l�o��:m_�D�8B����'���J]�.���	lN����0<���a�x���N0pT��4�yM����N�?���u�~���e�������+��3G�&Z_�����"���5�oymw������R�Nc����Gpy�������-/�}u��^���?�2����\����������2����\������-/�}u��^����(��-/�}u��^���?�2����\�����|K���[tw�~e���Kp^�Fp�0?13\���KK�{/
i�����h��'xU%�p�)�y�cB�����j�WQ����2����\������-/�}u��^�������C�������
�1b�n��*�lm����>V'Pf�������MSQ�V�``�������x��W���)����
q��/���^�N���p���w��:�T����$����2>����_���
��t��v�NBB���2��q���S���^���q�����YLjJ�#���09����H�4�3�;N���1�}��~3��8�����{��_����/�����"���/f�t��9a�WdE���NU���`0���������!���[p������h��`[������QI�&����.����9=/\���d�zf�����>H�?z7�>NX���qW?�2����\����������g3m������K��]s�W��f��L�����?�E{��k�����-/�}u��^���?�2����\����������2����\������-/�}u��^����(��-/�}u��^���?�2����\����������2����\������-/�}u��^����(��-/�}u��^���?�2����\����������2����\������-/�}u��^����(��-/�}u��^���?�2����\����������2����\������-/�}u��^����(��-/�}u��^���?�2����\����������Ka�-��6��H�v�3�7P���yw�(�����u�������m����(��(��(��(��(��(��(��(��(�#��� ���U���XW�W��r��K�*��K,+|/����1Kc��?����]���Z��'Z�E�.����yY��#sH�u������q�j����@�������R�����K�4;x�K����@RUJ`�x$����$UB*X�>�F*Ub��|8��N�{�A3#3Bg	#l�d^���>����i�Z-�����d��3n��T.q����]�'.i7��������QR@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW9�_	E�-	t�.���e�9U����da�q�>����2q|�r�7	)Gtx���S���g��.�6���,;���`�s�����O�9���>!�F��+I5�F�\mh���'s�*��#��3���d��v^�@��
�<����#8��'>���#�I�	Om�Y��d��,�i�
��
���v��s�+���V�F������wUn�?�=������o.!��Ln�g����x�+���KKK��xn���M���7�;I��K��H^1��j���
W]��������v��V<|��6��A<���B�����&�G�Ke��HC3�02�I��8>���(o�?���)���������
��A���0��S	[P
~�����q�?{�-�4�.�g����\���OB]��h;�8��A��}V�>�%���}nK�Iz#����?
xnqq���+nI�����W!����u6�v��mgo
��glP�E\�����SQX�r����'Rsw��QE$Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@���x��_v��9+B�����������rV�QEQEQEQEQEQEQEQE�����
����
���?�_�	o�\�e�o��<=W�)lw���������K\����|�a��!����� xs��v��)k����U����DkV�q����~�\�z�1������S��K�O�g��E�sQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@���x��_v��9+B�����������rV�QEQEQEQEQEQEQEQE�����m2�����K�}����kIs���X�s����i/���]����$��re���5/�_�z���l��wn��LY�:��;g��B��[��6�x���'�19*m�>=� �3]���$�'�����V�;�mW�0���}��H�z$�+m�8� dJ�K�u��u���
�i�����z�Q\(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQT��4��	Y����d:��<BD�m����#�+/oJ��_z0����}�������"�0�.@$*��>�#@����dm7E��1���c�P}zg��y�h���5��sO5���^'��~W:�+���Z�.�����0�l�l�i�Pq�Z:���FT�%x�v��*�����n���y����{��)f�J�EN��M~i\���+���*��M6����������@��8c�������@OEb��Z�Ioq�=")�r�G%�J����d{Tz��|3��=uMr��X6��y��]����.x ���J�Jm�&+�z�����>	�����2����3����@����Q���G��[�_x'W�����*��'�k ��H�<q[C	^J�:y���2=z��>(����K�z�%_���"R%R��|����� S?� ���������q��/�	�H	e$�V.���W��/���_����:��x��_v��9+B����?Z���S��k�e[;��P���0X�b}F�Y�*�PvRO�i�QY�(��(��(��(��(��(��(��+�i/���]�����_�K�g����F��?��&[/��>��?��\yWcN�%�c�q�I>e��+��H���:u���-/ ����k�G��������t�z�^�����n����'��st�9�V#���|c��-Y�Z�'%�'t��n��������R����N�S�xH��V���E��AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE^{�;W	qw.FB� RG�&����'be8�^N��+.��z=��3P���<��~{s��?��hP2M$��m�2���+�x�<>*��G,�%;�T���~����6n6���K;2�I��I�(j1�;�r�QA,�X=O�X�i�zJ����l`�N����M�7��n�����=��Y<��'';py$}8�o41,R�s��Fe���	$u=9�;�����[�N�v��q<��r���������C��J�tv$�@�2�d�?�`c��S����m�cmV$����NX�H�1�����I�
R����2��_����@�12���Q��bW����'�	�]7��l�MV�E� �2q��.}yu�^o��?����)?����~o�������3�E�1���0�_��T��	��`3�
�([�/���WO��9�����C�W�����K���q3��o4�V�������]��[�\s����U���������Q�d���=G�Y������1����=:�w������;��[D�Jg9�������|s�1����2zrA|���|ck��:m���7;QJ�s��'�O��MS�s�6"�����0����[���n�5�0���-�3���	��A�;���j���V�u�U�;�H`1���W�d�m6c�1�<��[BY���I@N?�x�����4���
V9�,��N�~����q��q�u����$�W�e-���s�L�q���������^_�&��IV^�����6�W�������R3m�
����o;j��q�=���Zl~�$���"���6bI�s��O��N�7�,��O�%���k+S������e�{�9(�����03�=��?Z��(������/^��8��rK�����cT�����o�.�<�_Q�.��#t s������d�����e~�;U����{��I��l y�����p���*	��!X�P�j�bR��9�4�T�:Zz��v��
QT� Y�|�s��{�WDs�b:��:v5�I���f0��g�t8y����B��D@n�89 �l{b���|Bf���V�0��=�	d�'�B�^2v�@�����I~�S�����������U(��mw�?��h�-&��u�}�������R�t�I���
al��!G�F}c�^^�|]�^�=���!��\H�[�(�A;7x �gV���Z4z��z��?=�i�@����Azq��,�����F6�N�xL���mv�-��5d���$�����@u�p��e���
��|e�x�xV����q ��"����U��H#�y���Hn�.u	�w\�^K�?<gc*�08�+wQ����=�:>����2m�#����� b�sH���*S�	sY��m���,&#V�:MJ�����V�[�=z��=���k��Y�a��HP��n�H�w�[�����R��%�Oym!+oo�""m^p�����I$�v����l��{1�N�v���;@99�=�F8�����t�8]7�"�t��t���]�S���z���E.$�9S�j�r�����N�y�ox���^�.d�h�Ls��p���80	��J��9�U�-�������Ky G���I�h,� �C�:W�����iWH�o=
�����u��C�����;���~a���d��qDR��W���0�~��e�M����{8����m��{�1�K;#��s��ZZ��
6��7s��Oq>c,�|���|�I�z������7�mm���oB���,�~��I�x�P�w��$;H����@��\����Ll�xBN�,��.�.<S��������0O���}������7
�~��yTGq����23�3�����Q�����2��K}��,�pJ��:}O��Y�/|;�����}�yi42/��A#��9��FFA��D��3��-�����evl��x����zz���7���Q����/-�8�Y�����a-S��K�D�^e�������|�\|����������w����������o�`�w�
�3\#�>��GJ������G.�1]��4�Tg���py�G���[���2����'�A��k�3������>�<Ksn�{*���:������h�����f.ey.��M��3��S��?Nk����\���z�������XE��m���-=QE�QEQEQEQEQEQEQYz��c��4�i[�����%�����; i,x�����^�I������h��W���_�</����5���x��2���{}o%��w-��Yhz=���eP��u�)8`D��=���z?�K����Kyu=��T�
4��������3v'��$�
�������d��o�B�~y��?x�S���@������**�q���G��W����5���g�QE���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Uy���\%���$�I��R�������y;(���K�[8G���3��\~j����������R@�*�W'��Z����S�������3,%?��������Q\���Z�Nbc��w\s����~���<C�2��iOd��M8$(��n~'��g��F�&�nW����{{�M��������K�����QA,�p�5�u���!fy�6����>��G����MSR���h�}�Q��FO�oZiu��mg
2gk������=�h��U�*�W�-?*��o�*���������Z�A-�� �abX3n���g�r=:��Oj[���l"f�dnP1�����~���G��/����������5iK�Z+���Y�1�b�#�g������7��%+��~�P�z��0�����j��K���0��[hy�	�������<��[����Y6N�-�sK��o��b����na����U���Gv9�����F0�\�Ay:`�8�C�b�Z���Y����q�H��T����>���x�����m�L����)}��F����o^+zY%9J��w�v��:(��)�������t�4 ���l���2H��	q�1"�[�Z}�� ��7���3����+����'�����5�'�	%tX/�Ub�K��,>�Wm<���(�����Q�j���=���~����|u����t3��[�J��`	��I*���94��c�y�A�v,���$���q����3�Et�gT��%����_�;^UVV�`�9+����h�	t��Ng�V��{|�(��)���#d���z*��
x�P�F��u���k<�I�(L�rN?>�M|U����Qg�_xy����S��kP���t�1~���S��R�����O_^��VJ�1��g�U���.���������\�V�:�</�������Wk���V�.�t���<i�x8o'7�+~.��{<�������*����H�?���b��;����>�Q� (l�}�z��5)����;��6�� �R@�8C�	��8�O{�o��om7�`i0E$�r3���={n�����^[��%���a}��J(�Gq���N����I{��O��D�s����_�������[�������`�mF�B�vl��d��t�������,p�}�j�����*�x��1�I��.�o=<!��SS���t'���m����������1�|���w��t�#D�5��n
~R�pN:.s�@�i�Zb�����k8�
�#�������G�
�3�W�����x?|s�q��=j�����?�6���?��O��s�U9 t�����_�Z��w��G���w����[B�F����I�,��&T��u}SS�2�n�����;���'���}rQwu��+�vB���^���n�~�3/g�Qav��x���Ld��r3��EO^���b��m���R����^�/�oC�4��r����XXl�}{N�m��.���������������4��t�:�����m4�D������<���"���G�O�R�=4������q�������P����'�����V//ZIaB� %z��Ct�#��|R��������y�Cn�%�F
�|�1������y��y��x�|�o�f��d��VM���-�k���^4h��X�P;�0�z���F�O���t�����.5�GQ��\�yh�`|�s0� ���j+)�X��9�����97����|$�%��\���D���2�r��O^���vA
��v��$P��#�5
��`����'Vs��~�vH(����Q@Q@E��R��BrV4
	�������'���(�0��(�;}B�[K�VX%]�����}�W%q��@�v�7��N1r���m�O�k������G�rh���1{�3j�/���H�����v�L��8`3��Zx;��[��&���>p2����u�[�S�3%iT{*X�T��VO����+K
1"����3yl�!� '����
���g�<c���o���X6��9\���QE�QEQEQEQEQEQE��[�CJ�X��P����a#��G<�*�����W��J�t�����y��^�VwW
o �����B��>�fI9����d��?����U���YVU�N�)���$�_q�*��P�V����]R�������e�r4Q��mm�q0�. �d����9�A����j^��m|G�i�Ay�Iokv�(W&X\��a��p3���������C�c��HfA��`�s��E<zzf�c��i�o�!��E<���I�����9���9\�;��G����
�ZR���y�Q�Q���/#�?��?�s�?����#�����C���~l���n/�,���� ��|��4����Wr���\�~'[�{�6��%�����m|�;JK��C�
GY�y>:3�%�������=������/�G���S��=s����=y��>1\x��8�����o-@��`/������8�g��.[>�UZ����{�	�����=������/�G���S��=s����=tV#9��G�O�����e����=������/�G�������?�s�?����#�����C���~l���nu]>���^���!�ng���~��VsN�sn��T��v��������r����IFsI����8�fZP�4�����-��=������/�G���S��=s����=e������������$�9%A�6s�����U��\��e�C�����2�1����A��f1���[���w���3�f�������k���.������C���~l����G�O�����e���oJ�
��n]dIo�78�;��#���V]����f���K��!�*�,zg�����<~SsV{[��3�B�jJ��������;�:�h��5����X���G��=������/�G���E�]<Z}�3Gd��W;N3����\�t�4�xF���Z���ml<�a���s�Lu��������)�G�������C��J�Y�S������w[y�����3��u�E�4V ���MQ�����#U�+���Y�#t����\��C�����;��=�����5I���x���,��8���i�qW����J�"�/{�_O�+���f=��Z��
]&�����@>���3���V�G����:�; �UR������=�H|���q��*����,s��p����j���) ��urF��0Q�r8�N��������q~��-z���8��Q~JV�����.�=������/�G����-P=��u�P��,T���VG�g���T�H�M�a��p8<���e��U�u�P�K�XfE�B������=9��KZ��i�7-�X�>�m(Q~n^�_�/��tK��H����I7�����L�����#���z������z��4������g-�����s)%x;q������]�k��J��*F���G����N��N�ye]^��U���9��G�O�����e����=������/�G����;N��S��=s����=��j��9��������J�Z���X-�;)�l��9���d��W��E�J�J������S��=s����=��j��9������������..%H���$�Q@�$��I&�#���z������z?��?�s�?����#��k:d�Oy�m-� v�)C�C�z���T�<W��H�>q]�$k��<g��t<�X��Q���/��S���9��D?��j��9����������{T���\��6_��\]��{[�����7����#pO����9�$�.�������6��j�C,j��i�#*��[t�;���8��be$�)M���i}���Y�9�������#���z������zk�:�h��5����X���G���1���C>��Em0�+�%��9#*�nH'8#=
R����.���[y_#G`��Br�a������0�bgwv^r����}o=aCN��O�����7[S��nGA��[���3�E�?Z�<C�=sL�iw*�c_���N��Um�����:t�������_����H��3h������$���z�B��d�t�m�N�X�GM���0;U�����$�ZV��w�|�G3~�p^V��������5Y��.<I�Z��$�e��X6�6�G9>����M�]�gz����V���(�����#����<+`�{K�1B>�hV*��I�������~�kj����T+#H�2�[qb��.O��wl��XLMi7Y�.�_������gf��>_(��j��#��>7�������VH��Y�9��#�������5����Q��� �*�f�H~f���,f7��	��*z������	��^n����[h'��#P�bp����2���!�q-���
�[��%�1n���0���������E���O�v�����O��;N�[��/�O��y���_
@e����_�p�2Z�����61��O� ���xc8�v�k>��$�~)H�)���>F$�2;r��A��Rk:������>Oz��3Fa�7��'� �=+���{�[�.b�8�A�bK���`���oPKc����_�Cs�K(��^UO���/�'m��/�0��+�f��|;�B�:�T��c�N�{
�$��6����Ch��*�v���?��U������Y���u�-��{g��8����F�%����p%��D$d8���+|�+�<RX|0�,�^����M��yr>���e8������#U��GY�/�z��6YtW�k�z>o�����3^]������ge����ex���p-��1�]��G=���cc:�~ k���V6��N����g��	>������:��o=������r0_�y8
��$���2E����������8,���c���3��������'�����O��a�������|�u=�7��W�w�W^'��E���?�s��B[� a�������G����5�x�����	���d
��9�s�c9����V��������������E����h�w�PZ�G��O D\���r@�k�bhCJ4���_�o�>����*����
�qq�3������QN�Y���o�x���J��	l$Y�k��]����>c��c������������C���`�9�T0'�
�C)� �f�����	���=��f&�����!0�[q���0�$kNa4�I�I~)	�8�8�|��I~J���������)q���e=�"��J�a���M�mu�P2�����R:�!������F�����1��"Y�����7�]�9����~\������"�xT�����d@F�Y�*\�O�NF*e��������S1���,���Y������������F��xF��c[���j��;[
��b��H���Y�o�S_��A�?�dkVk���w��C�q����@�����Z��m�x����>��O%)���2�'�X��+9P���������%^���l��(SF���>#��������|[���t8���r����?��n������:���c9`[x[�rH,���W���s�x�S����'��@'\�
FKc�5���
��\}�O�-Vm��$��de9R�B�OU�A�*9p���zh�?x���V�R�KK�M^`��F`�FE@��BFO$�u�Z���\;h�z��1"�MN+Eb��U���;�E{�����_6���s����2j��C������}�q	<# �q��=�zg�~�_]�����SR��>d�;p�2�\�z�q��w�QG�j����I*<�N�)��.�����tg�M����gp�[����_S],���������P��#�;{TP0���J+�U'?�����#���z������z?��?�s�?����#�AE@��#���z������z?��?�s�?����#�AEs���j��9����������{T���\��6_��]���=������/�G���S��=s����=tP?����C���~l����G�O�����e����Q@��#���z������z?��?�s�?����#�AEs���j��9����������{T���\��6_��]���=������/�G���S��=s����=tP?����C���~l����G�O�����e����Q@��#���z������z?��?�s�?����#�AEs���j��9����������{T���\��6_��]���=������/�G���S��=s����=tP?����C���~l����G�O�����e����Q@��#���z������z?��?�s�?����#�AEr�z5����7��[����0O�G��9)
�x#���V~��1������J���(��(��(��(��(��(��(��(��_��r���W��Qe]�p�9�������?��������?��#�1�s��~L��<!�x��D�E�J�{�ygX���Hgs�P��� u V�j6��f���<�7'��
��|�p�p��z/����j�R�����������=~�u�\�zl��������y1��D�Wv,����=�����������"IF�k��]o��C
��?k���:q��{��������CZ��_�b�H�vQ48���#�#u�3H�����I������
�����&�t�71
�<��L*����0�Mm���n��nnom�X�<�\�!�K�2�9'8���6��}� ��vH���.^F�!-��d��a����.8O��.]Z�M�LqY�a���T����n�t�Owg��uw1�g���#�#Q�����9ct.f�d)c����B1�
��5�~�5�Z#��#�f��%���"��{xRI�Al�G��"���Z��+_.9U���$|�A��s����G��O	x����������Q����"D8�N2x�^$*f��T!�F7��������N�7��^=
y�.��!�{J_z��h��t���/S��ems(K�
�pN�Y_�u��=�py�K�{M�����2*��Rp6��?_~���\��M�����C)
-��{�6 |������x��~��6�s:����8��NC|� �8����QS,��%E6���K�:kd�E�J�M������E�x��C���\��c��Hq��=23��8�+�i�b{G��\y7����Cl�8z���N�:<�;ZH���Y����a�1�j���|?��5��2<�7�*�-��	�@�v�����x��|�|��V�|���sR�sMF�9s�-�]n�~�Y��i��i,�]O#^��%�X�����<�s��o�f�}�m��/
�
�d
�������*�!a�Ybo��@#�~a�<����f=gL�{����k��_0n'�dd�#�5�O-��������C~Z6�]N��5����n ��E$�d����MX���S�Mk=�z���I�|��;z�:�u���k�b�W�<4�\jo(�9�T��,W9����2s��mY>HB�yY#��e����!��ud��d�"��i�iuV��Q������H;�?6x
y���p�Kckc�Mc""����R;���|
�����@o<E�u�yeUr���8;H��1�e���O	�-����V%��t��#IOS����	�[�U����m+7��~��YNY����G�i(��>�}Z��;�E�a($��I�?��:�	�!�L����_m��r��!Tm�6������2��~'�]W��L�Z*�0FO���g^1����������WW~��&�������������*+�?<>�����.f�W��o��S?'��xn��8n�u��<���p2���������������Dr�k��mz�}���Gqqs�
=���
�t�0U8'��i�����f����G�
p��*yQ�qv�V��+�_����M��X�O9��rOC�s� `�#3X��#k{:i~3����m�������.tbU����pt��S��W��v������t�uZ���+�y6�o�Dt���M&�����jwl�Z�!Kdn�9������g��um>/'Y����f_�$(Qe^rw�����Er�����K}L���vGv�*	����8�?/�K�s�Z|:F���hZ]��sw� ���d2��8+�$�H��Q�
%N��'f���!����Qr]��v�W7uO�x��y,���F�d-<�d<c�1�t=	#8����#�����Y����fm���]��!�pYW`P��w�];�N��j�P��u����;��������k��v�RE`�d������Nw���3^5LL0��U�K��z+�+�k��y;,��px���a��(��jQ���w�Kyhs:_�=~�5H����F$V�"�7���B�@���sx��> ��]G��h�e�0d!�J 9`�w.22G�h>�t�A�A)���=����}z�����Z�Z]�0�
�3
��9#�[�q�nT�S��������]4^f�7��{��J�}yo%�}�/7���j- ���}��$k�k+������2(�,��:�WI�k.�m"6��f�}���� P��3`7�w�w�76�]��m:��d1����##����>1�C��Y������oh����p@���$��4��U�QnujNi��e�����w��,��a��W�Rqk�YY��m�}���h/[{8�/��/k�#��<�]I~�<�'m�?�Z���o�j��T�4v�;#aA`ch
��x��@5���"G�YY���?�����uI��j_������������9d[ZR�����Vd�W�:�_��������.���=��se�A�
�!r	������|!�imn����+i�,�����0�q�3���X��S���n/�O5��)VH���R�$��$�"������%�����iD���8(�w�����Z��U��w�����{v�}|��ySA�8�m����V������:�����c�N����m�2�F~ifX��a��������y����tt*�=���9�������I�?����
��*�t�x)I���k������g����j_�\]}F���w�
���������:����y-4{x��#�Y# d;�G����+���������s�8�*����R�����������5?�P^�m��8)to�:��k��o'2M
�0��<� H�'� ����N|Oq"�����sFF��r@����W{E�5���H���j�_�Q��W�V9!��������"%!���1�2�������������?�b_�*�Z+'��?�y/���������V�����U����G���'d��ry�4Q\����wg�������(� ��(�+}KO����������7��#��=+�ux����k��9�{�[��������q�U��RrX�F6a�B��[��*WKT�Of&�x���<I����~��������V_5���;�c�����>�qvo�I������Y�f���;��1����f�j������E��.U���O�^�..'M!/gb������V�������tQxW��Z\ZC��q�\���K8�K��w(lFzV���T�������zO�������������=z��k��_�����QE�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(������?������Z�������m����(��(��(��(��(��(��(��(��(�C���x��:�B���"KB�3]}r^$������:���kYW���%^���q�:�:���X���]�6�dg9�����G��l�7W����hB�*Y�*���eQM�%����]�a�h��3�����2�/��1U��I[���W�o�>w+��uC�wi(��������{��r�/N�{FVt��$}��9-�����1���4X4���`c��
�<{��c�'J��������$��[�=�Y~���8$��[�
�?���}�M�:�!����	0l�"�=#p=1��<{�y��m7�����v}����s�d�������=1�#��Tp�E���:��;��X5���Y���D!��2'�����1����q������,���[�:��������Fm_�N�p��^YCq"�P���$�'���mV
�&�}���kG��_7�c���~���oJ��m���ABrJ����NLs���3G��bO��sp�����/��tv���4V��b'-?�����S���n���{�����>������&��,���N�zv��������`��1��q����9��{������QVU�8�x��*���I�xq���J���3e�$�9�q�����7B��u��)]�r��?1�=��hTs�
����P����F
��d�O���*�U�9��L��q5c�R�k��J+�������w�>�R4.�;���<*�X�I�Y�_�	v�������<RB�<��Q����P�Uj�/�9.���$q��*+��U��C��W�/�>�����?�r�����j��[pA���w#�s\���>0�z|�����
Ow������00�)f]���[p%s�T�u��\��^z5����I�m�m���n��AvO��'������������\�R�'r�����*�p8��G��4����\&���Z���%�6aU��o�@�I �~o�nR������
�Z���y����`���*,�@v���8�
ZJ��jsy-��T������s��x��e���]�h���� _�{���?/�;�!�uV_|	kh���Oy"�3�w w�<�*�t�������ooEH8�P��p�J��*|4�,z%�jG*�P��M3@���I����q�D��p�=Y�X��rj�W+m����(�EPY����/���N������cn>Q�x'8�{��Q������.5'�[I���QEIEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPET��P�������'8}��L}gLDg:��
2v�	����}��jky/��Eb���eFat\���d��U_�M����w�|/�V�M�0�?
�/��(�e|Sw0�-�+��$����)�;�MK��������=������o��t�W2���pV;]
H�'�O�n1�����l��v�n y����^X�#O�>�}���o����Y�Q\���Y�A;O�������(�'��IX��������){5�H>�Q�R��~�ML�h���4�k����5���_P��n_+t s�;����1]X�r��g>�4�a���{lS��^��%�����o�-?����V���u�1_�Y�A���jg�"�/����W��/�0�e����~q����y��������k�U���!���E�������G�%:/���'�
������>�����Q�����>�����R���[�?s�2��%:/���'�
�c���9�%�H��y
��q�����7����������Z���Vy7��D13���������
R�S\��ItWO���������m����+�_���YYI�kk�p���H�	={��;���A���1�����
(���(��(��(��(��(��(��(��+��'��������;Z�k��u�V�&��I��6�
3�i-q�?�EX�BIofa���	���E����]\w��������|!k�oD�8i��`��� ���r����S^_��.SO���F�/��QEv��W���I6��l?�|u�QZR���g��&���~8i�
�4]'H�n��,���7�|��*���f��8�F��>1�����o���q%�O��6m�_p� ���
ps��\zV���XZ��������������;��x���w�4t�L8��]d�o�)�T� dg����a���d��T+>��T�5KL���+����M����d���������o�����?�M��^E���r�r��U�*�X��X���w�Y_x����v��}9� 2�>�UU��$��I%��t�������.����b��&���GQ�!}����T
�YSi���g����O�X�&��m��u��x�q�,�eY�[s.��v��`p@>���v:.�o����mgn�"�:��'$��$���t���������M�����M��ij[�O4�H[�$3��p��L|�j��*/k�c�?��;�w����hXo����G@G���� W��C�8�
*?���r�<�>�n�c�N���w&��P0A���y?��������������x,$_�>���H'�6�L|��''5�QY}j���zy�������>�����M�4�C�`������8�����5��Eg:������`��*(��(��(��(��(��(��(��(��(��(��(��(��(�����u���Y�����T��)����!?�U(I��g��iM/�6(�o�m7�x]����S�q>~���O�K����������3�`�*�gOES���K��wp��J��?�b*�f�N����8�E���(�PQES����!i���i����q���\���ki�������5O���?���5	=���4c�M/�6(�~�Q8T�����{|��|W=�f���n!�=q�8���O���0������GMEs+�x�q�C����;VC�=��������%c[Zs�(*{t<��)�'���_^��a'�n�����OXD��'Y�/�2Gb;d�^2Ek��#���1�U������g��/���R�������d��!�p.��(86��:�����V�Y���� ��d�?*9#�C��w�R6����{�k]�h�����8\�3P�ki�������5��4�l�\H8��z��������E�_������4Z�v���b�[��|K��!��P����?0����J����0�wF��� ��4*�
%���.���M[����w����v7yh?\Qzk�\d��W�o�f�&�o���������,�O�nn_�� q�����4?��c����%_��e�I�`�����b�Fi�m�g�-?�����IE��U��*��Y~�2��n[u��P�������C�x������0��0"�j)�_%��S�r���o��K��+�����j�6	KI{sq3d�q�����QK�O�ga����o�f�~�$��JUW�9�=�� {T���h�����_�kb�^�}�X,2��k�E?��7��������QEKm�tF���QE"��(��(��(��(��(��(��g�<c���o���Y���x��_v��9+B�
(��
(��
(��
(��
(��
(��
(��
(��
���_�4���{���W�W��IZ��_.+{���.��o�����#�2iag~�qo:���p����n�#<��OI��5��{�����Y�fu���}PQEsz����g��/�2)/ $"�v�g���4�	I�_J�y�;%��]x�8��kT�5Q�&
���N ��=����,������\s�d+B	��#��z���/4s,zkJr���Q\��#V
a<����J�'c�9pz���#:������L�H�� �G�����!�j��h��H�h�c�>,3d�6�j��NO#:�����/����[��m\�=>\s�{��=��d]����������og�-?y��^��/c���>�)�P�M�����E���`�����#�>�{/47�KxJ������Mq�-�M��V2�q�u�*��/���{c�����/t�%��������,��I�yU�6rq���9�(�����/����:o��O��6_T��vG��WS�V�A��U���n��2H���q��"�G�!����K4�/������{��<7���2����'��`g�$���0Z��sc^�+�����T�b�;�iY����}�1��ZU�k��^�ZY��B7��9l�����V����`�/�e�h0���1��4���Dtk�U]*����{okk���TVE��t�0sr&|�<��O��r��G�2�p�����0�IS��i,f-�5��6��~_�Q�l�|��J�r��$�=*?�M����w�|/�O�O�0��9��Q\�x��Q~�gs�d��F �H�0zw�����F��-�����1���d��~�}�����7������`�^ ��}�E���D���z��q�r)WU�%�i-����8>Ct�+���d���>�M�����t�W2�~-deu�0Yr=�_��x���v�����){?4?��jr+~m%�����G�>�:J��X���!A��\8:��sr����8�I�����b�_���f���ae�\]�������?��{�?�Jt_����O��_	�6�-������``�utm1�m��b��z?v����k�����W���?�������������*��N��@�O����G�N��@�O����K�~c�7�~��e?�Jt_����O��0�a����9��1����mLb����)��@v�>�{��X�[9{{X"r0Z8��zqN��0��=��O�����r4�&��
��Rs��N���R��v��o�"�J)s����#�o���9�����q
<�>p��q����������2����]t�S���P,$�����G7���2����]1��X��]:�o�q��	|���Z����/�@�r���������Ct�]�"$Ppm�	<u- �dR�d��.'��s=1��L��9����K������4����L(<#�D�^)&9��$ �o���t������
�EC����ZV��
DX�Q*(���=:�*M�e�R���]�!��du)������:~�/���G�>�:J��X���!]5������G�������_����� �da�VA�������{������(����?���cV���o��7�{���k���������mK�0Y�l�s�����Vo�Q�a��5����h�����_�j���Zl�����Fc�:���������T���4��v�_$C��������n��.~������6IEYQ@��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��g�<c���o���Y���x��_v��9+B�
(��
(��
(��
(��
(��
(��
(��
+��8!}SY�(�P���kmvTa����4~������|����h3x�T�m>��xR{����
��A��A�!VI$������Y\������������u
������qe��G��� !����W+��^��������X���4�h��P19O�Fwg�kA�Q6pfp����U���'��T�N�����x�Cv]@��>��T���Dd�d����
B3�H��O'������G��o
jW��������t��eF�A�#��c�S���s��Y�E\�F2j��a*��b&��i��Y�o����X�O����s�60{rNz��kSD�!�-��F�e�����p3���T���T��3\���_��G�$:��	���������U$���X*T��5o���:
+����T��3\���_��G�$:��	����������:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	����������$�!�wG"�a�d�\�~
��<��8;���Gn����v��S���s��Y�E�����&k������*�9GfaW
F�N�ob����Xm1Z�H0|�>f��3��1S������cl��*�
������!�?�L�?����$Q�	��Bf�����"�)=�Q�J*��_#j;Khfy���%|�u@�rrjFEb���*H�q�������!�?�L�?����$Q�	��Bf�����"���)h��Q\��$:��	��������?�!�?�L�?����$P3�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	���������(��S���s��Y�E�����&k������(�����HuO�5���e���C������/�H������!�?�L�?����$Q�	��Bf�����"�:
+����T��3\���_��G�$:��	������������?������Z���7�ko��l�k�|�<����$�������Q@Q@Q@Q@Q@Q@Q@Q@��t��HuIt�G�!M�]�*eE��|d������4-P�w�U������n��F$��#�f$�;��hQ@s���P�o�_���J�+�������*��F�PAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~��1������J���g�<c���o���@Q@Q@Q@Q@Q@Q@Q@Q@s���P�o�_���J�+�������*��F�PAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~��1������J���g�<c���o���@Q@Q@Q@Q@Q@Q@Q@Q@s���P�o�_���J�+�������*��F�PAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~��1������J���g�<c���o���@Q@Q@Q@Q@Q@Q@Q@Q@s���P�o�_���J�+�������*��F�PAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~��1������J���g�<c���o���@Q@Q@Q@Q@Q@Q@Q@Q@s���P�o�_���J�+�������*��F�PAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP~��1������J���g�<c���o���@Q@Q@Q@Q@Q@Q@Q@a���������io=���MquN�bh�`Et9&`wn�i9���}[I���m5-6�[�h�����G!���WC�1&�cw ������3V�|��ZEs�n��z���8�g��C�����m+SI�a��k.��h,����� �TP��3��+��&�����/�K-J�?����yn�����6�^���`��p�g�\X�1[]hqMmh�]?�"���p���#������h����,�����C����S���#��`��.���1���}��3��?�%�������hM�=���=ef�Z�Ew<���H7��E�����������>���p��g�X��L��n�;�.���2G�#W�i� �����g�KC������~���o������+4����+���o2A�7HB.�/'$8<
�u5�����	h��o�5@O�_8k����/�C��i�Z���r�o�"yq����G��@��Q���D�����hm}-��7�!�$��w������z
�>�������������j�5������!��4����{�e����<���U�#�� `p(��+�g�'��l��Ck�n��)����&�������pv��V�3��?�%�������}?E|����~$���[�V��&O2E��
$���:�g��O$��~�~$�����������b�2F��D��c�~Du����Bh��+��g�KC�������g�^_G-���+im'�"�D�F����Y���'�h��+�
�{�%����]hs���1*y�6$x]#l���[=F29����|a�A-��������+�
G�{�%������������/�!�W
���:.O?.:F��=����Io��9�kK��<�<.��������@G�_0�8����Z�����V���=����I���C�kkF�������+�����'�������4/����>!�/5�������������e�c��`�k?����������j�>���p��{�#�z��.�5���ye���o�������IwM���K������qc�R�C�H�dj���1��0x4�}��3��?�%�������hC�=��<={f�Z_Kw�M�HvF�0u���d�g�����>���`��q����?��7��
w�{�%��u;�:�C����Ym��$O.6rUv��0
�>����������7����[�%�o2C�4I���/#%�8�������	h��o�5@O�_8k?���//����C�������s"B�#`G�N���s��4i����-�uh�n�9f��X�_�����9l��_�r9�����>�������������j�5��������cu��
�[D��H��!D��#�'Vl�9����>���N���Ioc�Esu��5���j�d��H&��d������������3��?�%�������}?E|����~$���b���������2E�d3J��#��GE����@(��g�Y�I-���<-is��#bG��6���]���c#�(��+��g�KC�������g�\X�1[]hqMmh�]?�"���p���#�������}����=����:e��u��X�w���?��,�Lx9�
g��8����Z�����P��W�~�~$YY�����]�,�y�
��Bwyy8)!��n���B���Ic�2�Q���,`��[�|���\]�<�F�>���`��q����?��7��	�g�?�����C[����Y����!�������7q����W���>0��������U����~$���y�]hv�3��-�>d����J���@G�_8C�=��<={f�Z_Kw�M�HvF�0u���d�g��������|a�A-��������+�
w�{�%��u;�:�C����Ym��$O.6rUv��0
4������:�W7Z�\�,V��H�T�h��L/������M}E|�����	h��o�5Z����K��������m-�d�$\���H���6z���M}E|��~�~$�����������b�2F��D��c�~Du����Bk?����������j�>���p�g�^_G-���+im'�"�D�F����Y���'�h��g�Y�I-���<-is��#bG��6���]���c#�(��+��g�KC�������g�\X�1[]hqMmh�]?�"���p���#�������}����=����Io��9�kK��<�<.��������Y���>0��������T����������Viu���Ws�,�d�|n��]�^N
Hpx��h��g�X��L��n�;�.���2G�#W�i� �������?��|a�A-������Bo������+4����+���o2A�7HB.�/'$8<
�u4�}����=����:e��u��X�w���?��,�Lx9�
g��8����Z�����P��W���~$O^��������,Sy���Lwyy/��������g�KC������~���]���I}�N�N����g��[x|�����]�<�g�'��l��Ck�n��)����&�������pv��P��W���>0��������U����~$���[�V��&O2E��
$���:�g��O$���W�w���K{Z+��Y�m+W�$o*A4N[&?��G\�~lt&����|a�A-��������+�
g�{�%��r��hpB���2y�.dHQ$l����=Nry&��{�%����]hs���1*y�6$x]#l���[=F29�>���`��q����?��7��
G�{�%������������/�!�W
���:.O?.:@G�_8h����,�����C����S���#��`��.���1�������	h��o�5@O�_8j?���.,t����8���h����|���l��o��ry�q�
4/����>!�/5�������������e�c��`�h��+��g�KC��������{�#�z��.�5���ye���o�������IwM}E|��~�~$���y��hw0]�-�>d��F�.�@#�Y���>0��������T����?������ou����pK�d�dh�]�^FK�p8;y�+?����������j�>����?������Z���|Ca�6?����dZ����$GH<��������q�8�z��(��(��(��(��(��(��(��(��{_������:�4�2���Yv �dd��YXdOQEG�5�R�2@���)
�BG�;I8$zY�!���tI� X����IA)
����$j�����z�J�����$�i�O<<a�(���"�%t\���e\6Hk}���k����z��������;�X�F�d���"$���m������*��W'�i[Eos&������n�qfx�� P���nDR�.C|��ec��P����;#R^]�������U��(e��U�
��H�O�s�u?[�u��,]oe�����$i��Io1������l7��6��5������j��QGh�{��Opy��s���j����%�MY���xK�&���#�A<�H"�3��F
����K�kZM��z�"��B����72�U�mV�����W�4h��M���4��uH-^��t|��P�d%��PX����%�|Gu��=6+;K�!^��Gp�TNQ��C�]����m)�X����v��md����i�gv�][N�#E(d��?���2�Kp����~n��8�x��9s��mn�Y����2���;�&��V��d�^U��9%u4[�JMSQ�um.��!�Z@��������UQ���T�G��S��j2.�����_O���M��_1\6�����t\H�w[������Y.u+�=#��e�Y�����<���DD6�K��q��+���q���K���irIv���j���i���t�a���;�����/W���[���S��:�5�t��$�lR]������"����v���6</�M�Y\�,��i��+�%+��F���f������tnV��/�l�M��s@�l�/m����b�G�6�!�G��US����@����^H�n.�'�K���N�H�3�i"b��  G���N��7�jq�B��o�	�x\`��8:w��\��~%�[�����"��!�]���h�������<~Y/�ER�6dm]]j7�)��-���k��!�]#�#o�H=rs��^o��'�?���sN��3O��I��������s1��'a�G��9;="��S���i2[H�o�o`��
&I���(>fg����)��(b0�i7�j:5�����s�[�,��gt,�	C�A8�:t_�:��N�5�ux��(%!VuV��#��X�r8C�/Q��m�[�#�p�H��Ef�$)$���8�5�����I����xx�4Q��E�J��;�c.��l�������Y�K������X��kx�L�p'�N,�{�$@<��[�j�#q+���:���_�<2��t���i���
����dxC������
�
��F�6�em$S�Z$�)o�T����|�r�YV1�_�E�����x�k�n��/x^K�d�=&"�l���>t�&�T�d_����E���������-�����<1lr8���d��
�p1�p�?7�����[�V��{����(���X�,�DQ�H%)�'x�v��qX���t/���������
la���"������YA��}{P�4���+I��f�����x�������\�H.A?.�P	4�V����������B�[�-�I��G�+�������:�����Kp��i�m�	W��v-��V��9�8��J��
CX�7M60�V�t�n~��edFV^������9>^��^��|C�i�v_dk+Ki'��<�����hU��V=au��fh4��,�+!=������s�v(�P~��(�<�-������o�j6wWww�p�&+���Gi[q��EdU��`�]��T���^�S�����ib��Xa�=�,�H�*��������N�n����������[G�[�^�h��������}����
����!#�%7<?�^_E}��Y,���][Fc��
��T�ck3FF���n������|��o���8.�+[���9g�*��UTq'���PUT����(��W�xn-ZI<=c��R=����4S�I		���$t��j3u����$���������1���1U'����szm���+���-/��m�����8Ry6���+�(cnX�,:K�n���k)��l�	�L9(�������P���7�����T�4���J��S�P���n�������k�Ib�YP�0[�+����Ew=��Y���'}Z�&5���n>D�l�r�XEi��B����y6��X��ZIg=��r�m&wB���9����AU�C�M���^@��W���RgUi\>H���#�?2�4�/���e�!�
A��k��9T������l���h�g����'�,����7El��"S��� g�2@�qv>>����K
cC��M@�&��.�19��K���x�1�|����j>'��4���TV��fo�)����-����X�<WA@~"�u-6].���{��n�u+D�DI���T�1�'��9X��i����H�t��2Q'�����x��g
�NW'�Q��a��{x��X��m�Y%�2��Uea��Z�U�Vbp�����V:���:���<�%�f�1[���.��H����KK�Uv�P��o���E���i�T�������VR�b��������&�OU�+��v������]�������(a��~���E>aRD�vg��p��o�kZ�pO-��m�\O�&� (��.���a����z��+������a������dn$�P����/���(�e�K)������%q�)�-����g����mh&�����b���$M�6)b7�J�7\����jo<�F�������lciU��$l�m�#0��U�pX������]��-$����u��6�f��`�gPv� ���wn�M2����K�"{	"�,��$r�rc*���uuBA�4+���S5��{g/��?����E�g�R��j:?�s2p1���v�������w���~ ��GQf�N����-�K�}�\?�d]�^N�w0������+�%��� �1E}d�`�]��������3|��#��������������h�������<�lBZH���$2(�*�ps��(�o��R�O�������RKE�;]C���`�������cq-��s�e=����9B��G%����������,��^%��q��
:��E�D�Le$U���}�*�q�#j�xb�Q��M��o=��]�����A;x8@��A����
����s^�K��nmm.ln����7[��\����VF���Fbu��z���kI��G�{{p��i2L�&�A�3>�����M�	C���Z����t�R�cY�l���c(g@��q��h��6��My�]^42J	HU�U�p�#V.�����h@&[x��H�� <hQY��
I g�N=Mg��k�}i4�'�0�~c�u�.�X���$�����R�6�q�m6h��6i6��^	
��?���#VrP� v���z���wX�/��u��}@�4��w��Z��o2<!�y��^_�ze����������G�]���V����*��dppq�y���5��g^�-���v�
���2O��q<,�`G$r|�;X&���(�����6�]�\�������-�CG��L�5?#aY�7.����ki5��>�e[�n��1��&e��L����n82H<����+��w�����S[y�����`�|~Y�# c��@7X(�z���Qu}oqd���Vz{��{�2��S�AO-6yra
�Im�Q�gh���&�
������qdo�O�h�%��7fY	9S��T������?�_M�����u
?�����i�dh��Z����S)n����P���9~��McgEn-��m�Y&��f\��aQ�:��~h����}zm^���4�V'MGLB�31p�c��o@����*���I�G�����[_����h�[��K��a"M�I
��V��;�����]k���R��m��{{Ko*X�g����,2�,�P���:
���:����z��ln��3gp�>LJw$�P�d?0|����WQ\��s�+-Q����d�J������"�&@�'�����h��u85[v��;�Er�]ZKn��<,���z�}
\�?>�7�t��A4rj[�$�mL�������vH
?�������C��j����-��]�L��p�9s�/3q����jSj�$7��a��A$@��U�VT��EP������O'{����u����$���w����l��L�������(>J�<=5�������/ V�?-��;��k�a��H��tjW����X������9o�D���=��>��7�q���U�#9	��6��/�W�������
K�v��-�}�F}����0���	�������w��i7�j:5�����s�[�,��gt,�	C�A8�:t_�:��N�5�ux��(%!VuV��#��X�r8C�/QcI��m�]R���6��3�IJ��9<��~��V{�].�}2�;���tV�?�%?����q���$@m�����px����qF�M�����Y���8E&F�O�������~�Q�=����E����c3iL$D8$�ol�p��y���
������-�����	����@A����H��Y����	�3��F����jQ0	�$���������|�l%��9��+��h�I`��a�YXs'���`���s�a����-��=��,�q�1V�����cR&c�nR���]���+Z����4�7N�����g�U�
2nM��*�e�Y�|�"��Wr�j�������O{n�}�b�/�W����S�$H�fq�-�7	,��JOZh��tv�=����6icm�
��R�bG�C���Y�J���8u�b:���i���%�-c��r��*��>Y|��A+�3�#wI@����I��c��h^��^$7Kjs�'��2�P!����?����I�j:n�-���$/��H���Vw���9��J�(��{��M�	U����M>+wX.�h�iY��ua
��
?���v���/�n����'��,�,rG)�&2����WT$�9B�=�����2.�h�N�F�5��)�$T��``����%�8���?�k��P���Y��GA�����4I�	�&hdX����e�R9`�����xWN�5KkKy����V�VuetV�����?.[|��+����W���=�p]�V�71�r�U�2���O1A
���slPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\��x���#����� �I5������:u�T���8�/�Q@���(��uK�K����kl�(\
��I�y�q������/I�^���4j��d}6IK����\)��`�� �$��X��vq���Ot3�H!1#rq�,�q��>�t�P\��>8��:��G+"�J�*uW�Y0����7QEG�m�[�#�p�H��Ef�$)$���8�5_U�iwG��5
����4[�)�GL�7(�~�I�i�5=)#m�5��S��8,���(n�#p�����(/_:�im&�m
�8c�&A"��>9`	%A�#���$w�����Oj3�84�"v��g`9���N:��V��\�z��Iv4�����{w��7,��P*���J�n]�(�����|Uh.o���b��_�H��4���Y#@���k�1R������
"�Q�	in���[E6�Y�����������hut����9�Z���!���q��im����Y^b����
b�kmc�'AE���_^�z�����Z��>���	E2[1���q"a��N�����:�R�
����z��!1�BWr)$����8$��y�(��9{mT�[��5K�ML]���&����qh��c�(B��Dr����6��"�"�H�We�]�H�'���O#F�2�
��0001��E��Z&�i���
B�kA?�`��2��J8b�aF;�|��C.�;|��Q@~�����D����B�FI7�� ���wg����o�4I����yx�,Ryo$A����]���\���R��������i���4��'������L�"��JX	�fV`e@6�^��(�W��X�n��Sv�mKi�2�%X|��J�s�0%Q�����k�_����,��+��o%�����0VD#ga�a�����6\��(����2�S�4��K����\-������1�deb�	T�'�BT�r�Q@����Z^�	{���
��|��-��e��F����]���v��������R�5��_]��,��'���m��6��5eD+n_��;w|�4]2�L�5�K����[����9��28gf`��)#�rgsnQ@rz������J���
�d1�F�GV�I"p���>�I'�Q�u�P�,5=;��t������x����f��(d�n���brr��(��<��z'��Z��G�o����Amg����b�(�~�w���x.�����[K8���{�9�p��$�B*�8��5b�+��=�Q����}J��[�f���o������5o�_�$)����J(8#hm����wD
��3�>������
������w���}��"�H�Cv;\������.Q@����<Ufu]wR����S$�=��r����1
�!#��)%�������5=KKh4}jM�xe�[x����0A���2?��/�1����[��#m�(�4���;�m�vCG���l��Uk���
��]�S�7���H�}�:�y�y~L�\yo��gqVln?)�(�oG��l5�e��:|�E�b�/����e���I6�Q(m�)��/�������Q�c���K�{����h�n�)�	;��C�U����2��.���\�����vt���u��{�2��G����$r�B��m�(�/T��k�la���o�4�Il��� ��
�29VO�1,7��~��������W��<��]����s4�U3�b��H�,HWPv�j�QEp��x��Z�L�b��H�o�7�Z�E����9WIF�2!E���rq�t����D�=D������'���]�H����2�����o�u(���M��A6�/���G�iP��~�������N��9�yX�@���@��)�1�C�X��M��[��R�0�(Q����=�U�}q�M�d���Yb��y"�TF���uV���w/��P�������;���r�Rm@�ng��6�j''a�'e�m�N#?9�����Q@� ]G����)�#��e����c�x��Y�GylAeU��;[�����.���,u�;���y�������2�����Q��@X�{�(�_��%�.4���-.R(`�4+t��_�eV�y�$��v��QEr~���Y2�c�����g�V�~���Y<�����
�P��w�
�������U�����k}yk4V��Y\��|��E��|��F��l����{[�{����R���"[jw�j�J�����T�����9n��+����������}��]����c�����D	�6Y>�w�_��)b��Q@~�����q��\�������-�
�&��L�F;aYFF6��PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP��
#38Noname
teg@redhat.com
In reply to: Ken Hirsch (#25)
Re: Re: New Linux xfs/reiser file systems

"Ken Hirsch" <kenhirsch@myself.com> writes:

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

I think I could do that... any useful benchmarks to run?

--
Trond Eivind Glomsr�d
Red Hat, Inc.

#39Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Joe Conway (#37)
Re: Re: New Linux xfs/reiser file systems

There have been multiple reports of poor PostgreSQL performance on
Reiser and xfs. I don't have numbers, though. Frankly, I think we need
xfs and reiser experts involved to figure out our options here.

I've done some testing to see how Reiserfs performs
vs ext2, and also various for various values of wal_sync_method while on a
reiserfs partition. The attached graph shows the results. The y axis is
transactions per second and the x axis is the transaction number. It was
clear that, at least for my specific app, ext2 was significantly faster.

The hardware I tested on has an Athalon 1 Ghz cpu and 512 MB ram. The
harddrive is a 2 year old IDE drive. I'm running Red Hat 7 with all the
latest updates, and a freshly compiled 2.4.2 kernel with the latest Reiserfs
patch, and of course PostgreSQL 7.1. The transactions were run in a loop,
700 times per test, to insert sample data into 4 tables. I used a PHP script
running on the same machine to do the inserts.

I'd be happy to provide more detail or try a different variation if anyone
is interested.

This is hugely helpful.

Yikes, look at those lines. It shows a few things.

First, under Reiser, nosync, fsync, and fdatasync are pretty much the
same. The big surprise here is that fsync doesn't seem to have any
effect.

Second surprise is that open fsync, which synces on every write rather
than on end of transaction, was slower. I believe this should be slower
if multiple WAL writes are being made in one transaction. fdatasync
would sync just at end of transaction, while each WAL write would be
synced by open fsync.

And the largest surpise is that ext2 is faster, but not because of
fsync, and almost double so. Keep in mind that WAL writes are no the
only write happening. Though in 7.1 we don't flush the data blocks to
disk, we do write to disk as the buffer cache fill up with dirty
buffers.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#40Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Stephen C. Tweedie (#36)
Re: New Linux xfs/reiser file systems

Hi,

On Fri, May 04, 2001 at 01:49:54PM -0400, Bruce Momjian wrote:

Performance doing what? XFS has known performance problems doing
unlinks and truncates, but not synchronous IO. The user should be
using fdatasync() for databases, btw, not fsync().

This is hugely helpful. In PostgreSQL 7.1, we do use fdatasync() by
default it is available on a platform.

Good --- fdatasync is defined in SingleUnix, so it's probably safe to
probe for it and use it by default if it is there.

The 2.2 Linux kernel does not have fdatasync implemented, but glibc
will fall back to fsync if that's all that the kernel supports. 2.4
implements both with the required semantics.

OK, that is something we found too, that fdatasync() was there on some
platforms, but was really just an fsync(). I believe some HPUX
platforms had that.

OK, so they need a 2.4 kernel to properly test performance of Reiser/xfs
with fdatasync().

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#41Ken Hirsch
kahirsch@bellsouth.net
In reply to: Bruce Momjian (#31)
Re: Re: New Linux xfs/reiser file systems

Joe Conway <joe@conway-family.com> wrote:

I've done some testing to see how Reiserfs performs
vs ext2, and also various for various values of wal_sync_method while on a
reiserfs partition. The attached graph shows the results. The y axis is
transactions per second and the x axis is the transaction number. It was
clear that, at least for my specific app, ext2 was significantly faster.

This is great, thanks a lot! Among other things it tells us, it appears
that fsync() is not the problem on Reiserfs. I don't know the details of
Reiserfs, but I think a lot of work has gone into optimizing it for very
small files, so you can use the file system as a simple database for
strings, a la Windows registry. I don't remember hearing about optimizing
for large files and large block reads and writes.

XFS, on the other hand, is used for very large files on SGI systems.

I think the XFS and Reiserfs folks will be happy to look at the performance
problem, but it would be very helpful for them to have a prepackaged
benchmark (or two or three) to use. We should set up an FTP area to share
them. Joe, can you contribute yours? Does anybody else have anything?

Already, Trond Eivind Glomsr�d teg@redhat.com has volunteered to test on
XFS. The easier we make it, the more help we'll get.

Ken Hirsch

#42Joe Conway
joe@conway-family.com
In reply to: Bruce Momjian (#31)
Re: Re: New Linux xfs/reiser file systems

I think the XFS and Reiserfs folks will be happy to look at the

performance

problem, but it would be very helpful for them to have a prepackaged
benchmark (or two or three) to use. We should set up an FTP area to

share

them. Joe, can you contribute yours? Does anybody else have anything?

I don't mind contributing the script and schema that I used, but one thing I
failed to mention in my first post is that the first thing the script does
is open connections to 256 databases (all on this same machine), and the
transactions are relatively evenly dispersed among the 256 connections. The
test was originally written to try out an idea to allow scalability by
partitioning the data into seperate databases (which could eventually each
live on its own server). If you are interested I can modify the test to use
only one database and rerun the same tests this weekend.

Joe

#43Lincoln Yeoh
lyeoh@pop.jaring.my
In reply to: Thomas Swan (#21)
Re: New Linux xfs/reiser file systems

At 02:09 AM 5/4/01 -0500, Thomas Swan wrote:

I think it's worth noting that Oracle has been petitioning the
kernel developers for better raw device support: in other words,
the ability to write directly to the hard disk and bypassing the
filesystem all together.

But there could be other reasons why Oracle would want to do raw stuff.

1) They have more things to sell - management modules/software. More
training courses. Certified blahblahblah. More features in brochure.
2) It just helps make things more proprietary. Think lock in.

All that for maybe 10% performance increase?

I think it's more advantageous for Postgresql to keep the filesystem layer
of abstraction, than to do away with it, and later reinvent certain parts
of it along with new bugs.

What would be useful is if one can specify where the tables, indexes, WAL
and other files go. That feature would probably help improve performance
far more.

For example: you could then stick the WAL on a battery backed up RAM disk.
How much total space does a WAL log need?

A battery backed RAM disk might even be cheaper than Brand X RDBMS
Proprietary Feature #5.

Cheerio,
Link.

#44mlw
markw@mohawksoft.com
In reply to: Bruce Momjian (#16)
Re: New Linux xfs/reiser file systems

Lincoln Yeoh wrote:

At 02:09 AM 5/4/01 -0500, Thomas Swan wrote:

I think it's worth noting that Oracle has been petitioning the
kernel developers for better raw device support: in other words,
the ability to write directly to the hard disk and bypassing the
filesystem all together.

But there could be other reasons why Oracle would want to do raw stuff.

1) They have more things to sell - management modules/software. More
training courses. Certified blahblahblah. More features in brochure.
2) It just helps make things more proprietary. Think lock in.

All that for maybe 10% performance increase?

I think it's more advantageous for Postgresql to keep the filesystem layer
of abstraction, than to do away with it, and later reinvent certain parts
of it along with new bugs.

I just did a test of putting pg_xlog on a FAT file system, and my first rough
tests (pgbench) show an approximate 20% performance increase over ext2 with
fsync enabled.

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

#45thomas graichen
list-pgsql.hackers@spoiled.org
In reply to: Alfred Perlstein (#4)
Re: New Linux xfs/reiser file systems

Bruce Momjian <pgman@candle.pha.pa.us> wrote:

Yes, this double-writing is a problem. Suppose you have your WAL on a
separate drive. You can fsync() WAL with zero head movement. With a
log based file system, you need two head movements, so you have gone
from zero movements to two.

It may be worse depending on how the filesystem actually does
journalling. I wonder if an fsync() may cause ALL pending
meta-data to be updated (even metadata not related to the
postgresql files).

Do you know if reiser or xfs have this problem?

I don't know, but the Linux user reported xfs was really slow.

i think this should be tested in more detail: i once tried this
lightly (running pgbench against postgresql 7.1beta4) with
different filesystems: ext2, reiserfs and XFS and reproducable
i got about 15% better results running on XFS ... ok - it's
not a very big test, but i think it might be worth to really
do an a/b test before seing it as a fact that postgresql is
slow on XFS (and maybe reiserfs too ... but reiserfs has had
performance problems in certain situations anyway)

XFS is a journaling fs, but it does all it's work in a very
clever way (delayed allocation etc.) - so usually you should
under normal conditions get decent performance out of it -
otherwise it might be worth sending a mail to the XFS
mailinglist (resierfs maybe dito)

t

--
thomas graichen <tgr@spoiled.org> ... perfection is reached, not
when there is no longer anything to add, but when there is no
longer anything to take away. --- antoine de saint-exupery

#46Lincoln Yeoh
lyeoh@pop.jaring.my
In reply to: mlw (#44)
Re: New Linux xfs/reiser file systems

At 01:16 PM 5/5/01 -0400, mlw wrote:

Lincoln Yeoh wrote:

All that for maybe 10% performance increase?

I think it's more advantageous for Postgresql to keep the filesystem layer
of abstraction, than to do away with it, and later reinvent certain parts
of it along with new bugs.

I just did a test of putting pg_xlog on a FAT file system, and my first rough
tests (pgbench) show an approximate 20% performance increase over ext2 with
fsync enabled.

OK. I slouch corrected :). It's more than 10%.

However in the same message I did also say:

What would be useful is if one can specify where the tables, indexes, WAL
and other files go. That feature would probably help improve performance
far more.

For example: you could then stick the WAL on a battery backed up RAM disk.
How much total space does a WAL log need?

A battery backed RAM disk might even be cheaper than Brand X RDBMS
Proprietary Feature #5.

And your experiments do help show that it is useful to be able to specify
where things go, that putting just the WAL somewhere else makes things 20%
faster. So you don't have to put everything on a pgfs. Just the WAL on some
other FS (even FAT32, ick ;) ).

---
OK we can do that with symlinks, but is there a PGSQL Recommended or
Standard way to do it, so as to reduce administrative errors, and at least
help improve consistency with multiadmin pgsql installations?

The WAL and DBs are in separate directories, so this makes things easy. But
the object names are now all numbers so that makes things a bit harder -
and what to do with temp tables?

Would it be good to have tables in one directory and indexes in another? Or
most people optimize on a specific table/index basis? Where does PGSQL do
the on-disk sorts?

How about naming the DB objects <object ID>.<object name>?
e.g

121575.testtable
125575.testtableindex

(or the other way round - name.OID - harder for DB, easier for admin?)

They'll still be unique, but now they're admin readable. Slower? e.g. at
that code point, pgsql no longer knows the object's name, and wants to
refer to everything by just numbers?

I apologize if there was already a long discussion on this. I seem to
recall Bruce saying that the developers agonized over this.

Cheerio,
Link.

#47Hannu Krosing
hannu@tm.ee
In reply to: Bruce Momjian (#16)
Re: Re: New Linux xfs/reiser file systems

Lincoln Yeoh wrote:

At 01:16 PM 5/5/01 -0400, mlw wrote:

Lincoln Yeoh wrote:

All that for maybe 10% performance increase?

I think it's more advantageous for Postgresql to keep the filesystem layer
of abstraction, than to do away with it, and later reinvent certain parts
of it along with new bugs.

I just did a test of putting pg_xlog on a FAT file system, and my first rough
tests (pgbench) show an approximate 20% performance increase over ext2 with
fsync enabled.

OK. I slouch corrected :). It's more than 10%.

However in the same message I did also say:

What would be useful is if one can specify where the tables, indexes, WAL
and other files go. That feature would probably help improve performance
far more.

For example: you could then stick the WAL on a battery backed up RAM disk.
How much total space does a WAL log need?

A battery backed RAM disk might even be cheaper than Brand X RDBMS
Proprietary Feature #5.

And your experiments do help show that it is useful to be able to specify
where things go, that putting just the WAL somewhere else makes things 20%
faster. So you don't have to put everything on a pgfs. Just the WAL on some
other FS (even FAT32, ick ;) ).

So you propose pgwalfs ? ;)

It may be much easier to implement than a full fs.

How hard would it be to let wal reside on a (raw) device ?

If we already pre-allocate a required number of fixed-size files would
it be too
hard to replace them with plain (raw) devices and test for possible
performance gains ?

How about naming the DB objects <object ID>.<object name>?
e.g

121575.testtable
125575.testtableindex

This sure seems to be an elegant solution for the problem that seems to
be impossible
to solve with symlinks and such. Even the IMHO hardest to solve problem
- RENAME - can
probably be done in a transaction-safe manner by doing a
link(oid.<newname>) in the
beginning and selective unlink(oid.<newname/oldname>) at commit time.

--------------------
Hannu

#48mlw
markw@mohawksoft.com
In reply to: Bruce Momjian (#16)
Re: New Linux xfs/reiser file systems

Hannu Krosing wrote:

Lincoln Yeoh wrote:

At 01:16 PM 5/5/01 -0400, mlw wrote:

Lincoln Yeoh wrote:

All that for maybe 10% performance increase?

I think it's more advantageous for Postgresql to keep the filesystem layer
of abstraction, than to do away with it, and later reinvent certain parts
of it along with new bugs.

I just did a test of putting pg_xlog on a FAT file system, and my first rough
tests (pgbench) show an approximate 20% performance increase over ext2 with
fsync enabled.

OK. I slouch corrected :). It's more than 10%.

However in the same message I did also say:

What would be useful is if one can specify where the tables, indexes, WAL
and other files go. That feature would probably help improve performance
far more.

For example: you could then stick the WAL on a battery backed up RAM disk.
How much total space does a WAL log need?

A battery backed RAM disk might even be cheaper than Brand X RDBMS
Proprietary Feature #5.

And your experiments do help show that it is useful to be able to specify
where things go, that putting just the WAL somewhere else makes things 20%
faster. So you don't have to put everything on a pgfs. Just the WAL on some
other FS (even FAT32, ick ;) ).

So you propose pgwalfs ? ;)

I don't know about a "pgwalfs" too much work. I have had some time to grapple
with my feelings about FAT, and you know what? I don't hate the idea. I would,
of course, like to look through the driver code and see if there are any
technical reasons why it should be excluded.

FAT is almost perfect for WAL, and if I can figure out how to get the "base"
directory to get the same performance, I'd think about putting it there as
well.

The ReiserFS issues touched on some vague suspicions I had about fsync. Maybe
I'm over reacting, but there are reasons why the oracles manage their own table
spaces.

Back to FAT. FAT is probably the most simple file system I can think of. As
long as it writes to disk when it gets synched, and doesn't loose things, its
perfect. Postgres maintains much of the coherency issues, there is no real
problem with permissions because it will be owned by the postgres super user,
etc. I would never suggest FAT as a general purpose file system, but, geez, as
a special purpose single user (postgres) it seems an ideal answer to what will
be an increasingly hard problem of advanced file systems.

Aside from a general, and well deserved, disdain for FAT. What are the
technical "cons" of such a proposal. If we can get the Linux kernel (and other
unices) to accept IOCTLs to direct space allocation, and/or write up a white
paper on how to use this for postgres, why wouldn't it be a reasonable
strategy?

--
I'm not offering myself as an example; every life evolves by its own laws.
------------------------
http://www.mohawksoft.com

#49Lincoln Yeoh
lyeoh@pop.jaring.my
In reply to: Hannu Krosing (#47)
Re: Re: New Linux xfs/reiser file systems

Lincoln Yeoh wrote:

Lincoln Yeoh wrote:
For example: you could then stick the WAL on a battery backed up RAM disk.
How much total space does a WAL log need?

A battery backed RAM disk might even be cheaper than Brand X RDBMS
Proprietary Feature #5.

And your experiments do help show that it is useful to be able to specify
where things go, that putting just the WAL somewhere else makes things 20%
faster. So you don't have to put everything on a pgfs. Just the WAL on some
other FS (even FAT32, ick ;) ).

At 02:04 PM 5/6/01 +0200, Hannu Krosing wrote:

So you propose pgwalfs ? ;)

Nah. I'm proposing the opposite in fact.

I'm saying so far there appears to be no real need to come up with a
special filesystem. Stick to using existing/future filesystems. Just make
it easy and safe enough for DBA's to put the objects on whatever filesystem
they choose. So long as the O/S kernel/driver people support the hardware
or filesystem, postgresql will take advantage of it with little if any
extra work.

In fact as mlw's experiments show, you can put the WAL on FAT (FAT16?) for
a 20% performance increase. How much better would a raw device be? Would it
really be worth all that hassle? For instance if you need to resize the FAT
partition, you could probably use fips, Partition Magic or some other cost
effective solution - no need for pgsql developers or anybody to reinvent
anything.

My proposed but untested idea is that you could get a significant
performance increase by putting the WAL on popular filesystems running on
battery backed RAM drives (or other special hardware). 128MB RAM should be
enough for small setups?

Don't know how much these things cost, but I believe that when you need the
speed, they'll be more worthwhile than a special proprietary filesystem.

Ok, just found:
http://www.expressdata.com.au/Products/ProductsList.asp?SUPPLIER_NAME=PLATYP
US+TECHNOLOGY&SUBCATEGORY_NAME=QikDrive2#PRODUCTTITLE

AUD$1,624.70 = USD843.06. Not cheap but not way out of reach. Haven't found
other competing products yet. Must be somewhere.

Cheerio,
Link.

#50Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hannu Krosing (#47)
Re: Re: New Linux xfs/reiser file systems

Hannu Krosing <hannu@tm.ee> writes:

Even the IMHO hardest to solve problem
- RENAME - can
probably be done in a transaction-safe manner by doing a
link(oid.<newname>) in the
beginning and selective unlink(oid.<newname/oldname>) at commit time.

Nope. Consider

begin;
rename a to b;
rename b to a;
end;

And don't tell me you'll solve this by ignoring failures from link().
That's a recipe for losing your data...

I would ask people who think they have a solution to please go back and
reread the very long discussions we have had on this point in the past.
Nobody particularly likes numeric filenames, but there really isn't any
other workable answer.

regards, tom lane

#51Tom Lane
tgl@sss.pgh.pa.us
In reply to: Lincoln Yeoh (#46)
Re: Re: New Linux xfs/reiser file systems

Lincoln Yeoh <lyeoh@pop.jaring.my> writes:

OK we can do that with symlinks, but is there a PGSQL Recommended or
Standard way to do it, so as to reduce administrative errors, and at least
help improve consistency with multiadmin pgsql installations?

Not yet. There should be support for this. See
doc/TODO.detail/tablespaces.

regards, tom lane

#52Lincoln Yeoh
lyeoh@pop.jaring.my
In reply to: Tom Lane (#50)
Re: Re: New Linux xfs/reiser file systems

At 12:03 PM 5/6/01 -0400, Tom Lane wrote:

Hannu Krosing <hannu@tm.ee> writes:

Even the IMHO hardest to solve problem
- RENAME - can
probably be done in a transaction-safe manner by doing a
link(oid.<newname>) in the
beginning and selective unlink(oid.<newname/oldname>) at commit time.

Nope. Consider

begin;
rename a to b;
rename b to a;
end;

And don't tell me you'll solve this by ignoring failures from link().
That's a recipe for losing your data...

I would ask people who think they have a solution to please go back and
reread the very long discussions we have had on this point in the past.
Nobody particularly likes numeric filenames, but there really isn't any
other workable answer.

OK. Found one of the discussions at:
http://postgresql.readysetnet.com/mhonarc/pgsql-hackers/2000-03/threads.html
#00088

Conclusion calling stuff oid.relname doesn't really work. Sorry to have
brought it up again.

Another idea that's probably more messy than it's worth:

Main object still called <oid> with a symlink called <oid.originalrelname>.
DB really just uses <oid>.

Rename= adds symlink called <oid.newrelname>, doesn't remove symlinks
(symlinks more for show!).

Committed drop table does what 7.1 does with the main oid entry.

Vacuum cleans up the symlinks leaving just a single valid one or zaps all
if the table has been dropped.

For windows create empty files named oid.relname instead of symlinks.
Windows will definitely like .verylongrelname extensions ;).

Kinda messy and kludgy. Throw in the performance reduction and Ick!

I probably have to think harder :), maybe there's just no good way :(.

Ah well,
Link.

#53Hannu Krosing
hannu@tm.ee
In reply to: Bruce Momjian (#16)
Re: TABLE RENAME/NUMERIC FILENAMES (Was: New Linux xfs/reiser file systems)

Tom Lane wrote:

Hannu Krosing <hannu@tm.ee> writes:

Even the IMHO hardest to solve problem
- RENAME - can
probably be done in a transaction-safe manner by doing a
link(oid.<newname>) in the
beginning and selective unlink(oid.<newname/oldname>) at commit time.

Nope. Consider

begin;
rename a to b;
rename b to a;
end;

And don't tell me you'll solve this by ignoring failures from link().
That's a recipe for losing your data...

I guess link() failures can be safely ignored _as long as_ we check that
we have the right link after doing it. I can't see how it will lose
data.

I would ask people who think they have a solution to please go back and
reread the very long discussions we have had on this point in the past.

I think I have now (No way to guarantee I have read _everything_ about
it,
but I did hit about ~10 messages on oid_relname naming scheme).

the most serious objection seemed to be that we need to remember the
postgres tablename while it would be much easier to use only oids .

I guess we could hit some system limits here (running out of directory
entries or reaching the maximum number of links to a file) but at least
on
linux i was able to make >10000 links to one file with no problems.

now that i think of it I have one concern - it would require extra work
to use tablenames like "/etc/passwd" or others that use characters that
are
reserved in filenames which are ok to use in 7.1.

hannu=# create table "/etc/passwd"(
hannu(# login text,
hannu(# uid int,
hannu(# gid int
hannu(# );
CREATE
hannu=# \dt
List of relations
Name | Type | Owner
-------------+-------+-------
/etc/passwd | table | hannu

So if people start using names like these it will not be easy to go back
;)

Nobody particularly likes numeric filenames, but there really isn't any
other workable answer.

At least we could put links on system relations, so it would be
easier to find them.

I guess one is not supposed to rename/drop system tables ?

---------------------
Hannu

#54Zeugswetter Andreas SB
ZeugswetterA@wien.spardat.at
In reply to: Lincoln Yeoh (#52)
AW: Re: New Linux xfs/reiser file systems

I think it's worth noting that Oracle has been petitioning the
kernel developers for better raw device support: in other words,
the ability to write directly to the hard disk and bypassing the
filesystem all together.

But there could be other reasons why Oracle would want to do
raw stuff.

The reasons are:
1. Most Unixen now have shared (between several machines) raw devices
Oracle needs this for their shared everything Parallel Server. Only 2 Unixen
that I know of have shared filesystems (IBM gpfs and Sun Veritas) (both are rather new)
2. The allocation time for raw devices is by far better (near instantaneous) than
creating preallocated files in a fs. Providing 1 Tb of raw devices is a task
of minutes, creating 1 Tb filsystems with preallocated 2 Gb files is a task of
hours at best.
3. absolute control over writes and page location (you don't want interleaved pages)
4. Efficient use of buffer memory. Usual use of filesystems buffers the disk pages twice,
one copy in the db buffer pool, one in the OS file cache.
5. async raw IO (most Unixes provide async raw IO on raw devices, only some provide
raw IO on filesystem files).
(async IO has 2 advantages: CPU work can be done while waiting for IO and
IO can complete within one OS timeslice (20 us). This is possible with modern
disk systems, that have large caches)

Andreas

#55Zeugswetter Andreas SB
ZeugswetterA@wien.spardat.at
In reply to: Zeugswetter Andreas SB (#54)
AW: Re: New Linux xfs/reiser file systems

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

I think I could do that... any useful benchmarks to run?

Looks like we have expert help here :-) One very interesting question
would imho be, how do we best preallocate the log files ?
The current method is to prewrite 8k pages to the whole file, since
only writing 1 byte to the end of file triggered the sparse file handling.
This, although usually during off peak times, effectively doubles the writes
for WAL.

Andreas

#56Noname
teg@redhat.com
In reply to: Noname (#38)
Re: Re: New Linux xfs/reiser file systems

teg@redhat.com (Trond Eivind Glomsr�d) writes:

"Ken Hirsch" <kenhirsch@myself.com> writes:

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

I think I could do that... any useful benchmarks to run?

In lack of bigger benchmarks, I tried postgresql 7.1 on a Red Hat
Linux 7.1 system with the SGI XFS modifications. The differences were
very small.

#57Giles Lean
giles@nemeton.com.au
In reply to: Zeugswetter Andreas SB (#54)
Re: AW: Re: New Linux xfs/reiser file systems

2. The allocation time for raw devices is by far better (near
instantaneous) than creating preallocated files in a
fs. Providing 1 Tb of raw devices is a task of minutes,
creating 1 Tb filsystems with preallocated 2 Gb files is a
task of hours at best.

Filesystem dependent, surely? Veritas' VxFS can create filesystems
quickly, and quickly preallocate space for the files. If you actually
want to write data into the files that would take longer. :)

Creating a 1TB UFS filesystem might take a while, and UFS doesn't
support pre-allocation of space as far as I know so creating 2GB files
would take time too. Perhaps hours. :-(

3. absolute control over writes and page location (you don't want
interleaved pages)

As well as a filesystem, most large systems I'm familiar with use
volume management software (VxVM, LVM, ...) and their "disks" will be
allocated space on disk arrays.

These additional layers aren't arguments against simplifying the
filesystem layer, but they sure will complicate measurement and
tuning. :-)

Regards,

Giles

#58Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Giles Lean (#57)
Re: Re: New Linux xfs/reiser file systems

teg@redhat.com (Trond Eivind Glomsr?d) writes:

"Ken Hirsch" <kenhirsch@myself.com> writes:

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

I think I could do that... any useful benchmarks to run?

In lack of bigger benchmarks, I tried postgresql 7.1 on a Red Hat
Linux 7.1 system with the SGI XFS modifications. The differences were
very small.

Thanks. That is very helpful. Seems XFS is fine. According to Joe
Conway, reiser has some problems.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#59Joe Conway
joe@conway-family.com
In reply to: Bruce Momjian (#58)
Re: New Linux xfs/reiser file systems

I don't mind contributing the script and schema that I used, but one thing

I

failed to mention in my first post is that the first thing the script does
is open connections to 256 databases (all on this same machine), and the
transactions are relatively evenly dispersed among the 256 connections.

The

test was originally written to try out an idea to allow scalability by
partitioning the data into seperate databases (which could eventually each
live on its own server). If you are interested I can modify the test to

use

only one database and rerun the same tests this weekend.

I modified my test script to use just one (instead of 256) databases to be
more representative of a common installation. Then I ran more tests under
both ext2 and reiserfs. The summary follows. Short answer is that the
differences are much smaller than under the first test, but ext2 is still
faster.

-- Joe

case rfs_fdatasync ext_fdatasync rfs_fdatasync
ext_fdatasync rfs_fdatasync ext_fdatasync
fstab sync,noatime sync,noatime noatime noatime
defaults defaults
starting # tup 70k 70k 70k 70k
70k 70k
total time (min) 12.10 11.77 11.83 11.43
11.88 11.42
cpu util % 90-94% 95-98% 90-95% 95-99%
90-95% 95-99%
ram - stable cpu 42M 42M 42M 42M
42M 42M
ram - final 52M 52M 52M 52M
52M 52M
avg trans/sec
10000 tup 13.77 14.16 14.08 14.58
14.03 14.60
5000 tup 13.70 14.08 13.97 14.71
13.93 14.75
1000 tup 11.36 11.63 11.63 13.33
11.63 13.51

Notes:
1. rfs_fdatasync: data and wal on rieserfs with wal_sync_method = fdatasync

2. ext_fdatasync: data and wal on ext2 with wal_sync_method = fdatasync

3. starting # tup: the database was pre-seeded with 70k tuples. I made a
tarball of the starting database and refreshed the pgsql/data filestructure
before each test to ensure a good comparison.

4. cpu utilization + ram - stable cpu + ram - final: I eyeballed top while
the test was running. In general cpu % increased steadily through the first
1500 or so transactions, along with ram usage. At the point when cpu
utilization stabilized, ram was pretty consistently at 42M. From there, cpu
util % varied in the ranges noted, while ram usage slowly increased to 52M.
It seemed pretty linear in that I could estimate the number of transactions
already processes based on ram usage.

5. avg trans/sec: These represent the total transactions/total elapsed time
at the given number of transactions (as opposed to some instantaneous value
at that point in time).

#60Zeugswetter Andreas SB
ZeugswetterA@wien.spardat.at
In reply to: Joe Conway (#59)
AW: AW: Re: New Linux xfs/reiser file systems

2. The allocation time for raw devices is by far better (near
instantaneous) than creating preallocated files in a
fs. Providing 1 Tb of raw devices is a task of minutes,
creating 1 Tb filsystems with preallocated 2 Gb files is a
task of hours at best.

Filesystem dependent, surely? Veritas' VxFS can create filesystems
quickly, and quickly preallocate space for the files.

And you are sure, that this does not create a sparse file, which is exactly
what we do not want ? Can you name one other example ?

3. absolute control over writes and page location (you don't want
interleaved pages)

As well as a filesystem, most large systems I'm familiar with use
volume management software (VxVM, LVM, ...) and their "disks" will be
allocated space on disk arrays.

Of course. My thinking has long switched to volume groups and logical
volumes. This however does not alter the fact, that one LV can be
regarded as one mainly contiguous (is that the word ?) block on disk
for optimization issues. When reading a logical volume sequentially
head movement will be minimal.

Andreas

#61Giles Lean
giles@nemeton.com.au
In reply to: Zeugswetter Andreas SB (#60)
Re: AW: AW: Re: New Linux xfs/reiser file systems

Filesystem dependent, surely? Veritas' VxFS can create filesystems
quickly, and quickly preallocate space for the files.

And you are sure, that this does not create a sparse file, which is exactly
what we do not want ? Can you name one other example ?

http://docs.hp.com//hpux/onlinedocs/B3929-90011/00/00/35-con.html#s3-2

Reservation: Preallocating Space to a File

VxFS makes it possible to preallocate space to a file at the time
of the request rather than when data is written into the
file. This space cannot be allocated to other files in the file
system. VxFS prevents any unexpected out-of-space condition on the
file system by ensuring that a file's required space will be
associated with the file before it is required.

I can't name another example -- I'm not familiar with what IBM's JFS
or SGI's XFS filesytems are capable of doing.

Of course. My thinking has long switched to volume groups and logical
volumes. This however does not alter the fact, that one LV can be
regarded as one mainly contiguous (is that the word ?) block on disk
for optimization issues. When reading a logical volume sequentially
head movement will be minimal.

I'm no storage guru, but I'd certainly hope that sequential reads were
"efficient" on just about any storage device.

My mild concern is that any model of storage system behaviour that
includes "head movement" is inadequate for anything but small systems,
and is challenged for them by the presence of caches everywhere.

A storage array such as those made by Hitachi and EMC will have SCSI
LUNs (aka "disks") that are sized and configured by software inside
the storage device.

Good performance on such storage systems might depend on keeping as
much work up to it as possible, to let the device determine what order
to service the requests. Attempts to minimise "head movement" may
hurt, not help. But as I said, I'm no storage guru, and I'm not a
performance consultant either. :-)

Regards,

Giles

#62Noname
test@test.com
In reply to: Giles Lean (#61)
Re: AW: AW: Re: New Linux xfs/reiser file systems

On Tue, 8 May 2001 09:09:08 +0000 (UTC), giles@nemeton.com.au (Giles
Lean) wrote:

Good performance on such storage systems might depend on keeping as
much work up to it as possible, to let the device determine what order
to service the requests. Attempts to minimise "head movement" may
hurt, not help.

Letting the device determine the sequence of IO increases throughput
and reduces performance.

If you want the maximum throughput, so you can reduce the money you
spend on storage, you que the requests and sort the ques based on the
minimum work required to complete the aggregated requests.

If you want performance, you put your request first and make the que
wait. Some storage systems allow the specification of two or more
priorities so your IO can go first and everyone else goes second.

"lazy" page writes and all the other tricks used to keep IO in memory
have the effect of reducing writes at the expense of data lost during
a power failure. Some storage devices were built with batteries to
allow writes after power loss. If the batteries could maintain writes
for 5 seconds after poser loss, writes could be held up for nearly 5
seconds in the hope that many duplicate writes to the same location
could be dropped.

I know a lot of storage systems from the hardware up and few
outperform an equivalent system where the money was focused on more
memory in the computer. Most add on storage systems offering
"spectacular" performance have make most financial sense when they are
attached to a computer that is at a physical limit of expansion. If
you have 4 Gb on a 32 bit computer, adding a storage system with 2 Gb
of cache can be a sound investment. Adding the same 2 Gb cache to a 32
bit system expanded to just 2 Gb usually costs more than adding the
extra 2 Gb to the computer.

Once 64 bit computers with 32, 64 or 128 Gb of DDR become available,
the best approach will go back to heaps of RAM on the computer and
none on disk.

If you are looking at one of the 64 bit replacements x86 style
processor and equivalents, the best disk arrangement would be to have
no file system or operating system intervention and have the whole
disk allocated to the processor page function, similar to the theory
behind AS/400s and equivalents. Each disk would be on a single fibre,
service 64 Gb gigabyte and be mirrored on an adjacent disk. The only
processing in the CPU would be ECC, the disk controller would perform
the RAID 1 processing and perform the IO in a pendulum sweep pattern
with just enough cache to handle one sweep. You would, of course, need
power supplies big enough to cover a few extra sweeps and something to
tell the page processing to flush everything when the power is
dropping.

When you have multiple computers in a cluster, you could build an
intermediate device to handle the page flow much the same as a network
switch.

All these technologies were tried and proves several times in the last
30 years and work perfectly when the computer's maximum address space
is larger than the total size of all open files. They worked perfectly
when people had 100Mb databases on 200Mb disks in systems that could
address 4Gb. Doubling the number of bits in the address range puts 64
bit systems out in front of both disks and memory again. There are
already 128 bit and 256 bit processors in use so systems could be
planned to stay ahead of disk design so you never have to worry about
a file system again.

The AMD slot A and Intel slot 1 could be sold the way you buy Turkish
pizza, by the foot. Just walk up to the hardware shop and ask for 300
bits of address space. Shops could have specials, like an extra 100
bits of address space for all orders over $20.

#63Martín Marqués
martin@bugs.unl.edu.ar
In reply to: Noname (#62)
Re: Re: New Linux xfs/reiser file systems

Quoting Trond Eivind Glomsr�d <teg@redhat.com>:

Bruce Momjian <pgman@candle.pha.pa.us> writes:

When compared to the earlier ones (including XFS), you'll note that

ReiserFS

performance is rather poor in some of the tests - it takes 37 vs. 13
seconds for 8192 inserts, when the inserts are different transactions.

That is all the fsync delay, probably, and it should be using fdatasync()
on that kernel.

And it does seem to work that way with XFS...

I'm concearned about this because we are going to switch our fist server to a
Journaling FS (on Linux).
Searching and asking I found out that for our short term work we need ReiserFS
(it's for a proxy server).
Put the interesting thing was that for large (very large) files, everybody
recomends XFS.
The drawback of XFS is that it's very, very sloooow when deleting files.

Saludos... :-)

--
El mejor sistema operativo es aquel que te da de comer.
Cuida tu dieta.
-----------------------------------------------------------------
Martin Marques | mmarques@unl.edu.ar
Programador, Administrador | Centro de Telematica
Universidad Nacional
del Litoral
-----------------------------------------------------------------

#64Martín Marqués
martin@bugs.unl.edu.ar
In reply to: Martín Marqués (#63)
Re: Re: New Linux xfs/reiser file systems

Quoting Bruce Momjian <pgman@candle.pha.pa.us>:

I'm concearned about this because we are going to switch our
fist server to a Journaling FS (on Linux). Searching and asking
I found out that for our short term work we need ReiserFS (it's
for a proxy server). Put the interesting thing was that for
large (very large) files, everybody recomends XFS. The drawback
of XFS is that it's very, very sloooow when deleting files.

Why do all these file systems seem to have one major negative?

In the case of XFS they told me that it was slow deleting, but I guess that they
were trying to tell me that reiser would do the job on a proxy cache better then
XFS.
Everybody put there thumbs-up to XFS when talking about databases (because of
the large file size).

Saludos... :-)

--
El mejor sistema operativo es aquel que te da de comer.
Cuida tu dieta.
-----------------------------------------------------------------
Martin Marques | mmarques@unl.edu.ar
Programador, Administrador | Centro de Telematica
Universidad Nacional
del Litoral
-----------------------------------------------------------------

#65Noname
teg@redhat.com
In reply to: Noname (#56)
Re: Re: New Linux xfs/reiser file systems

teg@redhat.com (Trond Eivind Glomsr�d) writes:

teg@redhat.com (Trond Eivind Glomsr�d) writes:

"Ken Hirsch" <kenhirsch@myself.com> writes:

I don't have a machine with XFS installed and it will be at least a week
before I could get around to a build. Any volunteers?

I think I could do that... any useful benchmarks to run?

In lack of bigger benchmarks, I tried postgresql 7.1 on a Red Hat
Linux 7.1 system with the SGI XFS modifications. The differences were
very small.

And here is the one for ReiserFS - same kernel, but recompiled to turn
off debugging

#66Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Noname (#65)
Re: Re: New Linux xfs/reiser file systems

When compared to the earlier ones (including XFS), you'll note that ReiserFS
performance is rather poor in some of the tests - it takes 37 vs. 13
seconds for 8192 inserts, when the inserts are different transactions.

That is all the fsync delay, probably, and it should be using fdatasync()
on that kernel.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#67Noname
teg@redhat.com
In reply to: Bruce Momjian (#66)
Re: Re: New Linux xfs/reiser file systems

Bruce Momjian <pgman@candle.pha.pa.us> writes:

When compared to the earlier ones (including XFS), you'll note that ReiserFS
performance is rather poor in some of the tests - it takes 37 vs. 13
seconds for 8192 inserts, when the inserts are different transactions.

That is all the fsync delay, probably, and it should be using fdatasync()
on that kernel.

And it does seem to work that way with XFS...

--
Trond Eivind Glomsr�d
Red Hat, Inc.

#68Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Noname (#67)
Re: Re: New Linux xfs/reiser file systems

I'm concearned about this because we are going to switch our
fist server to a Journaling FS (on Linux). Searching and asking
I found out that for our short term work we need ReiserFS (it's
for a proxy server). Put the interesting thing was that for
large (very large) files, everybody recomends XFS. The drawback
of XFS is that it's very, very sloooow when deleting files.

Why do all these file systems seem to have one major negative?

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#69Rod Taylor
rbt@barchord.com
In reply to: Bruce Momjian (#68)
Re: Re: New Linux xfs/reiser file systems

Makes it more fun :) Kinda like a lottery ticket:

- reliable (cherry)
- fast (cherry)
- resource hog (lemon)
--
Rod Taylor
BarChord Entertainment Inc.
----- Original Message -----
From: "Bruce Momjian" <pgman@candle.pha.pa.us>
To: "Mart�n Marqu�s" <martin@bugs.unl.edu.ar>
Cc: "Trond Eivind Glomsr�d" <teg@redhat.com>;
<pgsql-hackers@postgresql.org>
Sent: Wednesday, May 09, 2001 1:24 PM
Subject: Re: [HACKERS] Re: New Linux xfs/reiser file systems

I'm concearned about this because we are going to switch our
fist server to a Journaling FS (on Linux). Searching and asking
I found out that for our short term work we need ReiserFS (it's
for a proxy server). Put the interesting thing was that for
large (very large) files, everybody recomends XFS. The drawback
of XFS is that it's very, very sloooow when deleting files.

Why do all these file systems seem to have one major negative?

--
Bruce Momjian                        |  http://candle.pha.pa.us
pgman@candle.pha.pa.us               |  (610) 853-3000
+  If your life is a hard drive,     |  830 Blythe Avenue
+  Christ can be your backup.        |  Drexel Hill, Pennsylvania

19026

---------------------------(end of

broadcast)---------------------------

Show quoted text

TIP 4: Don't 'kill -9' the postmaster

#70Yaacov Akiba Slama
ya@slamail.org
In reply to: Bruce Momjian (#68)
Re: New Linux xfs/reiser file systems

Hello !
I am forwarding the following from lkml

It seems that the only case when XFS is slow is the 'rm -rf linux'
[which can be considered as a good sign for linux]. For all other
operation XFS is the winner.

YAS

<MessageFromLKML>
From: Ricardo Galli (gallir@uib.es)
Date: Wed May 09 2001 - 20:45:46 EDT

* Next message: clameter@lameter.com: "USB broken in 2.4.4? Serial
Ricochet works, USB performance sucks."

* Previous message: AmigaLinux A2232 Driver Project : "New Amiga
Driver"
* Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

It would be great to see a table of ReiserFS/XFS/Ext2+index performance
results. Well, to make it really fair it should be Ext3+index so I'd
better add 'backport the patch to 2.2' or 'bug Stephen and friends to
hurry up' to my to-do list.

You can find a simple benchmark (an average of three samples) among reiser,
ext2, xfs and fat32 under Linux:

http://bulma.lug.net/body.phtml?nIdNoticia=626

Although is Spanish, the tables are easy to understand.

The benchmark was carried up by Guillem Cantallops, student of the
University of Balearics Islands and member or the local LUG...

BASIC WORDS ;-)
Escritura: Writing
Lectura: Reading
Borrado: Deletion
Copia: Copy
Extracci�n: Extraction

Regards,

--ricardo
http://m3d.uib.es/~gallir/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
</MessageFromLKML>

Bruce Momjian wrote:

Show quoted text

I'm concearned about this because we are going to switch our
fist server to a Journaling FS (on Linux). Searching and asking
I found out that for our short term work we need ReiserFS (it's
for a proxy server). Put the interesting thing was that for
large (very large) files, everybody recomends XFS. The drawback
of XFS is that it's very, very sloooow when deleting files.

Why do all these file systems seem to have one major negative?

--
Bruce Momjian                        |  http://candle.pha.pa.us
pgman@candle.pha.pa.us               |  (610) 853-3000
+  If your life is a hard drive,     |  830 Blythe Avenue
+  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster