Re: UPDATING 20110730

2011-08-03 Thread Doug Barton
On 08/03/2011 03:39, Andriy Gapon wrote:
> on 03/08/2011 00:09 Peter Jeremy said the following:
>> An alternative viewpoint is that this is wasteful because data is then
>> double-buffered.
> 
> If you stop accessing data on disk after putting it into an application cache,
> then there would not be double-buffering, the OS is free to evict it from its 
> cache.

I agree with Andriy that the OS is smart enough to manage the disk
buffer cache all on its own.

Meanwhile, another detail that I didn't include in previous messages
that I probably should have is that portmaster is already caching a
whole bunch of stuff, which is one of the reasons it's as fast as it is.
In fact, because it does a lot of this caching through environment
variables I have run into problems where attempting to run external
commands with long command lines sometimes fails because there is not
enough memory available. As a result I've been attempting to streamline
both my command lines, and what I cache. I hadn't had this complaint for
a while but I got one the other day, so it looks like I still have some
more work to do in this area.


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-03 Thread Andriy Gapon
on 03/08/2011 00:09 Peter Jeremy said the following:
> An alternative viewpoint is that this is wasteful because data is then
> double-buffered.

If you stop accessing data on disk after putting it into an application cache,
then there would not be double-buffering, the OS is free to evict it from its 
cache.

> An alternative view is that the default ZFS configuration is sub-optimal and
> should be fixed

I agree with this.

> - rather than insisting that every tool that accesses more than a handful of 
> files should do its own caching.

But not for this reason.

> (And, reading zfs-discuss, avg@ is far from the only person to have been
> bitten by the ZFS metadata limit).

But for this reason :-)

-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-02 Thread Peter Jeremy
On 2011-Aug-01 19:21:21 +0200, Michel Talon  wrote:
>This is unfortunately impossible because the ports system is organized
>around a make logic and the relevant dependency variables are only
>obtained through running make on each ports Makefile *in the context* of
>the gigantic makefiles (bsd.port.mk, etc) which are included.

We've had this discussion before but there is plenty of scope for
someone with copious free time to optimise this.  Options include a
new tool that handles the "easy" cases without needing to fully parse
all of bsd.*.mk (and knows to punt the cases it can't handle to make)
and/or pre-precessing bsd.*.mk to speed up their loading.  Note that
about 1/3 of bsd.*.mk is comments.

On 2011-Aug-02 22:12:48 +0300, Andriy Gapon  wrote:
>I will repeat myself: currently portmaster's performance relies on
>the fact that certain often used data originating from disk is
>actually cached in memory by the OS.  Typically performance-conscious
>applications explicitly pull such data into an application cache.

An alternative viewpoint is that this is wasteful because data is
then double-buffered.  An alternative view is that the default ZFS
configuration is sub-optimal and should be fixed - rather than
insisting that every tool that accesses more than a handful of
files should do its own caching.

(And, reading zfs-discuss, avg@ is far from the only person to
have been bitten by the ZFS metadata limit).

-- 
Peter Jeremy


pgp4AvKy1tNvA.pgp
Description: PGP signature


Re: UPDATING 20110730

2011-08-02 Thread Doug Barton
On 08/02/2011 13:39, Andriy Gapon wrote:
> Just a few small corrections:

I was using your description of the situation. Sorry if I misunderstood.


-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-02 Thread Andriy Gapon
on 02/08/2011 23:08 Doug Barton said the following:
> On 08/02/2011 12:12, Andriy Gapon wrote:
>> on 02/08/2011 21:26 Doug Barton said the following:
>>> On 08/02/2011 06:14, Andriy Gapon wrote:
 Second, I think that portmaster could cache the origin => pkg mapping that 
 it
 builds while working on port A, so that it can be readily re-used for port 
 B.
 That could also include "negative" mapping where there is no installed pkg 
 for a
 given origin.
>>>
>>> That's a reasonable idea, but moderately complex to do. I'll put it on
>>> "the list" but it's not going to be a priority since in non-worst-case
>>> scenarios it's generally quite fast as it is.
>>>
>>> Meanwhile thanks for digging further into your situation and confirming
>>> that it's a local problem.
>>
>> Well, yes with a little bit of no.
>> I will repeat myself: currently portmaster's performance relies on the fact 
>> that
>> certain often used data originating from disk is actually cached in memory by
>> the OS.
> 
> And I will repeat myself, one last time. The assumptions that portmaster
> makes are reasonable under typical conditions, but can be improved which
> I will do in due course. However, your conditions are very non-typical,
> including but not limited to: slow disk, small amount of ram, zfs on a
> slow disk with a small amount of ram, poorly tuned zfs on a slow disk
> with a small amount of ram, and a large'ish number of ports installed.

Just a few small corrections:
- the disks are not that slow (not sure how you deduced that): Seagate Barracuda
7200.12
- the RAM is not that small: 4GB
- ZFS is not in such a bad environment as you portrayed it
- ZFS is not so poorly tuned, ARC size above 1GB should be sufficient for a
desktop-ish machine
- the number of ports is not so large-ish for a desktop-ish machine

> I get that you're disappointed with portmaster's performance under these
> circumstances, and I've already said that I will do what I can, when I
> can, to improve that. Hopefully I won't need to repeat myself again. :)

I got this.

-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-02 Thread Doug Barton
On 08/02/2011 12:12, Andriy Gapon wrote:
> on 02/08/2011 21:26 Doug Barton said the following:
>> On 08/02/2011 06:14, Andriy Gapon wrote:
>>> Second, I think that portmaster could cache the origin => pkg mapping that 
>>> it
>>> builds while working on port A, so that it can be readily re-used for port 
>>> B.
>>> That could also include "negative" mapping where there is no installed pkg 
>>> for a
>>> given origin.
>>
>> That's a reasonable idea, but moderately complex to do. I'll put it on
>> "the list" but it's not going to be a priority since in non-worst-case
>> scenarios it's generally quite fast as it is.
>>
>> Meanwhile thanks for digging further into your situation and confirming
>> that it's a local problem.
> 
> Well, yes with a little bit of no.
> I will repeat myself: currently portmaster's performance relies on the fact 
> that
> certain often used data originating from disk is actually cached in memory by
> the OS.

And I will repeat myself, one last time. The assumptions that portmaster
makes are reasonable under typical conditions, but can be improved which
I will do in due course. However, your conditions are very non-typical,
including but not limited to: slow disk, small amount of ram, zfs on a
slow disk with a small amount of ram, poorly tuned zfs on a slow disk
with a small amount of ram, and a large'ish number of ports installed.

I get that you're disappointed with portmaster's performance under these
circumstances, and I've already said that I will do what I can, when I
can, to improve that. Hopefully I won't need to repeat myself again. :)


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-02 Thread Andriy Gapon
on 02/08/2011 21:26 Doug Barton said the following:
> On 08/02/2011 06:14, Andriy Gapon wrote:
>> Second, I think that portmaster could cache the origin => pkg mapping that it
>> builds while working on port A, so that it can be readily re-used for port B.
>> That could also include "negative" mapping where there is no installed pkg 
>> for a
>> given origin.
> 
> That's a reasonable idea, but moderately complex to do. I'll put it on
> "the list" but it's not going to be a priority since in non-worst-case
> scenarios it's generally quite fast as it is.
> 
> Meanwhile thanks for digging further into your situation and confirming
> that it's a local problem.

Well, yes with a little bit of no.
I will repeat myself: currently portmaster's performance relies on the fact that
certain often used data originating from disk is actually cached in memory by
the OS.  Typically performance-conscious applications explicitly pull such data
into an application cache.  But practice is the main criterion.

-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-02 Thread Doug Barton
On 08/02/2011 06:14, Andriy Gapon wrote:
> Second, I think that portmaster could cache the origin => pkg mapping that it
> builds while working on port A, so that it can be readily re-used for port B.
> That could also include "negative" mapping where there is no installed pkg 
> for a
> given origin.

That's a reasonable idea, but moderately complex to do. I'll put it on
"the list" but it's not going to be a priority since in non-worst-case
scenarios it's generally quite fast as it is.

Meanwhile thanks for digging further into your situation and confirming
that it's a local problem.


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


portmaster, zfs metadata caching [Was: UPDATING 20110730]

2011-08-02 Thread Andriy Gapon
on 02/08/2011 16:14 Andriy Gapon said the following:
> And now to my side of the problem.
> While "profiling" pkg_info with ktrace I see getdirentries(2) calls sometimes
> take quite a while.  And since I have > 1000 ports all those calls do add up.
> DTrace shows that the calls are quite fast (~0.3 ms) when there is no actual
> disk access, but if it occurs then it introduces a delay on the orders of 1 -
> 100 milliseconds.
> I am really in doubts about what is happening here.  It seems that all the
> directory data isn't kept in ZFS ARC for long enough or is squeezed out of it 
> by
> some other data (without additional pressure it should easily fit into the 
> ARC).
>   And also that somehow disk accesses have quite large latency.  Although 
> svc_t
> according to iostat is smaller (5 - 10 ms).  DTrace shows that the thread 
> spends
> the time in cv_wait.  So it's possible that the scheduler is also involved 
> here
> as its decisions also may add a delay to when the thread becomes runnable 
> again.

Reporting further, just in case anyone follows this.
(You may want to scroll down to my conclusions at the end of the message).

I tracked my ZFS problem to my experiments with ZFS tuning.
I limited my ARC size at some value that I considered to be large enough to
cache my working sets of data and _metadata_.  Little did I know that by default
ZFS sets aside only 1/4th of ARC size for metadata.  So this is already
significantly smaller than I expected.  Then it seems that a large piece of that
metadata portion is permanently occupied by some non-evict-able data (not sure
what it actually is, haven't tracked yet).  In the end only a small portion of
my ARC was available for holding the metadata which included the directory
contents data.

So this is what I had with the old settings:
vfs.zfs.arc_meta_limit: 314572800
vfs.zfs.arc_meta_used: 401064272
and
$ for i in $(jot 5) ; do /usr/bin/time -p pkg_info -O print/printme ; done
The following installed package(s) has print/printme origin:
real 12.55
user 0.02
sys 2.51
The following installed package(s) has print/printme origin:
real 12.65
user 0.03
sys 1.99
The following installed package(s) has print/printme origin:
real 10.57
user 0.02
sys 1.57
The following installed package(s) has print/printme origin:
real 8.85
user 0.03
sys 0.17
The following installed package(s) has print/printme origin:
real 9.28
user 0.02
sys 0.20

I think that you should get the picture.

Now I have bumped the limit and this is what I had just right after doing it:
vfs.zfs.arc_meta_limit: 717225984
vfs.zfs.arc_meta_used: 414439800
and
$ for i in $(jot 5) ; do /usr/bin/time -p pkg_info -O print/printme ; done
The following installed package(s) has print/printme origin:
real 9.08
user 0.01
sys 0.18
The following installed package(s) has print/printme origin:
real 7.48
user 0.04
sys 0.14
The following installed package(s) has print/printme origin:
real 0.08
user 0.00
sys 0.07
The following installed package(s) has print/printme origin:
real 0.95
user 0.03
sys 0.04
The following installed package(s) has print/printme origin:
real 0.08
user 0.00
sys 0.07

Two runs to "warm up" the ARC and then everything works just perfect.

I think that this is an important discovery for two reason:
1. I learned a new thing about ZFS ARC.
2. This problem demonstrates that portmaster currently does depend on a
filesystem cache being able to hold a significant amount of ports/packages
(meta)data.

-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-02 Thread Andriy Gapon
on 31/07/2011 22:14 Doug Barton said the following:
> Understood, but I'm not sure what I can do about it unless I can
> reproduce it.

I reproduced the problem by doing a similar kind of upgrade:
$ pkg_delete -f gtk-2.\*
$ portmaster -v atk-2.0.1 gio-fam-backend-2.28.8 glib-2.28.8
gobject-introspection-0.10.8 x11-toolkits/gtk20

Now I see some duality in the problem.

First, let's consider the portmaster side.
Suppose we have two ports A and B that both depend on both of two other ports C
and D.
When portmaster upgrades port C it updates dependency information in ports A and
B, and while doing that it also checks (and potentially updates) dependency
information for port D.
First of all, it's not clear if that check for port D is really required.
Second, I think that portmaster could cache the origin => pkg mapping that it
builds while working on port A, so that it can be readily re-used for port B.
That could also include "negative" mapping where there is no installed pkg for a
given origin.
Why this caching could be useful becomes more evident if there are hundreds of
ports in the A, B, ... class and hundreds of ports in the C, D, ... class.

As it stands now, the above invocation of portmaster searches for an installed
package with an origin of x11-toolkits/gtk20 for 714 times.  Each search
includes grepping */+CONTENTS in /var/db/pkg directory and also executing
pkg_info -q -O x11-toolkits/gtk20.  As far as I can see, each such pkg_info
invocation also performs something very similar to the grep action: it calls
getdirentries(2) on each port subdirectory and then reads +CONTENTS from it.

What I further observe is those pkg_info calls are sometimes quite fast,
sometimes slow and sometimes are very slow like couple dozen seconds.  Given
that there are ~700 pkg_info runs all those delays add up to quite a long 
period.

And now to my side of the problem.
While "profiling" pkg_info with ktrace I see getdirentries(2) calls sometimes
take quite a while.  And since I have > 1000 ports all those calls do add up.
DTrace shows that the calls are quite fast (~0.3 ms) when there is no actual
disk access, but if it occurs then it introduces a delay on the orders of 1 -
100 milliseconds.
I am really in doubts about what is happening here.  It seems that all the
directory data isn't kept in ZFS ARC for long enough or is squeezed out of it by
some other data (without additional pressure it should easily fit into the ARC).
  And also that somehow disk accesses have quite large latency.  Although svc_t
according to iostat is smaller (5 - 10 ms).  DTrace shows that the thread spends
the time in cv_wait.  So it's possible that the scheduler is also involved here
as its decisions also may add a delay to when the thread becomes runnable again.

-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Michel Talon
On Mon, Aug 01, 2011 at 09:39:05AM -0700, Jos Backus wrote:
> On Aug 1, 2011 7:10 AM, "Michel Talon"  wrote:
> [snip]
> > This being said if an upgrade tool needs to compute (partially) the INDEX,
> > most of the time is spent in running  make -V   in each port,
> > because make has to read and interpret enormous files. I don't see any way
> to
> > cut on that, or one should need to develop a special purpose version of
>  make
> > to evaluate these variables,  perhaps which should keep persistent
> > computations between ports (but this is dangerous).
> 
> Or don't store lots of data in files in Makefile format. The make language
> is a poor data storage format that doesn't allow access to that data from
> other tools easily or efficiently. I'm struggling with a similar problem at
> $WORK.
> 
> Jos

This is unfortunately impossible because the ports system is organized
around a make logic and the relevant dependency variables are only
obtained through running make on each ports Makefile *in the context* of
the gigantic makefiles (bsd.port.mk, etc) which are included.


-- 

Michel TALON

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Michel Talon
On Mon, Aug 01, 2011 at 01:59:08PM -0300, Sergio de Almeida Lenzi wrote:
> Hello
> 
> Even I use portmaster (a very good piece of software),
> it becomes very slow when you have 1550 ports installed in your
> system.
> 
> As only a few ports (about 100, in my case)  changes in a week time,
> I build a database (postgres) that contains all the ports installed,
> de depencies and a flag that tells me if that port needs updating
> (pkg_version)
> a shell script scans the ports (pkg_info | cut -d ' ' -f 1) and builds
> the database once a week (can take several hours... 
> 
> Once the database is built,  an sql query (only ms...) tells me what to
> do...
> it then executes pkg_delete, cd /usr/ports/..., make clean all package..
> and after doing all the job, it updates the postgresql database
> (seconds... ).
> 
> In my case I use a central server with all the 1550 ports... and all I
> do
> is to install them on the slaves, (again, using the postgres database
> data)...
> 
> Hope this can give someone some ideas
> 
> Sergio

Some years ago the idea floated around to use a sqlite database to keep
a fast access copy of the important data in /var/db/pkg, but this idea
was dismissed for "various" reasons, in particular the fact that the
base system has the Berkeley database, or that using the filesystem as a
poor man's database was a better idea.


-- 

Michel TALON

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Jos Backus
On Aug 1, 2011 7:10 AM, "Michel Talon"  wrote:
[snip]
> This being said if an upgrade tool needs to compute (partially) the INDEX,
> most of the time is spent in running  make -V   in each port,
> because make has to read and interpret enormous files. I don't see any way
to
> cut on that, or one should need to develop a special purpose version of
 make
> to evaluate these variables,  perhaps which should keep persistent
> computations between ports (but this is dangerous).

Or don't store lots of data in files in Makefile format. The make language
is a poor data storage format that doesn't allow access to that data from
other tools easily or efficiently. I'm struggling with a similar problem at
$WORK.

Jos
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Sergio de Almeida Lenzi
Hello

Even I use portmaster (a very good piece of software),
it becomes very slow when you have 1550 ports installed in your
system.

As only a few ports (about 100, in my case)  changes in a week time,
I build a database (postgres) that contains all the ports installed,
de depencies and a flag that tells me if that port needs updating
(pkg_version)
a shell script scans the ports (pkg_info | cut -d ' ' -f 1) and builds
the database once a week (can take several hours... 

Once the database is built,  an sql query (only ms...) tells me what to
do...
it then executes pkg_delete, cd /usr/ports/..., make clean all package..
and after doing all the job, it updates the postgresql database
(seconds... ).

In my case I use a central server with all the 1550 ports... and all I
do
is to install them on the slaves, (again, using the postgres database
data)...

Hope this can give someone some ideas

Sergio
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Michel Talon
Le Monday 01 August 2011, Doug wrote:
> 
> A lot of people say that, but I'll stack it up against just about any
> interpreted language. Some of my routines are actually faster than the
> equivalents in pkg_info (which is why I use them).
>

Yes, i have seen that  portmaster is quite fast. I was meaning that shell
scripting is not the clearest tool  to program complex stuff, but of course
this is dependant on each person.  As for the  pkg*  stuff  they are written 
in C, but this is irrelevant enough if they do a lot of IO, or use poorly 
performing algos.  I remember that Marc Espie said that, after having 
rewritten the OpenBSD equivalents in perl, they were both clearer and
more powerful, and much faster. The slowness gripe i have is about 
portupgrade. This is particularly obvious when running portupgrade -PP, which 
may take hours to upgrade a machine without spending any time in 
compilation. As far as i have understood the pkg* tools are presently being 
rewritten by a FreeBSD team, i hope the new tools will be much better. 
This being said if an upgrade tool needs to compute (partially) the INDEX, 
most of the time is spent in running  make -V   in each port,
because make has to read and interpret enormous files. I don't see any way to 
cut on that, or one should need to develop a special purpose version of  make
to evaluate these variables,  perhaps which should keep persistent 
computations between ports (but this is dangerous).
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Doug Barton
On 08/01/2011 01:51, Michel Talon wrote:
> Doug wrote:
>> Unfortunately the only way to improve on this would be to not do the
>> checks on a port-by-port basis, and do them all together at the end.
>> While that sounds appealing, it would dramatically increase the code
>> complexity, and also dramatically increase the chances of leaving the
>> pkg files in an inconsistent state if the process gets interrupted. I
>> don't like either one of those options.
> 
> In here i have a program which checks the +REQUIRED_BY files and
> fixes the origins in +CONTENTS
> http://www.lpthe.jussieu.fr/~talon/check_pkg.py
> proceeding globally as you describe above. It would not make a big
> difference to completely fix the +CONTENTS.

FYI, what portmaster is doing is fixing the pkgdep lines in +CONTENTS,
and updating +REQUIRED_BY as needed.

> On an old machine with around +1000 ports installed it takes of the
> order of 10-30 seconds to run. Of course this is very fast because it
> uses the information in the INDEX file.

2 problems, obviously portmaster is doing more work, and it's not using
the INDEX file by default. Without using INDEX with 600 ports installed
portmaster --check-depends takes less than a minute. Using INDEX
actually takes about 1:20, but that's because the way that portmaster
accesses the INDEX file isn't really optimized for hundreds of reads by
the same process.

> If one accepts to download the
> INDEX (like portupgrade does) this is no problem. If one wants to rebuild
> the index from the ports, it takes time, but one can build a partial
> index for the installed ports (and dependencies). This is done in
> http://www.lpthe.jussieu.fr/~talon/pkgupgrade
> and takes someting like 1-2mn on the same machine.

Either of which takes more time. :)

> So there are ways to speed up the bookeeping done by programs like
> portupgrade, portmaster, but, as you are saying, doing this job between 
> *each* port upgrade is far more time consuming.

Just to be clear, what portmaster does after installing a port is to
take care of +CONTENTS and +REQUIRED_BY only for the relevant files.
--check-depends does everything.

> Of course the complexity
> is also increased, perhaps shell scripting is not the good tool to do that

A lot of people say that, but I'll stack it up against just about any
interpreted language. Some of my routines are actually faster than the
equivalents in pkg_info (which is why I use them).


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-08-01 Thread Michel Talon
Doug wrote:
> Unfortunately the only way to improve on this would be to not do the
> checks on a port-by-port basis, and do them all together at the end.
> While that sounds appealing, it would dramatically increase the code
> complexity, and also dramatically increase the chances of leaving the
> pkg files in an inconsistent state if the process gets interrupted. I
> don't like either one of those options.

In here i have a program which checks the +REQUIRED_BY files and
fixes the origins in +CONTENTS
http://www.lpthe.jussieu.fr/~talon/check_pkg.py
proceeding globally as you describe above. It would not make a big
difference to completely fix the +CONTENTS.
On an old machine with around +1000 ports installed it takes of the
order of 10-30 seconds to run. Of course this is very fast because it
uses the information in the INDEX file. If one accepts to download the
INDEX (like portupgrade does) this is no problem. If one wants to rebuild
the index from the ports, it takes time, but one can build a partial
index for the installed ports (and dependencies). This is done in
http://www.lpthe.jussieu.fr/~talon/pkgupgrade
and takes someting like 1-2mn on the same machine.
So there are ways to speed up the bookeeping done by programs like
portupgrade, portmaster, but, as you are saying, doing this job between 
*each* port upgrade is far more time consuming. Of course the complexity
is also increased, perhaps shell scripting is not the good tool to do that
i don't know. Moreover i am not convinced that continually forking tons
of programs can be very fast, and it would be nice to be able to exploit
parallelism on modern multiproc machines.



-- 

Michel TALON

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-07-31 Thread Doug Barton
On 08/01/2011 05:09, per...@pluto.rain.com wrote:
> Andriy Gapon  wrote:
> 
>> If for X ports all the relevant data under /var/db/pkg fits into
>> fs cache, then the performance may be blazing, but once you exceed
>> the cache size the performance might become totally different.
> 
> and/or the poorly-performing system may have enough less memory than
> the other for paging/swapping to be a factor.

I may not be the smartest guy in the project, but I think that you(pl.)
can reasonably assume that I understand something as fundamental as
"data set fits in RAM means it goes fast." :)  You can also safely
assume that I understand that if portmaster's work causes the cache to
overflow, or the user gets stuck behind a combination of slow disk
and/or a small amount of RAM that performance is going to suck.

My point was simply that there isn't anything I can do about it. Making
sure that the +CONTENTS and +REQUIRED_BY files are up to date is an
important part of portmaster's core functionality.

Unfortunately the only way to improve on this would be to not do the
checks on a port-by-port basis, and do them all together at the end.
While that sounds appealing, it would dramatically increase the code
complexity, and also dramatically increase the chances of leaving the
pkg files in an inconsistent state if the process gets interrupted. I
don't like either one of those options.


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-07-31 Thread perryh
Andriy Gapon  wrote:

> If for X ports all the relevant data under /var/db/pkg fits into
> fs cache, then the performance may be blazing, but once you exceed
> the cache size the performance might become totally different.

and/or the poorly-performing system may have enough less memory than
the other for paging/swapping to be a factor.
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-07-31 Thread Andriy Gapon
on 31/07/2011 22:14 Doug Barton said the following:
> On 07/31/2011 04:19, Andriy Gapon wrote:
>> on 31/07/2011 04:32 Doug Barton said the following:
> 
>>> I am not sure what you mean by "inside portmaster" is quite accurate. I
>>> followed the instructions and everything worked according to plan. The
>>> vast majority of the wall clock time spent following these instructions
>>> is in the compilation of the various ports.
>>
>> Well, then we have different experiences and maybe environments.
>> I am quite sure that more than 1 hour of wall time was spent in portmaster
>> proper after portmaster performed upgrade of gio-fam-backend-2.28.8 and 
>> before
>> portmaster had a a chance to proceed to the next port
> 
> That's very odd. It was moments for me between each port on my middle of
> the road laptop.
> 
>> Some stats about my ports:
>> $ l /var/db/pkg/ | wc -l
>> 1088
>> $ pkg_info -R gio-fam-backend-2.28.8| wc -l
>>   27
>> $ pkg_info -R gtk-2.24.5 | wc -l
>>  132
>> $ pkg_info -R gobject-introspection-0.10.8| wc -l
>>  219
> 
> You have about twice as many ports installed as I do, and that's a lot
> depending on gobject-introspection. But still an hour is very disturbing.
> 
>> I am not complaining about the messages.
>> My complaint is about the performance of handling this case.
> 
> Understood, but I'm not sure what I can do about it unless I can
> reproduce it.

I understand.
Another thing to keep in mind is that the performance might not scale linearly
with a number of relevant ports.  If for X ports all the relevant data under
/var/db/pkg fits into fs cache, then the performance may be blazing, but once
you exceed the cache size the performance might become totally different.

-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-07-31 Thread Doug Barton
On 07/31/2011 04:19, Andriy Gapon wrote:
> on 31/07/2011 04:32 Doug Barton said the following:

>> I am not sure what you mean by "inside portmaster" is quite accurate. I
>> followed the instructions and everything worked according to plan. The
>> vast majority of the wall clock time spent following these instructions
>> is in the compilation of the various ports.
> 
> Well, then we have different experiences and maybe environments.
> I am quite sure that more than 1 hour of wall time was spent in portmaster
> proper after portmaster performed upgrade of gio-fam-backend-2.28.8 and before
> portmaster had a a chance to proceed to the next port

That's very odd. It was moments for me between each port on my middle of
the road laptop.

> Some stats about my ports:
> $ l /var/db/pkg/ | wc -l
> 1088
> $ pkg_info -R gio-fam-backend-2.28.8| wc -l
>   27
> $ pkg_info -R gtk-2.24.5 | wc -l
>  132
> $ pkg_info -R gobject-introspection-0.10.8| wc -l
>  219

You have about twice as many ports installed as I do, and that's a lot
depending on gobject-introspection. But still an hour is very disturbing.

> I am not complaining about the messages.
> My complaint is about the performance of handling this case.

Understood, but I'm not sure what I can do about it unless I can
reproduce it.


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-07-31 Thread Andriy Gapon
on 31/07/2011 04:32 Doug Barton said the following:
> On 07/30/2011 12:38, Andriy Gapon wrote:
>>> 20110730:
>>>   AFFECTS: users of x11-toolkits/gtk20
>>>   AUTHOR: gn...@freebsd.org
>>>
>>>   The gtk-update-icon-cache utility has been slipt out of the gtk20 port.
>>
>> A minor typo in the above line - slipt -> split.
>>
>>>   Use the following instructions to update your system.
>>>   
>>>   # pkg_delete -f gtk-2.\*
>>>   # portmaster x11-toolkits/gtk20
>>
>> I would like to warn other users and at the same time ask for alternative
>> instructions.
> 
> I don't think that's necessary.

Well, I decided to report what I experienced firsthand.

>> I have a regular (consumer) HDD and not so huge amount of RAM.
>> I also have many (maybe very many) ports depending on gtk20 and some other
>> loosely related ports like glib and gobject-introspection.
>> Execution of the above command already takes more than an hour which is spent
>> inside portmaster. 
> 
> I am not sure what you mean by "inside portmaster" is quite accurate. I
> followed the instructions and everything worked according to plan. The
> vast majority of the wall clock time spent following these instructions
> is in the compilation of the various ports.

Well, then we have different experiences and maybe environments.
I am quite sure that more than 1 hour of wall time was spent in portmaster
proper after portmaster performed upgrade of gio-fam-backend-2.28.8 and before
portmaster had a a chance to proceed to the next port - I pressed  ^C at that
moment.  I pressed ^T quite a few times during that hour and portmaster was
actually running grep or pkg_info at those times, mostly pkg_info.  E.g.:
load: 0.25  cmd: pkg_info 49079 [zio->io_cv)] 10.83r 0.01u 0.25s 1% 2856k
load: 0.23  cmd: pkg_info 49093 [zio->io_cv)] 4.13r 0.00u 0.09s 0% 2660k
load: 0.29  cmd: grep 49324 [zio->io_cv)] 1.37r 0.00u 0.03s 0% 1756k

Some stats about my ports:
$ l /var/db/pkg/ | wc -l
1088
$ pkg_info -R gio-fam-backend-2.28.8| wc -l
  27
$ pkg_info -R gtk-2.24.5 | wc -l
 132
$ pkg_info -R gobject-introspection-0.10.8| wc -l
 219

> Very very little is actually
> spent "in portmaster" in the sense of time spent by portmaster
> performing its functions.
> 
>> I have hundreds of lines like the following in portmaster output:
>>
>> ===>>> x11-toolkits/gtk20 is listed as a dependency
>> ===>>> but there is no installed version
> 
> Yes, that's to be expected since it's accurate. :)  Every time
> portmaster installs a port it updates the +CONTENTS and +REQUIRED_BY
> files as appropriate. If the condition described above exists it lets
> you know, but since this is almost always a transient error it continues
> processing which is usually what is necessary to correct the problem
> anyway.
> 
> I've considered adding code to avoid the spurious warnings but they are
> harmless and don't happen very often so I haven't bothered.
> 
> In short, I don't think there is anything wrong here.

I am not complaining about the messages.
My complaint is about the performance of handling this case.

Here's what I did after ^C.
$ cd /usr/ports/devel/gobject-introspection
$ make install
$ cd /usr/ports/x11-toolkits/gtk20
$ make install
$ portmaster x11-toolkits/gtk20 devel/gobject-introspection

The last portmaster command decided to upgrade almost the same set of ports and
did that much much faster in my environment.
Here's what the original portmaster run intended to do:
===>>> The following actions will be taken if you choose to proceed:
Install x11-toolkits/gtk20
Upgrade atk-1.32.0 to atk-2.0.1
Upgrade gio-fam-backend-2.26.1 to gio-fam-backend-2.28.8
Upgrade glib-2.26.1_1 to glib-2.28.8
Upgrade gobject-introspection-0.9.12_1 to gobject-introspection-0.10.8
Upgrade gdk-pixbuf-2.22.1 to gdk-pixbuf-2.23.5
Install graphics/gtk-update-icon-cache
Upgrade pango-1.28.3 to pango-1.28.4

Here's what portmaster intended to do on the second run:
===>>> The following actions will be taken if you choose to proceed:
Re-install gtk-2.24.5
Upgrade atk-1.32.0 to atk-2.0.1
Re-install gobject-introspection-0.10.8
Upgrade gdk-pixbuf-2.22.1 to gdk-pixbuf-2.23.5
Upgrade pango-1.28.3 to pango-1.28.4

I am not sure how to distill the above into a minimalistic test-case.
But it seems to me that portmaster spends too much time churning away when there
are a lot of installed ports/packages with a missing dependency.
I guess it's something in update_contents() or iport_from_origin() or in code
that calls update_contents().


-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


Re: UPDATING 20110730

2011-07-30 Thread Doug Barton
On 07/30/2011 12:38, Andriy Gapon wrote:
>> 20110730:
>>   AFFECTS: users of x11-toolkits/gtk20
>>   AUTHOR: gn...@freebsd.org
>>
>>   The gtk-update-icon-cache utility has been slipt out of the gtk20 port.
> 
> A minor typo in the above line - slipt -> split.
> 
>>   Use the following instructions to update your system.
>>   
>>   # pkg_delete -f gtk-2.\*
>>   # portmaster x11-toolkits/gtk20
> 
> I would like to warn other users and at the same time ask for alternative
> instructions.

I don't think that's necessary.

> I have a regular (consumer) HDD and not so huge amount of RAM.
> I also have many (maybe very many) ports depending on gtk20 and some other
> loosely related ports like glib and gobject-introspection.
> Execution of the above command already takes more than an hour which is spent
> inside portmaster. 

I am not sure what you mean by "inside portmaster" is quite accurate. I
followed the instructions and everything worked according to plan. The
vast majority of the wall clock time spent following these instructions
is in the compilation of the various ports. Very very little is actually
spent "in portmaster" in the sense of time spent by portmaster
performing its functions.

> I have hundreds of lines like the following in portmaster output:
> 
> ===>>> x11-toolkits/gtk20 is listed as a dependency
> ===>>> but there is no installed version

Yes, that's to be expected since it's accurate. :)  Every time
portmaster installs a port it updates the +CONTENTS and +REQUIRED_BY
files as appropriate. If the condition described above exists it lets
you know, but since this is almost always a transient error it continues
processing which is usually what is necessary to correct the problem
anyway.

I've considered adding code to avoid the spurious warnings but they are
harmless and don't happen very often so I haven't bothered.

In short, I don't think there is anything wrong here.


Doug

-- 

Nothin' ever doesn't change, but nothin' changes much.
-- OK Go

Breadth of IT experience, and depth of knowledge in the DNS.
Yours for the right price.  :)  http://SupersetSolutions.com/

___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"


UPDATING 20110730

2011-07-30 Thread Andriy Gapon
> 20110730:
>   AFFECTS: users of x11-toolkits/gtk20
>   AUTHOR: gn...@freebsd.org
> 
>   The gtk-update-icon-cache utility has been slipt out of the gtk20 port.

A minor typo in the above line - slipt -> split.

>   Use the following instructions to update your system.
>   
>   # pkg_delete -f gtk-2.\*
>   # portmaster x11-toolkits/gtk20

I would like to warn other users and at the same time ask for alternative
instructions.

I have a regular (consumer) HDD and not so huge amount of RAM.
I also have many (maybe very many) ports depending on gtk20 and some other
loosely related ports like glib and gobject-introspection.
Execution of the above command already takes more than an hour which is spent
inside portmaster.  I have hundreds of lines like the following in portmaster
output:

===>>> x11-toolkits/gtk20 is listed as a dependency
===>>> but there is no installed version

===>>> Try portmaster --check-depends

===>>> devel/gobject-introspection is listed as a dependency
===>>> but there is no installed version

===>>> Try portmaster --check-depends

===>>> devel/gobject-introspection is listed as a dependency
===>>> but there is no installed version

===>>> Try portmaster --check-depends

This carpet of output starts with:
===>>> Updating dependency entry for gio-fam-backend-2.28.8 in each dependent 
port

>   # portmaster -a


-- 
Andriy Gapon
___
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"