[Mono-dev] Question - pass a socket between processes

2013-02-08 Thread pablosantosl...@terra.es

  
  
Hi there,
  
  I'm trying to pass a socket from a process to another one, in
  order to create a front-end server and a back-end server of
  Plastic SCM.
  
  Well, I'm able to do that (thanks to Dick Porter) using the
  following:
  
   new Socket(AddressFamily.Unix, SocketType.Dgram,
  ProtocolType.IP);
  
  then running "sendmsg" with the SCM_RIGHTS set.
  
  I'm able to create a UnixStream from the file descriptor of the socket,
  then use it as a stream.
  
  The thing is I'd like to use it as a Socket so that I can use the
  Socket.BeginReceive method and take advantage of the underlying
  "epoll" stuff.
  
  Is it possible?
  
  I tried using 
  
   si.ProtocolInformation = DataConverter.Pack(
   "l",
   (int)AddressFamily.InterNetwork,
   (int)SocketType.Stream,
   (int)ProtocolType.Tcp,
   /*isbound*/ (int)1,
   (long)fd);
  
   Socket result = new Socket(si);
  
  But it seems the trick doesn't work :P
  
  Ideas will be more than welcome!
  
  Thanks,
  
  pablo
  
  
  www.plasticscm.com
  

  

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Question about NetworkStream.BeginRead

2012-03-25 Thread pablosantosl...@terra.es
I will try to post my findings optimizing the Tcp Channel.

Basically, a huge boost is possible, under heavy load (100 concurrent
connections, tested with 1200, 1500 and so on), making the initial read
async, so you decouple conns from server threads, even if the rest of
the message reading is sync. This is step one.

Next is clearly limiting the number of worker threads: do not attend the
request on the same IOCP thread or threadpool thread but with an
specific pool of worker threads, so you're attending all requests with
2,3 threads per core, not more. A server with 300-400 or more threads is
only making things even worse.

On 16/03/2012 19:08, gelin yan wrote:
 
 
 On Sat, Mar 17, 2012 at 2:03 AM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Ok: the problem is that I was wrapping the NetworkStream with a
 BufferedStream, and BufferedStream is not async in Mono, while it is
 async in .NET
 
 :(
 
 
 
 On 16/03/2012 16:57, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
  Hi,
 
  I'm working on some changes to make the TcpChannel work in async mode.
 
  Instead of changing all the reads and writes to async, I'm just
  modifying the intial message status read to async, so instead of
 having
  a pile of threads waiting for IO on the server (waiting for clients to
  call or disconnect), there will be only as few threads as running
 methods.
 
  It works great on Windows even under huge load (I'm testing on a
  100-nodes cluster on EC2).
 
  But, now, trying on Linux simply fails because this call:
 
  networkStream.BeginRead(buffer, 0, 6, callback, null);
 
  where networkStream is System.Net.Sockets.NetworkStream
 
  locks.
 
  What it actually does is to block and then invoke the callback, but it
  doesn't go through until the callback finishes, which I think is
 not the
  desired behavior.
 
  I'm running:
  Mono JIT compiler version 2.10.2 (tarball Mon Apr 18 15:12:52 UTC
 2011)
  Copyright (C) 2002-2011 Novell, Inc and Contributors.
 www.mono-project.com http://www.mono-project.com
  TLS:   __thread
  SIGSEGV:   altstack
  Notifications: epoll
  Architecture:  amd64
  Disabled:  none
  Misc:  debugger softdebug
  LLVM:  yes(2.9svn-mono)
  GC:Included Boehm (with typed GC and Parallel Mark)
 
  It fails with older monos too.
 
  Obviously I'm doing something wrong.
 
  Is there a way I can fix it?
 
  Thanks,
 
  pablo
  ___
  Mono-devel-list mailing list
  Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
  http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
 Hi.. Is it possible to post some benchmarks for that once you fixed your
 bugs.  I am interested in using async socket with mono on Linux..thx.
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Question about NetworkStream.BeginRead

2012-03-16 Thread pablosantosl...@terra.es
Hi,

I'm working on some changes to make the TcpChannel work in async mode.

Instead of changing all the reads and writes to async, I'm just
modifying the intial message status read to async, so instead of having
a pile of threads waiting for IO on the server (waiting for clients to
call or disconnect), there will be only as few threads as running methods.

It works great on Windows even under huge load (I'm testing on a
100-nodes cluster on EC2).

But, now, trying on Linux simply fails because this call:

networkStream.BeginRead(buffer, 0, 6, callback, null);

where networkStream is System.Net.Sockets.NetworkStream

locks.

What it actually does is to block and then invoke the callback, but it
doesn't go through until the callback finishes, which I think is not the
desired behavior.

I'm running:
Mono JIT compiler version 2.10.2 (tarball Mon Apr 18 15:12:52 UTC 2011)
Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
TLS:   __thread
SIGSEGV:   altstack
Notifications: epoll
Architecture:  amd64
Disabled:  none
Misc:  debugger softdebug
LLVM:  yes(2.9svn-mono)
GC:Included Boehm (with typed GC and Parallel Mark)

It fails with older monos too.

Obviously I'm doing something wrong.

Is there a way I can fix it?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Question about NetworkStream.BeginRead

2012-03-16 Thread pablosantosl...@terra.es
Ok: the problem is that I was wrapping the NetworkStream with a
BufferedStream, and BufferedStream is not async in Mono, while it is
async in .NET

:(



On 16/03/2012 16:57, pablosantosl...@terra.es wrote:
 Hi,
 
 I'm working on some changes to make the TcpChannel work in async mode.
 
 Instead of changing all the reads and writes to async, I'm just
 modifying the intial message status read to async, so instead of having
 a pile of threads waiting for IO on the server (waiting for clients to
 call or disconnect), there will be only as few threads as running methods.
 
 It works great on Windows even under huge load (I'm testing on a
 100-nodes cluster on EC2).
 
 But, now, trying on Linux simply fails because this call:
 
 networkStream.BeginRead(buffer, 0, 6, callback, null);
 
 where networkStream is System.Net.Sockets.NetworkStream
 
 locks.
 
 What it actually does is to block and then invoke the callback, but it
 doesn't go through until the callback finishes, which I think is not the
 desired behavior.
 
 I'm running:
 Mono JIT compiler version 2.10.2 (tarball Mon Apr 18 15:12:52 UTC 2011)
 Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
 TLS:   __thread
 SIGSEGV:   altstack
 Notifications: epoll
 Architecture:  amd64
 Disabled:  none
 Misc:  debugger softdebug
 LLVM:  yes(2.9svn-mono)
 GC:Included Boehm (with typed GC and Parallel Mark)
 
 It fails with older monos too.
 
 Obviously I'm doing something wrong.
 
 Is there a way I can fix it?
 
 Thanks,
 
 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] System.Runtime.Remoting.Channels.Tcp upgrade to Async

2012-03-11 Thread pablosantosl...@terra.es
I think Dick's async channel was never integrated.

Any interest out there on relaunching it?? Maybe integrating the code +
a blog post?? Makes sense?

On 23/02/2012 16:00, Robert Jordan wrote:
 Hi Pablo,
 
 On 23.02.2012 14:17, pablosantosl...@terra.es wrote:
 Hi there,

 As far as I see here:

 https://github.com/mono/mono/tree/master/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp


 the good old TCP channel has been largely untouched for about 4 years
 now.

 We use it on a daily basis in Plastic SCM (with some tweaks) but I
 wonder if there's interest in converting it into Async sockets.

 We're considering it right now, but my question is also: do you think
 remoting is dead and should stay this way? Any better alternative?
 
 Remoting won't die anytime soon because it's a core part of the
 AppDomain machinery (I'm still using it in new projects whenever
 cross-framework compatibility isn't necessary and where security
 can be handled by another layer).
 
 About yours (or Dick Porter's?) Async patch: The problem is there
 aren't any Remoting maintainers left. I did it in the past
 (mostly bug fixing), but I'm starting to forget about the details ;)
 
 If you want this patch in Mono, you'd have to maintain at least
 the TcpChannel (monitoring Bugzilla, etc.).
 
 OTOH, given how plugable Remoting is, it would be easier to maintain
 your own AsycTcpChannel instead of risking a maintenance burden...
 
 Robert
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] System.Runtime.Remoting.Channels.Tcp upgrade to Async

2012-02-24 Thread pablosantosl...@terra.es
I'm thinking on a slightly modified version since the pure async one
wasn't able to improve perf. under heavy load.

We're currently trying on EC2 with 500 concurrent version control
clients against a single Plastic SCM server, and reducing thread count
and such will help :)

On 23/02/2012 16:00, Robert Jordan wrote:
 Hi Pablo,
 
 On 23.02.2012 14:17, pablosantosl...@terra.es wrote:
 Hi there,

 As far as I see here:

 https://github.com/mono/mono/tree/master/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp


 the good old TCP channel has been largely untouched for about 4 years
 now.

 We use it on a daily basis in Plastic SCM (with some tweaks) but I
 wonder if there's interest in converting it into Async sockets.

 We're considering it right now, but my question is also: do you think
 remoting is dead and should stay this way? Any better alternative?
 
 Remoting won't die anytime soon because it's a core part of the
 AppDomain machinery (I'm still using it in new projects whenever
 cross-framework compatibility isn't necessary and where security
 can be handled by another layer).
 
 About yours (or Dick Porter's?) Async patch: The problem is there
 aren't any Remoting maintainers left. I did it in the past
 (mostly bug fixing), but I'm starting to forget about the details ;)
 
 If you want this patch in Mono, you'd have to maintain at least
 the TcpChannel (monitoring Bugzilla, etc.).
 
 OTOH, given how plugable Remoting is, it would be easier to maintain
 your own AsycTcpChannel instead of risking a maintenance burden...
 
 Robert
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] System.Runtime.Remoting.Channels.Tcp upgrade to Async

2012-02-23 Thread pablosantosl...@terra.es
Hi there,

As far as I see here:

https://github.com/mono/mono/tree/master/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp

the good old TCP channel has been largely untouched for about 4 years now.

We use it on a daily basis in Plastic SCM (with some tweaks) but I
wonder if there's interest in converting it into Async sockets.

We're considering it right now, but my question is also: do you think
remoting is dead and should stay this way? Any better alternative?

We use it because:
- It give us high perf (binary serialization, custom serialization of
types all the time and so on)
- It works like a charm between windows/linux/mac/solaris



Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] monodevelop site is down

2011-05-30 Thread pablosantosl...@terra.es
Hi,

Sorry if I'm posting to the wrong list but I can't find Lluis anymore
(his novell email seems to be gone).

Just let you know that monodevelop.com is down, so people trying to get
2.6 will be in trouble

http://monodevelop.com/index.php?title=Download/What's_new_in_MonoDevelop_2.6

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] TFS code

2011-03-13 Thread pablosantosl...@terra.es
Hi there,

Looong ago I remember I read some Team Foundation Server client code was
developed and uploaded to the mono repo.

Since we're heavily working on Plastic SCM interop with TFS, Git and
others, I'd like to use the TFS Client code to access TFS.

Where is it located? I can't find it under olive where I remember it
was located...

Thanks,

pablo


www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Mono WinForms running on Solaris 11... great!

2010-12-16 Thread pablosantosl...@terra.es
Hi there,

Yes, it's me again talking about Solaris... this time, MWF on Solaris
11. It seems the latest version got rid of some well-known X problems:

http://www.facebook.com/album.php?aid=253265id=8260127524saved

Enjoy!

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Mono 2.8 with sgen on Solaris 10 SPARC

2010-12-15 Thread pablosantosl...@terra.es
Hi all,

Just wanted to let you know that our main internal Plastic SCM server
has been running now for more than 1 month without issues on Solaris
SPARC using Mono 2.8 and sgen!

Cheers,

pablo

www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Some screenshots of Mono on Solaris

2010-10-19 Thread pablosantosl...@terra.es
Hi guys,

Please check this:
http://codicesoftware.blogspot.com/2010/10/welcome-crazy-monkeys-mono-on-solaris.html
for some MWF screenshots on Solaris 10.

We've already uploaded the new 2.8 Solaris 10 SPARC package and
OpenSolaris x86 package to the mono site so I guess they'll get
published soon. Dick is working on Solaris 10 x86 packages too.

Enjoy ;)

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] UnixUserInfo issues in OpenBSD

2010-10-18 Thread pablosantosl...@terra.es
Hi,

I got the same issue (Mono/C#) running as root.

On 18/10/2010 0:44, Robert Nagy wrote:
 Ignore that diff i just sent, it's stupid, i did not read
 the code correctly. Working on something that fixes the problem
 correctly.
 
 On (2010-10-18 00:22), Robert Nagy wrote:
 You get errno 13 (EACCES) because you are not running it as root
 and getpwnam_r will try to give you struct passwd which inludes
 the encrypted password of the user so errno will be set to EACCES,
 but the other fields will be set.

 According to the comment in mph.h getpnam_r only returns ERANGE on
 linux and -1 on Mac OS, bt errno == ERANGE was wrong anyways.
 On OpenBSD we return 1 until everything is okay and then we return 0.
 The following diff fixes OpenBSD and Mac OS too.

 diff --git a/support/mph.h b/support/mph.h
 index 8a61999..08ce5ea 100644
 --- a/support/mph.h
 +++ b/support/mph.h
 @@ -198,8 +198,8 @@ recheck_range (int ret)
  {
 if (ret == ERANGE)
 return 1;
 -   if (ret == -1)
 -   return errno == ERANGE;
 +   if (ret != 0)
 +   return errno = ERANGE;
 return 0;
  }
  
 On (2010-10-13 12:56), Jonathan Pryor wrote:
 On Wed, 2010-10-13 at 16:38 +0200, pablosantosl...@terra.es wrote:
 This is what I get:

 $ ./a.out tester
 # checking return value 1; errno=13

 That's...horribly wrong.

 First, what's errno=13?  (i.e. what EVALUE is 13?  I'm sure OpenBSD has
 different values than Linux does.)

 Regardless, OpenBSD doesn't appear to be conforming to the standard
 here:

 
 http://www.opengroup.org/onlinepubs/009695399/functions/getpwnam_r.html

 If successful, the getpwnam_r() function shall return zero;
 otherwise, an error number shall be returned to indicate the
 error. 

 The value '1' is likely not the correct errno for ERANGE (Under Linux,
 EPERM has the value 1), and since the return value isn't -1
 recheck_range() won't check errno against ERANGE either.

 However, this does point out a bug in MonoPosixHelper: if getpwnam_r()
 returns non-zero it should treat it as an error, which is clearly not
 happening here (and is why we're printing garbage data to the screen).

 This would only marginally help you, though, as it would result in no
 users being found, ever.

 The fundamental problem is that Mono_Posix_Syscall_getpwnam_r()'s logic
 for checking for ERANGE (so it'll resize the buffer and try the call
 again) is failing under OpenBSD, and from what I can see here the
 problem is within OpenBSD, not MonoPosixHelper.

 Patches welcome to properly support OpenBSD. :-)

  - Jon


 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] UnixUserInfo issues in OpenBSD

2010-10-13 Thread pablosantosl...@terra.es
Hi all,

The following simple program fails on OpenBSD:

using System;
using Mono.Unix;

public class Info
{

public static void Main()
{
Console.WriteLine(Environment.UserName);
Console.WriteLine(new
UnixUserInfo(Environment.UserName).UserName);
Console.WriteLine(UnixUserInfo.GetRealUser().UserName);
}
}


Environment.UserName retrieves the right user.


The two next calls fail saying invalid param:

  Console.WriteLine(new UnixUserInfo(Environment.UserName).UserName);
  Console.WriteLine(UnixUserInfo.GetRealUser().UserName);

It seems the problem is the return of the native method getpwuid_r, that
returns 1 instead of 0.

I tried running as root to (suspected it could be a permissions issue)
but I get the same result.

I thought it could be related to an old issue with UnixGroupInfo which
fails if the groups are incorrectly defined (have unexisting users) but
I think this time my config files are correctly set... :O

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] UnixUserInfo issues in OpenBSD

2010-10-13 Thread pablosantosl...@terra.es
Reading your C code I see once more how powerful C# is... :P

This is what I get:

$ ./a.out tester
# checking return value 1; errno=13
User tester:
 pw_name=ÇEðÄ
À
 ¢
  pw_uid=752427404
  pw_gid=-809631572
pw_gecos=(null)
  pw_dir=(null)
pw_shell=UåSj


$ ./a.out pablo
# checking return value 1; errno=13
User pablo:
 pw_name=ÇEðÄ
À
 ¢
  pw_uid=656871820
  pw_gid=-809738964
pw_gecos=(null)
  pw_dir=(null)
pw_shell=UåSj


We're getting an errno in both cases...

OpenBSD is a cool beast! :P



On 13/10/2010 15:29, Jonathan Pryor wrote:
 I have no idea why it's failing.  Sorry.
 
 What I can do is send you a C program which closely mirrors what
 Mono.Unix is doing.  Could you compile and run it, and see if it fails
 in the same ways?  The program source is attached.
 
  - Jon
 
 On Wed, 2010-10-13 at 10:43 +0200, pablosantosl...@terra.es wrote:
 Hi all,

 The following simple program fails on OpenBSD:

 using System;
 using Mono.Unix;

 public class Info
 {

 public static void Main()
 {
 Console.WriteLine(Environment.UserName);
 Console.WriteLine(new
 UnixUserInfo(Environment.UserName).UserName);
 Console.WriteLine(UnixUserInfo.GetRealUser().UserName);
 }
 }


 Environment.UserName retrieves the right user.


 The two next calls fail saying invalid param:

   Console.WriteLine(new UnixUserInfo(Environment.UserName).UserName);
   Console.WriteLine(UnixUserInfo.GetRealUser().UserName);

 It seems the problem is the return of the native method getpwuid_r, that
 returns 1 instead of 0.

 I tried running as root to (suspected it could be a permissions issue)
 but I get the same result.

 I thought it could be related to an old issue with UnixGroupInfo which
 fails if the groups are incorrectly defined (have unexisting users) but
 I think this time my config files are correctly set... :O

 Thanks,

 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Memory usage differences between GC and OS

2010-10-12 Thread pablosantosl...@terra.es
Hi all,

I could have titled it where my mem has gone? too :P

I've been talking to Mark Probst today regarding some issues and
questions related to general memory usage.

We've been testing sgen for months now and we're currently moving our
internal production server to Solaris/SPARC  Mono/sgen
(MONO_GC_PARAMS=major=copying), after being able to complete our entire
PNUnit suite on SPARC.

Well, the point of the email is the following: something I've found
several times is a situation where GC.GetTotalMemory gives me something
like, let's say, 40Mb, then VIRT is something like 200Mb and RES is 80Mb.

Mark refreshed me that jitted and non-jitted code will be eating up
memory, then metadata and so on... and of course the GC internals with
things like free memory lists and so on. But, I think it would be great
for application developers to really understand how this is working and
where your memory is going, because the diff between 40Mb and 200Mb is
simply... huge!

Sometimes you find yourself calculating the mem your classes are going
to eat, to find out that you're spending more on the uncontrolled
part than the one you were carefully designing.

On Windows you can use things like Ants memory Profiler to help you
figuring out (and most of the time you encounter a HUGE free mem block),
but I think it would be great to understand it too on Mono and maybe
even be able to tweak it somehow...

Boehm GC had the drawback of being unable to free VIRT mem (something we
had to fight several times ourselves with Plastic and huge servers), but
fortunately that's not the case with sgen, but we still end up with big
differences between what gc thinks and what OS thinks.

Regards,

pablo


www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage differences between GC and OS

2010-10-12 Thread pablosantosl...@terra.es
Hi Andreas,

 As you wrote: That 200Mb isn't memory! It is address space.
 And as you have about 17592186044416 Mb of address space available on a
 64-bit system 200MB isn't much to worry about.

Yep, ok, there's a longer story behind: we worked close to the Mono team
figuring out several issues in Boehm in the past, specially detecting
situations where the lousy way to detect objects it uses is able to mess
up the whole thing in seconds and doing something as easy as introducing
a long in the stack (passing it as a parameter) ends up with your app
eating 1GB of RAM in a second. Fortunately it is not so dramatic with
64bits systems.

The thing is: yes, I wouldn't care about VIRT that much but since Boehm
doesn't do a very decent work, at the end your real mem keeps growing
because GC thinks there's no free mem and so on... Which ends up being a
problem.

When I start up the process I was talking about, and run a few test
iterations, it only needs like 70-80Mb, so I guess all the assemblies
are already memmapped here, problem is, as I mention, that it keeps
growing, and growing, and growing. And no, it's not due to assembly
loading. And it doesn't grow with .NET GC either (on Windows), not at
least at the same pace.

So, yes, it's not about being concerned by a few Mb here or there, it's
about being able to keep real systems running understanding what the
memory is being spent on, when GC tells you it's using 1GB but VIRT
points to 3Gb and RES to 1.8Gb... These are basically the situations I'm
concerned about, the 200Mb ones was just a simple example.

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Git faq updated with workflows

2010-08-05 Thread pablosantosl...@terra.es
Hi all,

I've just posted a very detailed entry describing branch per task.

http://codicesoftware.blogspot.com/2010/08/branch-per-task-workflow-explained.html

I didn't specifically talk about Plastic so it's perfectly doable with
Git too.

pablo

On 29/07/2010 13:17, pablosantosl...@terra.es wrote:
 All,
 
 I'd strongly recommend you separate every task (every entry on bugzilla)
 on a separated branch.
 
 I'm very used to it since this is the way we work internally in Plastic
 (and what we do recommend to all our customers). It gives you perfect
 traceability and flexibility to handle all changes.
 
 Git is perfectly capable of handling high number of branches (as plastic
 is too, something you didn't have with SVN), so I think this one is a
 perfect solution.
 
 Basically it means: you'll be using branches instead of commits as
 unit of change.
 
 Hope it helps,
 
 pablo
 
 On 29/07/2010 3:52, Andreia Gaita wrote:
 I've added a couple of simple workflows to our git faq,
 http://www.mono-project.com/GitFAQ#Workflow . See if these work for
 you, they should make it easier to avoid merge commits. There are
 plenty of ways to do things, and these don't include working on forks,
 although it's not too different. More to come later, opinions welcome.

 andreia gaita
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Git faq updated with workflows

2010-07-29 Thread pablosantosl...@terra.es
All,

I'd strongly recommend you separate every task (every entry on bugzilla)
on a separated branch.

I'm very used to it since this is the way we work internally in Plastic
(and what we do recommend to all our customers). It gives you perfect
traceability and flexibility to handle all changes.

Git is perfectly capable of handling high number of branches (as plastic
is too, something you didn't have with SVN), so I think this one is a
perfect solution.

Basically it means: you'll be using branches instead of commits as
unit of change.

Hope it helps,

pablo

On 29/07/2010 3:52, Andreia Gaita wrote:
 I've added a couple of simple workflows to our git faq,
 http://www.mono-project.com/GitFAQ#Workflow . See if these work for
 you, they should make it easier to avoid merge commits. There are
 plenty of ways to do things, and these don't include working on forks,
 although it's not too different. More to come later, opinions welcome.
 
 andreia gaita
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Migration to GitHub completed!

2010-07-28 Thread pablosantosl...@terra.es
Hi all,

So, now instead of a svn checkout, in order to build from sources,
should we type something like the following?

git clone git://github.com/mono/mono.git

Is that correct?

I guess not really since it's downloading the entire mono repo, which is
a terrible overkill, isn't it??

Thanks,

pablo


On 23/07/2010 8:38, Raja R Harinath wrote:
 Hi,
 
 pablosantosl...@terra.es pablosantosl...@terra.es writes:
 
 Congrats Gonzalo!!!

 Question: how long did the import take??
 
 The actual import run takes about 2-3 hours.  The whole process of
 debugging and fixing the import tool, fine-tuning the import, figuring
 out mappings between SVN committers and GitHub accounts, etc. took about
 a month.
 
 - Hari
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Migration to GitHub completed!

2010-07-28 Thread pablosantosl...@terra.es
Hi Alan,

But, now I'm downloading the entire history of mono instead of a single
copy of 'master', right?

pablo

On 28/07/2010 11:24, Alan wrote:
 Hey,
 
 On Wed, Jul 28, 2010 at 10:21 AM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Hi all,
 
 So, now instead of a svn checkout, in order to build from sources,
 should we type something like the following?
 
 git clone git://github.com/mono/mono.git
 http://github.com/mono/mono.git
 
 Is that correct?
 
 
 Yes, this is correct. The download size is a bit bigger than with svn
 but not significantly so. Note that this single repo is the combination
 of the old 'mono' and 'mcs' modules which were in SVN. You don't have to
 make two separate checkouts anymore.
 
 Alan
 
  
 
 I guess not really since it's downloading the entire mono repo, which is
 a terrible overkill, isn't it??
 
 Thanks,
 
 pablo
 
 
 On 23/07/2010 8:38, Raja R Harinath wrote:
  Hi,
 
  pablosantosl...@terra.es mailto:pablosantosl...@terra.es
 pablosantosl...@terra.es mailto:pablosantosl...@terra.es writes:
 
  Congrats Gonzalo!!!
 
  Question: how long did the import take??
 
  The actual import run takes about 2-3 hours.  The whole process of
  debugging and fixing the import tool, fine-tuning the import, figuring
  out mappings between SVN committers and GitHub accounts, etc. took
 about
  a month.
 
  - Hari
 
  ___
  Mono-devel-list mailing list
  Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
  http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Migration to GitHub completed!

2010-07-28 Thread pablosantosl...@terra.es
Excellent!

On 28/07/2010 11:32, Jérémie Laval wrote:
 Yes you are but if you aren't interested in contributing with this
 repository (no pushing or pulling from) you can pass the --depth
 1 switch to git clone which will only fetch one revision (that is HEAD).
 You will still be able to pull from github but that's pretty much it.
 
 --
 Jérémie Laval
 jeremie.la...@gmail.com mailto:jeremie.la...@gmail.com
 http://neteril.org
 
 
 On Wed, Jul 28, 2010 at 11:26 AM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Hi Alan,
 
 But, now I'm downloading the entire history of mono instead of a single
 copy of 'master', right?
 
 pablo
 
 On 28/07/2010 11:24, Alan wrote:
  Hey,
 
  On Wed, Jul 28, 2010 at 10:21 AM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es
  mailto:pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es
  mailto:pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
  Hi all,
 
  So, now instead of a svn checkout, in order to build from sources,
  should we type something like the following?
 
  git clone git://github.com/mono/mono.git
 http://github.com/mono/mono.git
  http://github.com/mono/mono.git
 
  Is that correct?
 
 
  Yes, this is correct. The download size is a bit bigger than with svn
  but not significantly so. Note that this single repo is the
 combination
  of the old 'mono' and 'mcs' modules which were in SVN. You don't
 have to
  make two separate checkouts anymore.
 
  Alan
 
 
 
  I guess not really since it's downloading the entire mono
 repo, which is
  a terrible overkill, isn't it??
 
  Thanks,
 
  pablo
 
 
  On 23/07/2010 8:38, Raja R Harinath wrote:
   Hi,
  
   pablosantosl...@terra.es mailto:pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es mailto:pablosantosl...@terra.es
  pablosantosl...@terra.es mailto:pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es mailto:pablosantosl...@terra.es
 writes:
  
   Congrats Gonzalo!!!
  
   Question: how long did the import take??
  
   The actual import run takes about 2-3 hours.  The whole
 process of
   debugging and fixing the import tool, fine-tuning the
 import, figuring
   out mappings between SVN committers and GitHub accounts,
 etc. took
  about
   a month.
  
   - Hari
  
   ___
   Mono-devel-list mailing list
   Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
  mailto:Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
   http://lists.ximian.com/mailman/listinfo/mono-devel-list
  
  ___
  Mono-devel-list mailing list
  Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
  mailto:Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
  http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Playing with Mono.Terminal, no success

2010-05-20 Thread pablosantosl...@terra.es
Hi,

Any updates on this?

Thanks,

pablo

On 11/05/2010 9:21, pablosantosl...@terra.es wrote:
 Hi Miguel,
 
 Well, here's my code (I tried a different example than the one sent before)
 
 using System;
 using Mono.Terminal;
 
 namespace clustermgr
 {
 class MainClass
 {
 public static void Main(string[] args)
 {
 Application.Init(false);
 Dialog d = new Dialog (40, 8, Print);
 Button b = new Button (All Pages);
 b.Clicked += delegate {
d.Running = false;
 };
 d.AddButton (b);
 
 b = new Button (Current Page);
 b.Clicked += delegate {
 d.Running = false;
 };
 d.AddButton (b);
 
 Application.Iteration += delegate {
 Application.Refresh();
 };
 
 Application.Run(d);
 }
 }
 }
 
 Problem is that the app ends immediately, I don't see anything on the
 screen... Maybe I'm just misunderstanding the whole thing, I don't know...
 
 pablo
 
 
 On 10/05/2010 20:33, Miguel de Icaza wrote:
 Hello,

 I'm trying the simple sample at: http://www.mono-project.com/MonoCurses

   Application.Init (false);
Dialog d = new Dialog (40, 8, Hello);

d.Add (new Label (0, 0, Hello World));
Application.Run (d);

 on an OpenSuse box.

 But it doesn't work for me, it just exits and breaks the terminal... :-(

 Run your program like this to make sure it does not leave you in a
 broken state:

 mono sample.exe; stty sane

 Please post a full sample and I'll take a look at it.


 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Playing with Mono.Terminal, no success

2010-05-11 Thread pablosantosl...@terra.es
Hi Miguel,

Well, here's my code (I tried a different example than the one sent before)

using System;
using Mono.Terminal;

namespace clustermgr
{
class MainClass
{
public static void Main(string[] args)
{
Application.Init(false);
Dialog d = new Dialog (40, 8, Print);
Button b = new Button (All Pages);
b.Clicked += delegate {
   d.Running = false;
};
d.AddButton (b);

b = new Button (Current Page);
b.Clicked += delegate {
d.Running = false;
};
d.AddButton (b);

Application.Iteration += delegate {
Application.Refresh();
};

Application.Run(d);
}
}
}

Problem is that the app ends immediately, I don't see anything on the
screen... Maybe I'm just misunderstanding the whole thing, I don't know...

pablo


On 10/05/2010 20:33, Miguel de Icaza wrote:
 Hello,
 
 I'm trying the simple sample at: http://www.mono-project.com/MonoCurses

   Application.Init (false);
Dialog d = new Dialog (40, 8, Hello);

d.Add (new Label (0, 0, Hello World));
Application.Run (d);

 on an OpenSuse box.

 But it doesn't work for me, it just exits and breaks the terminal... :-(
 
 Run your program like this to make sure it does not leave you in a
 broken state:
 
 mono sample.exe; stty sane
 
 Please post a full sample and I'll take a look at it.
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Playing with Mono.Terminal, no success

2010-05-08 Thread pablosantosl...@terra.es
Hi there,

I'm trying the simple sample at: http://www.mono-project.com/MonoCurses

  Application.Init (false);
   Dialog d = new Dialog (40, 8, Hello);

   d.Add (new Label (0, 0, Hello World));
   Application.Run (d);

on an OpenSuse box.

But it doesn't work for me, it just exits and breaks the terminal... :-(

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] some sysctl fixes for OpenBSD

2010-04-08 Thread pablosantosl...@terra.es
Robert,

I tried to reach you using your email but I get tons of errors.

Are you able to build latest Mono on OpenBSD now? Are you going to
maintain it?

Thanks,

pablo

On 08/04/2010 10:42, Robert Nagy wrote:
 Hey
 
 The following diff removes the XXX hacks from the io-layer OpenBSD
 specific code and and support for get_process_name_from_proc() too.
 It also makes mono-proclib to use the correct kinfo struct.
  
 Index: mono/io-layer/processes.c
 ===
 --- mono/io-layer/processes.c (revision 155030)
 +++ mono/io-layer/processes.c (working copy)
 @@ -1533,7 +1533,7 @@
   name[2] = KERN_PROC_ALL;
   name[3] = 0;
   name[4] = sizeof(struct kinfo_proc2);
 - name[5] = 400; /* XXX */
 + name[5] = 0;
  #else
   struct kinfo_proc *result;
   static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 };
 @@ -1543,7 +1543,7 @@
   
   result = NULL;
   done = FALSE;
 - 
 +
   do {
   proclength = 0;
  #if defined(__OpenBSD__)
 @@ -1558,7 +1558,11 @@
  
   if (result == NULL)
   return FALSE;
 - 
 +
 +#if defined(__OpenBSD__) 
 + name[5] = (int)(proclength / sizeof(struct 
 kinfo_proc2));
 +#endif
 +
   err = sysctl ((int *) name, size, result, proclength, 
 NULL, 0);
  
   if (err == 0) 
 @@ -2224,10 +2228,12 @@
  
  static gchar *get_process_name_from_proc (pid_t pid)
  {
 +#if !defined(__OpenBSD__)
 + FILE *fp;
   gchar *filename = NULL;
 + gchar buf[256];
 +#endif
   gchar *ret = NULL;
 - gchar buf[256];
 - FILE *fp;
  
  #if defined(PLATFORM_SOLARIS)
   filename = g_strdup_printf (/proc/%d/psinfo, pid);
 @@ -2248,6 +2254,40 @@
   proc_name (pid, buf, sizeof(buf));
   if (strlen (buf)  0)
   ret = g_strdup (buf);
 +#elif defined(__OpenBSD__)
 + int mib [6];
 + size_t size;
 + struct kinfo_proc2 *pi;
 +
 + mib [0] = CTL_KERN;
 + mib [1] = KERN_PROC2;
 + mib [2] = KERN_PROC_PID;
 + mib [3] = pid;
 + mib [4] = sizeof(struct kinfo_proc2);
 + mib [5] = 0;
 +
 +retry:
 + if (sysctl(mib, 6, NULL, size, NULL, 0)  0)
 + return(ret);
 +
 + if ((pi = malloc(size)) == NULL)
 + return(ret);
 +
 + mib[5] = (int)(size / sizeof(struct kinfo_proc2));
 +
 + if ((sysctl (mib, 6, pi, size, NULL, 0)  0) ||
 + (size != sizeof (struct kinfo_proc2))) {
 + if (errno == ENOMEM) {
 + free(pi);
 + goto retry;
 + }
 + return(ret);
 + }
 +
 + if (strlen (pi-p_comm)  0)
 + ret = g_strdup (pi-p_comm);
 +
 + free(pi);
  #else
   memset (buf, '\0', sizeof(buf));
   filename = g_strdup_printf (/proc/%d/exe, pid);
 Index: mono/utils/mono-proclib.c
 ===
 --- mono/utils/mono-proclib.c (revision 155030)
 +++ mono/utils/mono-proclib.c (working copy)
 @@ -22,8 +22,13 @@
  #include sys/user.h
  #endif
  #ifdef HAVE_STRUCT_KINFO_PROC_KP_PROC
 -#define kinfo_pid_member kp_proc.p_pid
 -#define kinfo_name_member kp_proc.p_comm
 +#  ifdef KERN_PROC2
 +#define kinfo_pid_member p_pid
 +#define kinfo_name_member p_comm
 +#  else
 +#define kinfo_pid_member kp_proc.p_pid
 +#define kinfo_name_member kp_proc.p_comm
 +#  endif
  #else
  #define kinfo_pid_member ki_pid
  #define kinfo_name_member ki_comm
 @@ -46,11 +51,12 @@
  #ifdef KERN_PROC2
   int mib [6];
   size_t data_len = sizeof (struct kinfo_proc2) * 400;
 + struct kinfo_proc2 *processes = malloc (data_len);
  #else
   int mib [4];
   size_t data_len = sizeof (struct kinfo_proc) * 400;
 + struct kinfo_proc *processes = malloc (data_len);
  #endif /* KERN_PROC2 */
 - struct kinfo_proc *processes = malloc (data_len);
   void **buf = NULL;
  
   if (size)
 @@ -181,11 +187,12 @@
  #ifdef KERN_PROC2
   int mib [6];
   size_t data_len = sizeof (struct kinfo_proc2);
 + struct kinfo_proc2 processi;
  #else
   int mib [4];
   size_t data_len = sizeof (struct kinfo_proc);
 + struct kinfo_proc processi;
  #endif /* KERN_PROC2 */
 - struct kinfo_proc processi;
  
   memset (buf, 0, len);
  
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] some sysctl fixes for OpenBSD

2010-04-08 Thread pablosantosl...@terra.es
Cool! We recently added a FreeBSD box to our collection of test machines
and I've a OpenBSD with an old Mono (a port, which compiled at first
shot) but I had some issues (it doesn't work exactly like the FreeBSD
one for some reason). I'd love to see Plastic SCM running on OpenBSD
soon so I'll definitely will give it a try.

pablo

On 08/04/2010 13:33, Robert Nagy wrote:
 Hey
 
 Yeah we have been using it for quiet some time now. Both 2.6.3 and svn HEAD
 works just fine now.
 
 On (2010-04-08 12:51), pablosantosl...@terra.es wrote:
 Robert,

 I tried to reach you using your email but I get tons of errors.

 Are you able to build latest Mono on OpenBSD now? Are you going to
 maintain it?

 Thanks,

 pablo

 On 08/04/2010 10:42, Robert Nagy wrote:
 Hey

 The following diff removes the XXX hacks from the io-layer OpenBSD
 specific code and and support for get_process_name_from_proc() too.
 It also makes mono-proclib to use the correct kinfo struct.
  
 Index: mono/io-layer/processes.c
 ===
 --- mono/io-layer/processes.c   (revision 155030)
 +++ mono/io-layer/processes.c   (working copy)
 @@ -1533,7 +1533,7 @@
 name[2] = KERN_PROC_ALL;
 name[3] = 0;
 name[4] = sizeof(struct kinfo_proc2);
 -   name[5] = 400; /* XXX */
 +   name[5] = 0;
  #else
 struct kinfo_proc *result;
 static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 };
 @@ -1543,7 +1543,7 @@
 
 result = NULL;
 done = FALSE;
 -   
 +
 do {
 proclength = 0;
  #if defined(__OpenBSD__)
 @@ -1558,7 +1558,11 @@
  
 if (result == NULL)
 return FALSE;
 -   
 +
 +#if defined(__OpenBSD__)   
 +   name[5] = (int)(proclength / sizeof(struct 
 kinfo_proc2));
 +#endif
 +
 err = sysctl ((int *) name, size, result, proclength, 
 NULL, 0);
  
 if (err == 0) 
 @@ -2224,10 +2228,12 @@
  
  static gchar *get_process_name_from_proc (pid_t pid)
  {
 +#if !defined(__OpenBSD__)
 +   FILE *fp;
 gchar *filename = NULL;
 +   gchar buf[256];
 +#endif
 gchar *ret = NULL;
 -   gchar buf[256];
 -   FILE *fp;
  
  #if defined(PLATFORM_SOLARIS)
 filename = g_strdup_printf (/proc/%d/psinfo, pid);
 @@ -2248,6 +2254,40 @@
 proc_name (pid, buf, sizeof(buf));
 if (strlen (buf)  0)
 ret = g_strdup (buf);
 +#elif defined(__OpenBSD__)
 +   int mib [6];
 +   size_t size;
 +   struct kinfo_proc2 *pi;
 +
 +   mib [0] = CTL_KERN;
 +   mib [1] = KERN_PROC2;
 +   mib [2] = KERN_PROC_PID;
 +   mib [3] = pid;
 +   mib [4] = sizeof(struct kinfo_proc2);
 +   mib [5] = 0;
 +
 +retry:
 +   if (sysctl(mib, 6, NULL, size, NULL, 0)  0)
 +   return(ret);
 +
 +   if ((pi = malloc(size)) == NULL)
 +   return(ret);
 +
 +   mib[5] = (int)(size / sizeof(struct kinfo_proc2));
 +
 +   if ((sysctl (mib, 6, pi, size, NULL, 0)  0) ||
 +   (size != sizeof (struct kinfo_proc2))) {
 +   if (errno == ENOMEM) {
 +   free(pi);
 +   goto retry;
 +   }
 +   return(ret);
 +   }
 +
 +   if (strlen (pi-p_comm)  0)
 +   ret = g_strdup (pi-p_comm);
 +
 +   free(pi);
  #else
 memset (buf, '\0', sizeof(buf));
 filename = g_strdup_printf (/proc/%d/exe, pid);
 Index: mono/utils/mono-proclib.c
 ===
 --- mono/utils/mono-proclib.c   (revision 155030)
 +++ mono/utils/mono-proclib.c   (working copy)
 @@ -22,8 +22,13 @@
  #include sys/user.h
  #endif
  #ifdef HAVE_STRUCT_KINFO_PROC_KP_PROC
 -#define kinfo_pid_member kp_proc.p_pid
 -#define kinfo_name_member kp_proc.p_comm
 +#  ifdef KERN_PROC2
 +#define kinfo_pid_member p_pid
 +#define kinfo_name_member p_comm
 +#  else
 +#define kinfo_pid_member kp_proc.p_pid
 +#define kinfo_name_member kp_proc.p_comm
 +#  endif
  #else
  #define kinfo_pid_member ki_pid
  #define kinfo_name_member ki_comm
 @@ -46,11 +51,12 @@
  #ifdef KERN_PROC2
 int mib [6];
 size_t data_len = sizeof (struct kinfo_proc2) * 400;
 +   struct kinfo_proc2 *processes = malloc (data_len);
  #else
 int mib [4];
 size_t data_len = sizeof (struct kinfo_proc) * 400;
 +   struct kinfo_proc *processes = malloc (data_len);
  #endif /* KERN_PROC2 */
 -   struct kinfo_proc *processes = malloc (data_len);
 void **buf = NULL;
  
 if (size)
 @@ -181,11 +187,12 @@
  #ifdef KERN_PROC2
 int mib [6];
 size_t data_len = sizeof (struct kinfo_proc2);
 +   struct kinfo_proc2 processi;
  #else
 int mib [4];
 size_t data_len = sizeof (struct kinfo_proc);
 +   struct kinfo_proc processi;
  #endif /* KERN_PROC2 */
 -   struct kinfo_proc processi;
  
 memset (buf, 0, len);
  
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

[Mono-dev] sgen progress

2010-03-03 Thread pablosantosl...@terra.es
Hi all,

Yesterday night I had the opportunity to make a tiny contribution to
Mark's big effort on sgen implementation.

We were running a heavy load test consisting on 80 plastic scm clients
working against a single server, which was using sgen.

The test has been run several times already but yesterday: it worked fine!!

More than 10 hours working non stop, allocating and releasing memory and
being able to keep a much lower mem-footprint than its Boehm counterpart

There're still many things to work on but... sgen is coming!!

Congratulations!

pablo


www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Could not load type 'System.Data.SchemaSerializationMode' with Mono 2.6

2010-02-25 Thread pablosantosl...@terra.es
Hi there,

We're sending a DataSet with remoting from a server (built with 2.0
profile) to a client (built with 1.0 profile) and we get this:

Could not load type 'System.Data.SchemaSerializationMode'

It wasn't happening prior to mono 2.6.

There were any changes on 2.6 that could be changing this behaviour?

Thanks,

pablo

www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Boehm GC reaching max_map_count

2010-02-23 Thread pablosantosl...@terra.es
Hi there,

We're experiencing problems with a server running on a 64bits box with
plenty of RAM.

After a few hours it crashed and the problem was that it was reaching
the max_map_count limit.

We raised it to two times the default (64k) but it also crashed.

The problem is the following: normally the process has a number close to
100 or 200 mappings, but then, in less than a second, it grows beyond
the limit and crashes.

The process is not allocating memory (it stays stable although quite
high) at this point, so we think it must be related to BoehmGC doing
some collection or something.

The process is heavily multithreaded.

Mono is built with --with-large-heap and runs on a 64 bits box (where
the pointer guessing issues with BoehmGC don't hit us so strongly as it
happens on 32 bit systems).

Well, anyone has any idea why this is happening?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Announcing Mono 2.6.1 Solaris packages

2010-02-23 Thread pablosantosl...@terra.es
Hi!

I'm more than happy to announce that we've just released Mono 2.6.1
packages for Solaris 10 SPARC and OpenSolaris x86!!

I expect Solaris 10 x86 to be following soon.

They're both available at the Mono downloads page already!

They're easy to build from sources, but even easier to install from a
package!! :-P.

Thanks Dick for making it happen.

Feedback will be welcome.

We'd like to see mono packages for all Unix flavors ready to install,
and since we're successfully running on FreeBSD, it will probably be next...

Enjoy,

pablo

www.plasticscm.com

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] soft debugger

2010-02-21 Thread pablosantosl...@terra.es
Hi there,

On which platforms is the soft debugger supported?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] soft debugger

2010-02-21 Thread pablosantosl...@terra.es
on every OS or just Linux?? I know it's on Mac too, we're using it! :-)

On 21/02/2010 23:15, Zoltan Varga wrote:
 On amd64/x86/arm.
 
Zoltan
 
 On Sun, Feb 21, 2010 at 11:10 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Hi there,
 
 On which platforms is the soft debugger supported?
 
 Thanks,
 
 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Building Mono trunk on FreeBSD

2010-02-10 Thread pablosantosl...@terra.es
Up and running! :-)

On 10/02/2010 10:28, Robert Jordan wrote:
 On 10.02.2010 00:29, pablosantosl...@terra.es wrote:
 Using gmake it went much further but...

 Creating the per profile list
 ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources ...
 ./../../tools/gensources.sh net_2_0_System.ServiceModel.Web.dll.sources
 ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources
 env: bash: No such file or directory
 
 You need bash. Look at /mcs/tools/gensources.sh.
 
 Robert
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Building Mono trunk on FreeBSD

2010-02-10 Thread pablosantosl...@terra.es
It's fixed, thanks! :-)

On 10/02/2010 12:43, Andrés G. Aragoneses wrote:
 
 So the configure script is missing the check for Bash?
 
 Maybe we should add something like
 http://lists.freedesktop.org/archives/xorg/2008-March/033417.html
 
 Regards
 
 El 10/02/10 12:27, pablosantosl...@terra.es escribió:
 Up and running! :-)

 On 10/02/2010 10:28, Robert Jordan wrote:
 On 10.02.2010 00:29, pablosantosl...@terra.es wrote:
 Using gmake it went much further but...

 Creating the per profile list
 ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources ...
 ./../../tools/gensources.sh net_2_0_System.ServiceModel.Web.dll.sources
 ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources
 env: bash: No such file or directory

 You need bash. Look at /mcs/tools/gensources.sh.

 Robert

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Process.GetCurrentProcess().MainModule.FileName broken on 2.6.1 on FreeBSD

2010-02-10 Thread pablosantosl...@terra.es
It still failed on 2.4.3

We'll try to fix it.

pablo

On 10/02/2010 21:10, Rodrigo Kumpera wrote:
 Hi Pablo,
 
 On Wed, Feb 10, 2010 at 6:05 PM, psant...@codicesoftware.com
 mailto:psant...@codicesoftware.com psant...@codicesoftware.com
 mailto:psant...@codicesoftware.com wrote:
 
 Hi there,
 
 
 [tes...@freebox ~/test]$ ../mono/bin/mono main.exe
 
 Unhandled Exception: System.ArgumentOutOfRangeException: Index is less
 than 0 or more than or equal to the list count.
 Parameter name: index
 0
 
 
 FreeBSD is not a supported OS, it basically works by virtue of been very
 similar to OSX.
 So, if you're lucky, and fails on OSX, just file a bug report and we'll
 work on it.
 Beyond that, all we can do is to gladly accept patches from the community.
 
 Rodrigo
 
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Building Mono trunk on FreeBSD

2010-02-09 Thread pablosantosl...@terra.es
Using gmake it went much further but...

Creating the per profile list
../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources ...
./../../tools/gensources.sh net_2_0_System.ServiceModel.Web.dll.sources
  ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources
env: bash: No such file or directory
Creating
../../build/deps/System.ServiceModel.Web_test_net_2_0.dll.response ...
Creating
../../build/deps/System.ServiceModel.Web_test_net_2_0.dll.makefrag ...
gmake[7]: Leaving directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
gmake[7]: Entering directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
Creating ../../build/deps/net_2_0_System.ServiceModel.Web.dll.makefrag ...
gmake[7]: Leaving directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
gmake[7]: Entering directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
gmake all-local
gmake[8]: Entering directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
MCS [net_2_0] System.ServiceModel.Web.dll
error CS2008: No files to compile were specified
gmake[8]: *** [../../class/lib/net_2_0/System.ServiceModel.Web.dll] Error 1
gmake[8]: Leaving directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
gmake[7]: *** [do-all] Error 2
gmake[7]: Leaving directory
`/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
gmake[6]: *** [all-recursive] Error 1
gmake[6]: Leaving directory `/usr/home/pablo/monosrc/mcs/class'
gmake[5]: *** [all-recursive] Error 1
gmake[5]: Leaving directory `/usr/home/pablo/monosrc/mcs'
gmake[4]: *** [profile-do--net_2_0--all] Error 2
gmake[4]: Leaving directory `/usr/home/pablo/monosrc/mcs'
gmake[3]: *** [profiles-do--all] Error 2
gmake[3]: Leaving directory `/usr/home/pablo/monosrc/mcs'
gmake[2]: *** [all-local] Error 2
gmake[2]: Leaving directory `/usr/home/pablo/monosrc/mono/runtime'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/usr/home/pablo/monosrc/mono'
gmake: *** [all] Error 2




On 09/02/2010 21:17, pablosantosl...@terra.es wrote:
 Ok, I'll give it a try
 
 On 09/02/2010 20:04, Zoltan Varga wrote:
 Hi,

   I'm pretty sure mono requires GNU make, and might not work with bsd's
 own make.

Zoltan

 On Tue, Feb 9, 2010 at 6:19 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:

 Hi there,

 I'm trying to build trunk on FreeBSD.

 Here's what I got. I'm not an expert on FreeBSD so I might be doing
 something wrong.

 $ uname -a
 FreeBSD freebox.codicesoftware.com
 http://freebox.codicesoftware.com 8.0-RELEASE-p2 FreeBSD
 8.0-RELEASE-p2
 #0: Tue Jan  5 16:02:27 UTC 2010
 r...@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386




 (cd .libs  rm -f libMonoSupportW.la  ln -s ../libMonoSupportW.la
 libMonoSupportW.la)
 Making all in data
 Making all in net_2_0
 Making all in Browsers
 Making all in runtime
 d=`cd ../support  pwd`;  sed
 's,target=libMonoPosixHelper[^]*,target='$d/libMonoPosixHelper.la','
 ../data/config
  etc/mono/configt
 if test -z ; then :; else  sed 's,configuration, dllmap
 dll=gdiplus.dll target= /,' etc/mono/configt  etc/mono/configtt;
 mv -f etc/mono/configtt etc/mono/configt; fi
 mv -f etc/mono/configt etc/mono/config
 /bin/sh ../mkinstalldirs _tmpinst/bin
 mkdir -p -- _tmpinst/bin
 cp mono-wrapper _tmpinst/bin/mono
 echo '#! /bin/sh'  _tmpinst/bin/ilasm ;  r=`pwd`; m=`cd ../../mcs 
 pwd`;  echo 'exec '$r/_tmpinst/bin/mono' '$m/ilasm/ilasm.exe'
 $@'  _tmpinst/bin/ilasm ;  chmod +x _tmpinst/bin/ilasm
 echo '#! /bin/sh'  _tmpinst/bin/gmcs ;  r=`pwd`; m=`cd ../../mcs 
 pwd`;  echo 'exec '$r/_tmpinst/bin/mono'
 '$m/class/lib/net_2_0/gmcs.exe' $@'  _tmpinst/bin/gmcs ;  chmod
 +x _tmpinst/bin/gmcs
 echo '#! /bin/sh'  _tmpinst/bin/al2 ;  r=`pwd`; m=`cd ../../mcs 
 pwd`;  echo 'exec '$r/_tmpinst/bin/mono'
 '$m/class/lib/net_2_0/al.exe' $@'  _tmpinst/bin/al2 ;  chmod +x
 _tmpinst/bin/al2
 if test -w ../../mcs; then :; else chmod -R +w ../../mcs; fi
 cd ../../mcs  make NO_DIR_CHECK=1 PROFILES='net_2_0 net_3_5
 net_2_1_raw  ' CC='gcc' all-profiles
 Makefile, line 66: Need an operator
 Makefile, line 68: Need an operator
 Makefile, line 70: Need an operator
 Makefile, line 72: Need an operator
 build/rules.make, line 45: Need an operator
 build/rules.make, line 47: Need an operator
 build/rules.make, line 55: Need an operator
 build/rules.make, line 56: Need an operator
 build/rules.make, line 57: Need an operator
 build/rules.make, line 58: Need an operator
 build/rules.make, line 59: Need an operator
 build/rules.make, line 60: Need an operator
 build/rules.make, line 61: Need an operator
 build/rules.make, line 62: Need an operator
 build/rules.make, line 63: Need

Re: [Mono-dev] Building Mono trunk on FreeBSD

2010-02-09 Thread pablosantosl...@terra.es
Actually the problem was that the script for webbrowser assumes
/bin/bash but in FreeBSD it's /usr/local/bin/bash... ouch!

On 10/02/2010 0:36, Zoltan Varga wrote:
 Hi,
 
   Its possible that we depend on the behavior of some system utils as
 well, I don't known which, since the file list is stored in a file and
 read from there.
 
  Zoltan
 
 On Wed, Feb 10, 2010 at 12:29 AM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Using gmake it went much further but...
 
 Creating the per profile list
 ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources ...
 ./../../tools/gensources.sh net_2_0_System.ServiceModel.Web.dll.sources
   ../../build/deps/net_2_0_System.ServiceModel.Web.dll.sources
 env: bash: No such file or directory
 Creating
 ../../build/deps/System.ServiceModel.Web_test_net_2_0.dll.response ...
 Creating
 ../../build/deps/System.ServiceModel.Web_test_net_2_0.dll.makefrag ...
 gmake[7]: Leaving directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 gmake[7]: Entering directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 Creating
 ../../build/deps/net_2_0_System.ServiceModel.Web.dll.makefrag ...
 gmake[7]: Leaving directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 gmake[7]: Entering directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 gmake all-local
 gmake[8]: Entering directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 MCS [net_2_0] System.ServiceModel.Web.dll
 error CS2008: No files to compile were specified
 gmake[8]: *** [../../class/lib/net_2_0/System.ServiceModel.Web.dll]
 Error 1
 gmake[8]: Leaving directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 gmake[7]: *** [do-all] Error 2
 gmake[7]: Leaving directory
 `/usr/home/pablo/monosrc/mcs/class/System.ServiceModel.Web'
 gmake[6]: *** [all-recursive] Error 1
 gmake[6]: Leaving directory `/usr/home/pablo/monosrc/mcs/class'
 gmake[5]: *** [all-recursive] Error 1
 gmake[5]: Leaving directory `/usr/home/pablo/monosrc/mcs'
 gmake[4]: *** [profile-do--net_2_0--all] Error 2
 gmake[4]: Leaving directory `/usr/home/pablo/monosrc/mcs'
 gmake[3]: *** [profiles-do--all] Error 2
 gmake[3]: Leaving directory `/usr/home/pablo/monosrc/mcs'
 gmake[2]: *** [all-local] Error 2
 gmake[2]: Leaving directory `/usr/home/pablo/monosrc/mono/runtime'
 gmake[1]: *** [all-recursive] Error 1
 gmake[1]: Leaving directory `/usr/home/pablo/monosrc/mono'
 gmake: *** [all] Error 2
 
 
 
 
 On 09/02/2010 21:17, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
  Ok, I'll give it a try
 
  On 09/02/2010 20:04, Zoltan Varga wrote:
  Hi,
 
I'm pretty sure mono requires GNU make, and might not work with
 bsd's
  own make.
 
 Zoltan
 
  On Tue, Feb 9, 2010 at 6:19 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es
  mailto:pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es
  mailto:pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
  Hi there,
 
  I'm trying to build trunk on FreeBSD.
 
  Here's what I got. I'm not an expert on FreeBSD so I might be
 doing
  something wrong.
 
  $ uname -a
  FreeBSD freebox.codicesoftware.com
 http://freebox.codicesoftware.com
  http://freebox.codicesoftware.com 8.0-RELEASE-p2 FreeBSD
  8.0-RELEASE-p2
  #0: Tue Jan  5 16:02:27 UTC 2010
 
 r...@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386
 
 
 
 
  (cd .libs  rm -f libMonoSupportW.la  ln -s
 ../libMonoSupportW.la
  libMonoSupportW.la)
  Making all in data
  Making all in net_2_0
  Making all in Browsers
  Making all in runtime
  d=`cd ../support  pwd`;  sed
 
 's,target=libMonoPosixHelper[^]*,target='$d/libMonoPosixHelper.la','
  ../data/config
   etc/mono/configt
  if test -z ; then :; else  sed 's,configuration, dllmap
  dll=gdiplus.dll target= /,' etc/mono/configt 
 etc/mono/configtt;
  mv -f etc/mono/configtt etc/mono/configt; fi
  mv -f etc/mono/configt etc/mono/config
  /bin/sh ../mkinstalldirs _tmpinst/bin
  mkdir -p -- _tmpinst/bin
  cp mono-wrapper _tmpinst/bin/mono
  echo '#! /bin/sh'  _tmpinst/bin/ilasm ;  r=`pwd`; m=`cd
 ../../mcs 
  pwd`;  echo 'exec '$r/_tmpinst/bin/mono'
 '$m/ilasm/ilasm.exe'
  $@'  _tmpinst/bin/ilasm ;  chmod +x _tmpinst/bin/ilasm
  echo

Re: [Mono-dev] Fundamental performance problems with Mono

2010-01-07 Thread pablosantosl...@terra.es
Hi,


Could you also share some test code so we can gain a better
understanding of the issue/s?

Thanks,

pablo

On 07/01/2010 16:37, zvikag wrote:
 
 Hello all,
 The bottom line of this message is that I don't see how can one write a
 high-performance socket server in Mono...
 Here is the story:
 I am writing a proxy server using .NET Socket API. This proxy does almost
 entirely I/O work - copying buffers from one socket to another. Now, Mono
 doesn't implement the newer 
 http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx
 XXXAsync Socket API  that was introduced in .NET 2.0 SP1 (or more
 accurately, implements it 
 http://www.mail-archive.com/mono-l...@lists.ximian.com/msg28621.html
 perfunctorily ). So I was left to use the APM Socket API which produces tons
 of garbage objects under heavy load.
 When testing the server on Linux under load we saw very frequent CPU bursts
 that crippled the throughput of the server. After profiling with the mono
 built-in profiler I confirmed that the reason for the high CPU usage was the
 GC collections that got more and more frequent and took more and more time.
 I then read a little bit and realized that the Mono GC is non-generational
 which might explain the long GC cycles (if it was generational it could have
 collected the garbage objects that were created during async socket
 operations in generation 0 and probably stop there, but it has to traverse
 the entire managed heap).
 So the combination of the non-generational GC and the unimplemented XXXAsync
 Socket API result in very poor performance of the Mono server. The maximum
 throughput of the server with Mono on Linux is about half of that on Windows
 using .NET.
 
 I attached the GC stats and profiling results of a 15 minute run.
 http://old.nabble.com/file/p27026906/profile_alloc.log profile_alloc.log 
 http://old.nabble.com/file/p27026906/gc_stats.log gc_stats.log 
 Can you help me out here?
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Interactive C# shell for server monitoring

2009-11-11 Thread pablosantosl...@terra.es
Sure, I've seen that.

My question is if anyone already played with it, introducing it into an
app and giving a network access to it.

Jb Evain wrote:
 Hey Pablo,
 
 On 11/11/09, pablosantosl...@terra.es pablosantosl...@terra.es wrote:
  Any experience anyone using Interactive C# shell
  (http://www.mono-project.com/CsharpRepl) embedded into a server process
  for monitoring purposes (accessible through a socket maybe?)
 
 It's doable using the attach functionality of Mono:
 
 http://tirania.org/blog/archive/2008/Sep-29.html
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Interactive C# shell for server monitoring

2009-11-11 Thread pablosantosl...@terra.es
Ok, thanks Miguel.

Miguel de Icaza wrote:
 Hello,
 
 Sure, I've seen that.

 My question is if anyone already played with it, introducing it into an
 app and giving a network access to it.
 
 The problem today with CSharp and attach is that it is not integrated
 with the main loop of an application, so it is inherently unsafe.
 
 For Gtk# based applications, since we know that there is a main loop, we
 plug naturally into the main loop, so it is not an issue, but with
 server applications it is anyone's guess what kind of event processing
 exists.
 
 In those cases, it would be best if the specific server application
 provides an explicit interface to get C# source and evaluate it.
 
 Miguel.
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Should we replace MemoryStream?

2009-11-10 Thread pablosantosl...@terra.es
I agree (especially thinking about the chunk-pool I mentioned) having
separate classes can be better, so that everyone can choose.

Andreas Nahr wrote:
 I'm still not sure this is a good idea. A lot of this depends on the
 use-case for MemoryStream.
 If 
 1) A MemoryStream is created with a parameterless constructor and then a lot
 of data written to it multiple times the ChunkedStream will be better
 always.
 2) If a MemoryStream is created with a parameterless constructor and only
 gets a few bytes long ChunkedStream might bring considerable overhead.
 3) If MemoryStream is created with a fixed size then ChunkedStream will be
 somewhat, but acceptably slower and have a higher overhead. But it will be
 totally abysmal once GetBuffer comes into play.
 4) If MemoryStream is constructed from a (large) byte array (in the
 scientific field I'm coming from this is by far the most common usage I've
 seem; that is basically using MemoryStream as a (read-only) Stream-Wrapper
 around a byte array) then performance will be abysmal when constructing (if
 you chunkify e.g. a 500MB byte array) AND again with GetBuffer (recreate the
 array). So would be O (n) or even O (2*n) instead of O (0).
 
 It might be possible to create an implementation that can deal with all this
 (would need to have variable sized buffers, keep things it gets passed in
 the constructor alive with small overhead, etc.), but it will be quite
 complex and come with a large base overhead. And even then the GetBuffer
 O(n) problem remains in a few scenarios.
 
 Maybe it would be better to just leave the class as is and document that for
 certain scenarios alternative implementations are available that do a MUCH
 better job. Everybody can easily replace the use of MemoryStream with an
 alternative implementation if needed. But nobody expects this class to
 behave completely different from how it originally did (and seems to do in
 MS.Net).
 
 Andreas
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Should we replace MemoryStream?

2009-11-10 Thread pablosantosl...@terra.es
Hi,

 For variable, a chunked implementation will work better once the stream
 exceeds the maximum size for the first chunk.  Additional considerations
 for this case are: (a) should the first chunk have a smaller size
 initially to be more efficient for short streams, (b) should chunks be
 reusable and thus bypass the alloc/free cycle, (c) should a call to
 GetBuffer() automatically reset the first chunk with the newly created
 byte array?

I think (b) can be great, but obviously it can always be a
PooledCunkedMemoryStream class, or a different constructor.




 On Nov 10, 2009, at 4:47 AM, Steve Bjorg wrote:
 
 Allowing the first chunk to be variable sized doesn't make the code
 that much more complex.  This would mean in read-only cases, all
 operations would remain O(1) since the original byte array would be
 preserved.  For write operations, new chunks would be allocated as
 needed.  Determining which chunk to read from or write to would need
 to take into account the first chunk size, but that's it.

 For the case where someone initializes the ChunkedMemoryStream with an
 existing byte array, then appends to it, and then calls GetBuffer(),
 we would end up with the same overhead as before since the
 MemoryStream would have needed to reallocate the byte array when the
 first append operation occurred, whereas the ChunkedMemoryStream does
 it on GetBuffer().  However, if the array needed to be extended
 multiple times due to many append operations, then the
 ChunkedMemoryStream will come out ahead again  since it only
 realloacted the buffer once.  At which point, the realloacted buffer
 could replace the first chunk so we don't do this again for repeated
 calls to GetBuffer().


 On Nov 10, 2009, at 4:21 AM, Leszek Ciesielski wrote:

 Choice is not always good, and I think this is one of the cases when
 the default (i.e. the MemoryStream implementation) should make the
 choices instead presenting them to the user. Though I agree that the
 case of constructing a MemoryStream from an existing byte[] would
 require a special path in the code, as this is a stream that most
 likely won't be resized and in this case users are expecting the
 constructor to have a complexity of O(1) and GetBuffer to also be
 O(1). The same expectation is probably also true with a fixed size
 MemoryStream.

 On Tue, Nov 10, 2009 at 1:09 PM, pablosantosl...@terra.es
 pablosantosl...@terra.es wrote:
 I agree (especially thinking about the chunk-pool I mentioned) having
 separate classes can be better, so that everyone can choose.

 Andreas Nahr wrote:
 I'm still not sure this is a good idea. A lot of this depends on the
 use-case for MemoryStream.
 If
 1) A MemoryStream is created with a parameterless constructor and
 then a lot
 of data written to it multiple times the ChunkedStream will be better
 always.
 2) If a MemoryStream is created with a parameterless constructor
 and only
 gets a few bytes long ChunkedStream might bring considerable overhead.
 3) If MemoryStream is created with a fixed size then ChunkedStream
 will be
 somewhat, but acceptably slower and have a higher overhead. But it
 will be
 totally abysmal once GetBuffer comes into play.
 4) If MemoryStream is constructed from a (large) byte array (in the
 scientific field I'm coming from this is by far the most common
 usage I've
 seem; that is basically using MemoryStream as a (read-only)
 Stream-Wrapper
 around a byte array) then performance will be abysmal when
 constructing (if
 you chunkify e.g. a 500MB byte array) AND again with GetBuffer
 (recreate the
 array). So would be O (n) or even O (2*n) instead of O (0).

 It might be possible to create an implementation that can deal with
 all this
 (would need to have variable sized buffers, keep things it gets
 passed in
 the constructor alive with small overhead, etc.), but it will be quite
 complex and come with a large base overhead. And even then the
 GetBuffer
 O(n) problem remains in a few scenarios.

 Maybe it would be better to just leave the class as is and document
 that for
 certain scenarios alternative implementations are available that do
 a MUCH
 better job. Everybody can easily replace the use of MemoryStream
 with an
 alternative implementation if needed. But nobody expects this class to
 behave completely different from how it originally did (and seems
 to do in
 MS.Net).

 Andreas


 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list


 - Steve

 --
 Steve G. Bjorg
 http://mindtouch.com
 http://twitter.com/bjorg
 irc.freenode.net #mindtouch


 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo

[Mono-dev] Interactive C# shell for server monitoring

2009-11-10 Thread pablosantosl...@terra.es
Hi,

Any experience anyone using Interactive C# shell
(http://www.mono-project.com/CsharpRepl) embedded into a server process
for monitoring purposes (accessible through a socket maybe?)

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Should we replace MemoryStream?

2009-11-09 Thread pablosantosl...@terra.es
Hi,

I think a very important place were this chunked mem streams HAVE TO be
placed (in fact I'll be trying them tomorrow under heavy load on our
testing cluster) is in remoting: there's a huge number of mem streams
being created and destroyed (one for each call) and this can help...
only if the new ChunkedStream is based on a pool, which I don't think is
the case but probably could be easily doable.

What do you think about extending ChunkedMemoryStream to include an
option based on a chunk pool, so memory is actually reused instead of
freed and re-allocated? Wouldn't it be good to reduce fragmentation (I'm
still thinking on remoting)??


pablo


www.plasticscm.com



Steve Bjorg wrote:
 The implementation could be adapted so that if the chunked memory  
 stream is initialized with an existing byte array it behaves like it  
 did in the past.  It's possible that the best approached can be  
 derived for the various MemoryStream constructors.
 
 The question is what is the most common usage pattern?  If it's  
 GetBuffer(), then there will be a performance and overhead hit.   
 However, if it's using Write()/Read() as we do, then there are some  
 significant gains to be had.  GetBytes() would also benefit, though  
 not as much.
 
 - Steve
 
 --
 Steve G. Bjorg
 http://mindtouch.com
 http://twitter.com/bjorg
 irc.freenode.net #mindtouch
 
 On Nov 9, 2009, at 11:41 AM, Andreas Nahr wrote:
 
 Are you talking about System.IO.MemoryStream?
 Then imho this would be a problematic move.
 Most people are used to new MemoryStream (someByteArray) being O(0)  
 time,
 but with ChunkedStream would be O(n). In fact in those cases  
 ChunkedStream
 would need twice the memory because it would still need to retain the
 original byte array (e.g. for GetBuffer).

 Happy hacking
 Andreas

 -Ursprüngliche Nachricht-
 Von: mono-devel-list-boun...@lists.ximian.com
 [mailto:mono-devel-list-boun...@lists.ximian.com] Im Auftrag von  
 Miguel de
 Icaza
 Gesendet: Montag, 9. November 2009 19:10
 An: mono-devel-list
 Betreff: [Mono-dev] Should we replace MemoryStream?

 Hello folks,

I just blogged about a memory fragmentation issue here:

  http://tirania.org/blog/archive/2009/Nov-09.html

And I am wondering: since MemoryStream is one of these sources of
 problems, we could replace this implementation with MindTouch's
 ChunkedStream.

 Miguel.

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Soft debugger HOWTO

2009-11-09 Thread pablosantosl...@terra.es
Hi,

After the announcement last week of the new soft debugger, I have
several questions:

- I understand MD is the primary interface *right now* for the soft
debugger, is it possible to debug a Linux app too?

- Is there any other available interface to use the soft debugger
besides MD?

- As Miguel pointed to me last week, the new softdeb will allow debuggin
gon any platform, I don't know if anyone experienced it yet (I'll
definitely give it a try asap), if so, any feedback?

I know it's still a little bit too soon, but once the softdeb gets some
good visibility, I honestly trust we're about to see a huge change in
the way Mono is used.


pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Soft debugger HOWTO

2009-11-09 Thread pablosantosl...@terra.es
Hi Geoff,

 - I understand MD is the primary interface *right now* for the soft
 debugger, is it possible to debug a Linux app too?
 
 You mean a native app? No.  You mean a mono app on linux? Yes, on x86
 and amd64 and arm currently.

I'm only concerned 99.99% of the time about managed code. So that's what
I need.

 - Is there any other available interface to use the soft debugger
 besides MD? 
 You can create any interface you like on top of the
 Mono.Debugger.Soft.dll, MonoDevelop is the interface we support.

Will it make sense to have some sort of command line interface? Maybe
not, MD will always be better...

 - As Miguel pointed to me last week, the new softdeb will allow debuggin
 gon any platform, I don't know if anyone experienced it yet (I'll
 definitely give it a try asap), if so, any feedback?

 
 We currently have it ported to:
 
 - linux (x86, amd64, arm, arm-full-aot)
 - darwin (x86, arm, arm-full-aot)
 
 The point miguel was making is that porting to new architectures is a
 minor (1 day) task in most cases.

Excellent!
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] An asynchronous System.Runtime.Remoting.Channels.Tcp

2009-11-02 Thread pablosantosl...@terra.es
Hi,

Dick and I were talking about the possible race conditions (we've found
one on our code) that the system ThreadPool can have when used from the
channel and the code (remember the *current* tcp channel does not use
the system threadpool but a custom and really simple one).

Would it be possible to use two different thread pools instantiating the
system ones?

Also, would it be possible to commit this code?


Another related idea: it is possible (I think) to greatly improve the
current TcpChannel by returning threads to the pool when they're waiting
at PlasticTcpClientConnection.ProcessMessages.

The problem right now is that each client connection will create a
thread on the server and the thread won't be returned to the pool until
the client closes the connection, even if it's just waiting for data.
This is not good for high-perf environments were many requests must be
processed, since a huge number of threads could be potentially spawned.

My idea would be: we already have a thread for the socket accept,
create a new one for Socket.Select, so that threads are returned to the
pool (and its socket passed to the Socket.Select call) and then the
method ProcessMessages would be called again when select returns. It's
not like a full asynch channel but I think it can be even better on most
situations (less overhead) and it will greatly improve responsiveness.



pablo


www.plasticscm.com


Dick Porter wrote:
 Hi all
 
 Attached is a patch to add an optional asynchronous path for the TCP
 remoting channel server.
 
 The main benefit we see with this change is in reliability; when a
 single server is servicing many clients at once (we test with over 100)
 with large data transfers the standard synchronous channel will often
 drop connections.  We tracked this down to the Accept() call in
 TcpServerChannel.cs not being able to get to incoming connections
 quickly enough.
 
 I was hoping that throughput of large transfers might be improved by
 using the threadpool's asynchronous sockets support, but it turns out
 that performance is pretty much the same as the current implementation.
 
 Any comments/suggestions for improvement?
 
 - Dick
 
 
 
 
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] IA-64 big-endian

2009-10-30 Thread pablosantosl...@terra.es
Hi,

 The most important thing is to find out the differences between Big
 Endian Mode IA-64 and Little Endian Mode IA-64 -- not just the byte or
 word order, but also find out how things are different when function
 call parameters are passed via the stack.
 
 BTW, Linux on Itanium runs in little endian mode. HP-UX itself runs in
 big endian mode, but can run little endian mode Linux applications
 with the Linux Runtime Environment. So may be you guys don't need to
 port Mono to big endian mode Itanium!!


Then maybe the first step would be just trying to run a Mono built on
Mono Itanium on the HP-UX and check whether it just works?

pablo



 Rayson
 
 
 
 On Thu, Oct 29, 2009 at 6:03 PM, pablosantosl...@terra.es
 pablosantosl...@terra.es wrote:
 Zoltan,

 Would you mind sharing with us your thoughts about the things to change
 so we can have an idea of what's involved?

 As Dick pointed, would we need a hardware manual?

 Thanks,

pablo

 Zoltan Varga wrote:
 Hi,

It would probably require a lot of modifications but its easier than
 a full port since most of
 the code is there.

  Zoltan

 On Thu, Oct 29, 2009 at 6:22 PM, Dick Porter dpor...@codicesoftware.com
 mailto:dpor...@codicesoftware.com wrote:

 Hi all

 I've been spending the last couple of days getting mono to build on
 ia-64/hpux - mostly so far setting up GNU tools from scratch.  I've now
 run into a showstopper:

 mono/arch/ia64/ia64-codegen.h

 #if G_BYTE_ORDER != G_LITTLE_ENDIAN
 #error FIXME
 #endif


 So my question is, is fixing this going to be a case of a few fixes here
 and there (that I might be able to do without a hardware manual), or is
 it going to be a full-blown port?

 Thanks,

 - Dick


 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list


 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Novell.Directory.Ldap replacement?

2009-10-29 Thread pablosantosl...@terra.es
Hi there,

We're having troubles with Novell.Directory.Ldap library. We're about to
contact the developer with a couple of fixes, but it seems they just
improve the situation but doesn't totally solve it.

After thousands of requests (on a test program on a linux box) the app
always get blocked, sometimes it's able to continue after some time, but
sometimes (often) it keeps blocked forever, which is not very good on
production :-P

Does any replacement (commercial or not) exist?

We'll try to fix it, but just in case.


Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] IA-64 big-endian

2009-10-29 Thread pablosantosl...@terra.es
Zoltan,

Would you mind sharing with us your thoughts about the things to change
so we can have an idea of what's involved?

As Dick pointed, would we need a hardware manual?

Thanks,

pablo

Zoltan Varga wrote:
 Hi,
 
It would probably require a lot of modifications but its easier than
 a full port since most of
 the code is there.
 
  Zoltan
 
 On Thu, Oct 29, 2009 at 6:22 PM, Dick Porter dpor...@codicesoftware.com
 mailto:dpor...@codicesoftware.com wrote:
 
 Hi all
 
 I've been spending the last couple of days getting mono to build on
 ia-64/hpux - mostly so far setting up GNU tools from scratch.  I've now
 run into a showstopper:
 
 mono/arch/ia64/ia64-codegen.h
 
 #if G_BYTE_ORDER != G_LITTLE_ENDIAN
 #error FIXME
 #endif
 
 
 So my question is, is fixing this going to be a case of a few fixes here
 and there (that I might be able to do without a hardware manual), or is
 it going to be a full-blown port?
 
 Thanks,
 
 - Dick
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] faster than hashtable?

2009-10-28 Thread pablosantosl...@terra.es
Thanks,

Good to know! I'll give it a try.

Alan McGovern wrote:
 If the key is random, a hashtable is the fastest way. You may be able to
 eke some extra speed out of the DictionaryK, V class by ripping all
 the code to support generic keys and instead hardcode the key to always
 be a long. That should save a bit of time, though whether it'd be
 noticable or not I don't know.
 
 Alan.
 
 On Wed, Oct 28, 2009 at 8:25 AM, Tom Spink tsp...@gmail.com
 mailto:tsp...@gmail.com wrote:
 
 2009/10/27 psant...@codicesoftware.com
 mailto:psant...@codicesoftware.com psant...@codicesoftware.com
 mailto:psant...@codicesoftware.com:
  Hi,
 
  If you need to store key/value pairs, where the key will be ALWAYS a
  unique long (no collisions), is there anything better than a
 Hashtable?
 
  Thanks
 
 pablo
 
 Presumably, though, the key can span the entire range of a long?  If
 it's an acceptably small range, you could use an array.
 
 --
 Tom Spink
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
 
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] faster than hashtable?

2009-10-28 Thread pablosantosl...@terra.es
Excellent. Is there a wrapper for C#? Is it worth?

Felipe Lessa wrote:
 On Tue, Oct 27, 2009 at 11:58:31PM +0100, psant...@codicesoftware.com wrote:
 If you need to store key/value pairs, where the key will be ALWAYS a
 unique long (no collisions), is there anything better than a Hashtable?
 
 There are always Judy arrays, see http://judy.sourceforge.net/.
 
 --
 Felipe.
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] faster than hashtable?

2009-10-28 Thread pablosantosl...@terra.es
Sure Alan!

So, basically, the options are:

- Use a sorted ArrayList and a binary search
- Reimplement hashtable focusing on long keys
- Write a wrapper to Judy

Alan McGovern wrote:
 Really what you need to do is benchmark all of the different options
 using your expected workload. It's near useless us telling you X is
 faster or Y is better without knowing the workload involved.
 
 Alan.
 
 On Wed, Oct 28, 2009 at 2:40 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Excellent. Is there a wrapper for C#? Is it worth?
 
 Felipe Lessa wrote:
  On Tue, Oct 27, 2009 at 11:58:31PM +0100,
 psant...@codicesoftware.com mailto:psant...@codicesoftware.com wrote:
  If you need to store key/value pairs, where the key will be ALWAYS a
  unique long (no collisions), is there anything better than a
 Hashtable?
 
  There are always Judy arrays, see http://judy.sourceforge.net/.
 
  --
  Felipe.
  ___
  Mono-devel-list mailing list
  Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
  http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Error handling longs on Mono SPARC

2009-10-27 Thread pablosantosl...@terra.es
Hi Zoltan,

Should we file a bug on bugzilla?


pablo

pablosantosl...@terra.es wrote:
 Hi Zoltan,
 
 It's the daily tarball (the date is in the version string) which I
 believe is svn trunk.
 
 
 pablo
 
 Zoltan Varga wrote:
 Hi,

   Is this the 2.6 prerelease, or using the code from the mono-2-6 branch
 ? The latter has
 some sparc fixes.

  Zoltan

 On Mon, Oct 26, 2009 at 1:11 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:

 Hi there,

 This is our configuration:

 -bash-3.00$ uname -a
 SunOS atenea 5.11 snv_34 sun4u sparc SUNW,Sun-Blade-1000

 -bash-3.00$ mono --version
 Mono JIT compiler version 20091021 (tarball Wed Oct 21 19:04:28 CEST
 2009)
 Copyright (C) 2002-2009 Novell, Inc and Contributors.
 www.mono-project.com http://www.mono-project.com
TLS:   normal
GC:Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:   normal
Notification:  Thread + polling
Architecture:  sparc
Disabled:  none

 We're using a Mono 2.6 compiled at our test box.


 We've a code like this:

 long dstBrId = GetBranchNumber(brId);

 log.DebugFormat(Branch {0} - {1}, brId, dstBrId);


 Calling this method:

private long GetBranchNumber(long brId)
{
Branch br = (Branch) mFetchBranches[brId];

if( br != null )
{
return br.ObjId;
}

log.DebugFormat(GetBranchNumber returning {0}, brId);

return brId;
}

 And that's the log it is showing:

  - GetBranchNumber returning 4
  - Branch 4 - 17179869188

 It looks like, for some reason, this 4 is magically becoming a
 17179869188!!

 17179869188 is - 40004 in hex

 And, it *gets fixed by building disabling the optimize mode*


 Of course, a test app like this:

 using System;

 class Hello
 {
public static void Main()
{
Hello t = new Hello();
long myval = 4;
long longVal = t.GetValue(myval);
Console.WriteLine(longVal);
}

private long GetValue(long v)
{
return v;
}

 }

 Does not fail.


 Any idea?


 Thanks,


 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list


 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Error handling longs on Mono SPARC

2009-10-27 Thread pablosantosl...@terra.es


   A small testcase would be very useful, it can usually be generated by
 taking the code
 which exhibits the problem, and removing stuff from it. Also, does it
 happen with 2.4
 too ?

Not sure we'll be able to reproduce it outside the real code. It's a big
process, in case this has something to do with it.
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Error handling longs on Mono SPARC

2009-10-27 Thread pablosantosl...@terra.es
Hi Zoltan,

   If you can't create a test case, could you run your app with
 MONO_VERBOSE_METHOD=caller method
 then with
 MONO_VERBOSE_METHOD=called method
 
 and send me the output ?

Sure, I'll do.

 What does ' *gets fixed by building disabling the optimize mode*'
 means, is this a flag
 for the c# compiler ?

Yep. I'm building with nant, I'm enabling or disabling the optimize
flag. It's the same as gmcs --optimize I think.

Also, the code's been built on .NET, but I don't think it will make a
difference.

Will try and come back to you.
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Error handling longs on Mono SPARC

2009-10-26 Thread pablosantosl...@terra.es
Hi there,

This is our configuration:

-bash-3.00$ uname -a
SunOS atenea 5.11 snv_34 sun4u sparc SUNW,Sun-Blade-1000

-bash-3.00$ mono --version
Mono JIT compiler version 20091021 (tarball Wed Oct 21 19:04:28 CEST 2009)
Copyright (C) 2002-2009 Novell, Inc and Contributors. www.mono-project.com
TLS:   normal
GC:Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:   normal
Notification:  Thread + polling
Architecture:  sparc
Disabled:  none

We're using a Mono 2.6 compiled at our test box.


We've a code like this:

long dstBrId = GetBranchNumber(brId);

log.DebugFormat(Branch {0} - {1}, brId, dstBrId);


Calling this method:

private long GetBranchNumber(long brId)
{
Branch br = (Branch) mFetchBranches[brId];

if( br != null )
{
return br.ObjId;
}

log.DebugFormat(GetBranchNumber returning {0}, brId);

return brId;
}

And that's the log it is showing:

 - GetBranchNumber returning 4
 - Branch 4 - 17179869188

It looks like, for some reason, this 4 is magically becoming a
17179869188!!

17179869188 is - 40004 in hex

And, it *gets fixed by building disabling the optimize mode*


Of course, a test app like this:

using System;

class Hello
{
public static void Main()
{
Hello t = new Hello();
long myval = 4;
long longVal = t.GetValue(myval);
Console.WriteLine(longVal);
}

private long GetValue(long v)
{
return v;
}

}

Does not fail.


Any idea?


Thanks,


pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Error handling longs on Mono SPARC

2009-10-26 Thread pablosantosl...@terra.es
Hi Zoltan,

It's the daily tarball (the date is in the version string) which I
believe is svn trunk.


pablo

Zoltan Varga wrote:
 Hi,
 
   Is this the 2.6 prerelease, or using the code from the mono-2-6 branch
 ? The latter has
 some sparc fixes.
 
  Zoltan
 
 On Mon, Oct 26, 2009 at 1:11 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Hi there,
 
 This is our configuration:
 
 -bash-3.00$ uname -a
 SunOS atenea 5.11 snv_34 sun4u sparc SUNW,Sun-Blade-1000
 
 -bash-3.00$ mono --version
 Mono JIT compiler version 20091021 (tarball Wed Oct 21 19:04:28 CEST
 2009)
 Copyright (C) 2002-2009 Novell, Inc and Contributors.
 www.mono-project.com http://www.mono-project.com
TLS:   normal
GC:Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:   normal
Notification:  Thread + polling
Architecture:  sparc
Disabled:  none
 
 We're using a Mono 2.6 compiled at our test box.
 
 
 We've a code like this:
 
 long dstBrId = GetBranchNumber(brId);
 
 log.DebugFormat(Branch {0} - {1}, brId, dstBrId);
 
 
 Calling this method:
 
private long GetBranchNumber(long brId)
{
Branch br = (Branch) mFetchBranches[brId];
 
if( br != null )
{
return br.ObjId;
}
 
log.DebugFormat(GetBranchNumber returning {0}, brId);
 
return brId;
}
 
 And that's the log it is showing:
 
  - GetBranchNumber returning 4
  - Branch 4 - 17179869188
 
 It looks like, for some reason, this 4 is magically becoming a
 17179869188!!
 
 17179869188 is - 40004 in hex
 
 And, it *gets fixed by building disabling the optimize mode*
 
 
 Of course, a test app like this:
 
 using System;
 
 class Hello
 {
public static void Main()
{
Hello t = new Hello();
long myval = 4;
long longVal = t.GetValue(myval);
Console.WriteLine(longVal);
}
 
private long GetValue(long v)
{
return v;
}
 
 }
 
 Does not fail.
 
 
 Any idea?
 
 
 Thanks,
 
 
 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] [Patch] Make Boehm GC stack scanning less aggressive

2009-10-22 Thread pablosantosl...@terra.es
Unless you need to keep production code up and running... TODAY. ;-)

Rodrigo Kumpera wrote:
 Hi Dick,
 
 I believe there is very little reason to do development on libgc as sgen
 is been worked and
 advancing quite fast. I don't feel it's worth the risk of improving libgc.
 
 SGen is only a few months away from been production ready and it might
 be a better idea
 to spend your energy there. For example, Code to do precise marking of
 managed code is
 still to be done and is an area that help would be more than welcome.
 
 
 
 
 
 On Tue, Oct 20, 2009 at 12:44 PM, Dick Porter
 dpor...@codicesoftware.com mailto:dpor...@codicesoftware.com wrote:
 
 Hi all
 
 The attached patch makes the stack marking in libgc much less
 aggressive.  Instead of marking every object that happens to be pointed
 to by random numbers, it uses the descriptor-based scanning function
 instead.
 
 I think this is safe for mono, as (as was pointed out to me) every
 allocation has a descriptor.
 
 It fixes the stress-test that David posted a week or two ago, and in the
 real world it allows our server to free up much more memory.  It has
 been tested on a production server.
 
 Comments?
 
 - Dick
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 
 
 
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Mono Performance Solaris/Linux/Windows

2009-10-20 Thread pablosantosl...@terra.es
Hi,

We're running a simple program like the following on Mono/Linux,
Mono/OpenSolaris, .NET/Windows. Same hardware (QuadCore Xeon 64bits).

The results are very interesting: Linux/Mono is a little bit faster than
Windows/.NET and OpenSolaris/Mono a little bit slower.

(FYI: we wrote the same code in Java, and running with the default VM,
Mono is *always* faster)

Ok, here comes the questions and remarks:

Solaris with Mono 2.2 is a little bit faster (about a 20% or so) than
Mono 2.7 (just built from trunk). Is there a good explanation for that?

Also, and more importantly: could you highlight some reasons why a test
like the one below is slower on Mono/OpenSolaris than Mono/Linux?


Thanks,


pablo


Mono JIT compiler version 2.2 (/branches/mono-2-2/mono r125384 Tue Feb
3 10:53:16 CET 2009)
Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com
TLS:   normal
GC:Included Boehm (with typed GC)
SIGSEGV:   normal
Notification:  Thread + polling
Architecture:  x86
Disabled:  none

Mono JIT compiler version 2.7 (/trunk/mono r144497 Wed Oct 21 01:58:57
CEST 2009)
Copyright (C) 2002-2009 Novell, Inc and Contributors. www.mono-project.com
TLS:   normal
GC:Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:   normal
Notification:  Thread + polling
Architecture:  x86
Disabled:  none



 using System;
 using System.IO;
 using System.Collections;

 namespace hash_access
 {
   public class RevisionInfo
   {
   public long ItemId = -1;
   public short Type;// Directory, Text, Binary, ...
   public long Size;
   public bool CheckedOut;
   public long ParentId = -1;
   public long BranchId = -1;
   public string RevisionNumber;
   public string Hash;
   public long Changeset;
   public bool Last;
   }

   class Class1
   {
   [STAThread]
   static void Main(string[] args)
   {
   int size = int.Parse(args[0]);
   int ini = Environment.TickCount;

   Hashtable hash = new Hashtable();
   ArrayList list = new ArrayList();

   for (int i = 0; i  size; i++)
   {
   RevisionInfo revInfo = new RevisionInfo();
   hash[i] = revInfo;
   //hash[i.ToString()] = revInfo;
   list.Add(revInfo);
   }

   for (int i = 0; i  size; i++)
   {
   RevisionInfo revInfo = hash[i] as RevisionInfo;
   revInfo = list[i] as RevisionInfo;
   }

   Console.WriteLine({0} times: {1}ms, size,
Environment.TickCount - ini);
   Console.ReadLine();
   }
   }
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] tcmalloc

2009-10-13 Thread pablosantosl...@terra.es
Hi there,

Dick and I were talking about it today and most likely it wouldn't have
a big impact since Mono does use mmap instead but.. do you guys think
using tcmalloc would be worth?

http://goog-perftools.sourceforge.net/doc/tcmalloc.html

It's not new, but I've just found it reading the MySql 5.4 release
notes, and it seems it helps boosting its performance

http://mysqlha.blogspot.com/2009/01/double-sysbench-throughput-with_18.html

Would it help?

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Mac OS X Debugger?

2009-10-07 Thread pablosantosl...@terra.es
Hi there,

Is the Mac OS X Debugger the Unity people were working on ready to use?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Big performance gaps between .NET, Mono (Suse/Debian) ?

2009-10-06 Thread pablosantosl...@terra.es
Hi,

Chuck Esterbrook wrote:
 A web search showed me that GC can be turned off with the environment
 variable GC_DONT_GC. Maybe that should be called MONO_GC_ON. In any
 case, any value will turn off the GC, including blank, so to turn it
 back on, unset it.
 
 I tested with a command line Mono program that is not a
 microbenchmark. With GC, it peaks at around 180MB and without, it
 peaks around 840MB and runs about 18% faster. I gave the same program
 less work to do and its performance boost was only 10%.
 
 So now you can try your programs without GC to see how much it
 contributes to performance drag. Just watch for swap.  :-)
 
 Does anyone know what's involved with plugging in your own GC into Mono?

Nightmare level??

 
 -Chuck
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Issues with GC due to libgc

2009-09-30 Thread pablosantosl...@terra.es
Is it a 64bits machine?

If so, the same is true for us.

But, with 32 bits mono, we can consistently repeat the issue. I can set
up a gotomeeting and show you how it happens.


pablo

Zoltan Varga wrote:
 Hi,
 
   On my machine, after the allocation of the 2.5GB of arrays + 10 gcs,
 the RSS of the
 process goes back to about 100MB. This is perfectly normal, as the GC
 doesn't return
 free memory to the OS in some cases, so it doesn't have to allocate it
 again when the
 program starts allocating memory.
 
   Zoltan
 
 On Mon, Sep 28, 2009 at 9:05 PM, pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es pablosantosl...@terra.es
 mailto:pablosantosl...@terra.es wrote:
 
 Hi all,
 
 After several weeks working on a bunch of mem issues related to the
 libgc based garbage collector, we've identified the following issue and
 a possible solution (Dick already sent some workarounds to the list):
 
 The libgc garbage collector has a really hard time identifying pointers
 to objects since it guesses what is a pointer instead of actually
 knowing by using data passed by the mono runtime.
 
 It means something as simple as introducing a long on the stack (for
 instance something like array = new int[100]) will block (forever)
 the memory at address 100. Yes, as incredible as it sounds, it can
 cause important mem problems on long living apps (typically servers).
 
 (As a side note, this exact problem is present on sgen, since it also
 scans the stack conservatively).
 
 A small improvement could be made in the current GC with little effort,
 and is supplying more class refmaps to libgc.
 
 Libgc is very hard to modify, it contains too many hacks and
 optimizations that have made the code a nightmare to understand and
 modify, so we don't find useful to make anything here beyond very small
 patches.
 
 That said, mono currently can provide reference bitmaps for objects,
 it's a matter of providing the right descriptor to the garbage
 collector.
 
 Libgc supports this kind of descriptors and mono already generates them
 for the sgen gc, so it's just a matter of joining those together (which
 should beeasy to do). This should improve a great number of scans in the
 arking process, leaving only stacks and several minor objects without
 precise marking. (Should become similar to the current sgen idea, where
 stacks and other roots are scanned conservatively, although not
 compacting).
 
 Attached is the sample code we use to reproduce the issue on 32 bit
 based Linux/Mono systems.
 
 Some notes about the test app below:
 
 
 ===
 the program accepts commands like gc, mem, exit, 2, or 1
 
 2 n m   creates n arrays of ints with m elements, and put them in an
 arraylist. After the call completes, they are no longer referenced.
 1 n m   same, but waiting for a key press after each new array
 gc n performs n gcs
 exit exits
 
 So, the case:
 
 mono test.exe
  2 200 70creates 2 million int arrays of 70 elements
 each (virtual goes up to 777MB)
  gc 10should free everything, but around 33MB
 remain allocated acording to pmap:
 
 ...
 bf4b5000 32K  0K  0K ---p [anon]
 bfc9e000 88K 32K 28K rwxp [stack]
 e000  4K  0K  0K r-xp [vdso]
 Total:   777820K  33852K  29336K
 
 
  2 20 2500  creates 20 int arrays of 25 million elements
 each (2.7GB)
  gc 10 now pmap shows everything is screwed up:
 
 ...
 b7f2b000  8K  8K  8K rwxp /lib/ld-2.6.1.so
 http://ld-2.6.1.so
 bf4b5000 32K  0K  0K ---p [anon]
 bfc9e000 88K 32K 28K rwxp [stack]
 e000  4K  0K  0K r-xp [vdso]
 Total:   2764356K 1696132K 1691616K
 
 
 Trying with smaller sizes lets you see that segments are joined and
 split, but seems that there is some inability to free everything.
 
 ==
 
 
 Regards,
 
 
pablo
 
 
 
 
 using System;
 using System.Collections;
 
 namespace test
 {
class Program
{
static void Main(string[] args)
{
WaitForEnter();
}
 
private static void WaitForEnter()
{
Console.WriteLine(Command:);
 
while (true)
{
Console.Write( );
string line = Console.ReadLine();
 
string[] args = line.Split(' ');
 
if (args.Length = 0) continue;
 
switch (args[0].ToLower())
{
case exit: return;
 
case

Re: [Mono-dev] Issues with GC due to libgc

2009-09-29 Thread pablosantosl...@terra.es




Hi Miguel,



  Hello,

I tried your sample, in my machine the memory usage with Case1 does
go up very quickly, but then it tends to stay stable around 600 megs.

  

Ok, but the problem is that ALL memory should be freed, since there are
no references to the arrays. Of course you've to invoke GC. The 600Mb
in RES is a leak (Virtual Mem will only grow since libgc will never
release it, this is another patch Dick has been working on)



  Later, I modified the program to not allocate 1 meg blocks, but
instead to allocation 1024 times 1k blocks (so that it allocates the
same amount of memory).   The program stays stable at around 200 megs of
ram in this case.
  

Same as above: if we're talking about RES it should be close to 0 (ok,
size of the runtime and the program)



  
I am sure your program is more complicated, but the difference
between these two patterns of memory usage in my opinion are caused by
memory fragmentation, not really conservative heap scanning. 
  

We don't think so since memory is clearly not freed, even considering
there're no references to the data.



  
My suggestion is to change the code in your server to use either
unmanaged buffers for large allocations, or to do buffering with smaller
blocks of memory instead of 10 megabyte blobs.
  

Ok, in fact this is just a simple example, our production code is not
handling arrays pointing to such a big data. We can handle arrays of
objects close to 50K elements or even more, but not millions.



 
  
  
Hi all,

After several weeks working on a bunch of mem issues related to the
libgc based garbage collector, we've identified the following issue and
a possible solution (Dick already sent some workarounds to the list):

The libgc garbage collector has a really hard time identifying pointers
to objects since it "guesses" what is a pointer instead of actually
"knowing" by using data passed by the mono runtime.

It means something as simple as introducing a long on the stack (for
instance something like array = new int[100]) will block (forever)
the memory at address 100. Yes, as incredible as it sounds, it can
cause important mem problems on long living apps (typically servers).

(As a side note, this exact problem is present on sgen, since it also
scans the stack "conservatively").

A small improvement could be made in the current GC with little effort,
and is supplying more class refmaps to libgc.

Libgc is very hard to modify, it contains too many hacks and
optimizations that have made the code a nightmare to understand and
modify, so we don't find useful to make anything here beyond very small
patches.

That said, mono currently can provide reference bitmaps for objects,
it's a matter of providing the right descriptor to the garbage collector.

Libgc supports this kind of descriptors and mono already generates them
for the sgen gc, so it's just a matter of joining those together (which
should beeasy to do). This should improve a great number of scans in the
arking process, leaving only stacks and several minor objects without
precise marking. (Should become similar to the current sgen idea, where
stacks and other roots are scanned conservatively, although not compacting).

Attached is the sample code we use to reproduce the issue on 32 bit
based Linux/Mono systems.

Some notes about the test app below:


===
the program accepts commands like gc, mem, exit, 2, or 1

2 n m   creates n arrays of ints with m elements, and put them in an
arraylist. After the call completes, they are no longer referenced.
1 n m   same, but waiting for a key press after each new array
gc n performs n gcs
exit exits

So, the case:

mono test.exe


  2 200 70creates 2 million int arrays of 70 elements
  

each (virtual goes up to 777MB)


  gc 10should free everything, but around 33MB
  

remain allocated acording to pmap:

...
bf4b5000 32K  0K  0K ---p [anon]
bfc9e000 88K 32K 28K rwxp [stack]
e000  4K  0K  0K r-xp [vdso]
Total:   777820K  33852K  29336K




  2 20 2500  creates 20 int arrays of 25 million elements
  

each (2.7GB)


  gc 10 now pmap shows everything is screwed up:
  

...
b7f2b000  8K  8K  8K rwxp /lib/ld-2.6.1.so
bf4b5000 32K  0K  0K ---p [anon]
bfc9e000 88K 32K 28K rwxp [stack]
e000  4K  0K  0K r-xp [vdso]
Total:   2764356K 1696132K 1691616K


Trying with smaller sizes lets you see that segments are joined and
split, but seems that there is some inability to free everything.

==


Regards,


	pablo



plain text document attachment (Program.cs)
using System;
using System.Collections;

namespace test
{
class Program
{
static void 

Re: [Mono-dev] Issues with GC due to libgc

2009-09-29 Thread pablosantosl...@terra.es


 Ok, but the problem is that ALL memory should be freed, since there
 are no references to the arrays. Of course you've to invoke GC. The
 600Mb in RES is a leak (Virtual Mem will only grow since libgc will
 never release it, this is another patch Dick has been working on)
 
 This can easily be explained by memory fragmentation problems.

Miguel, I don't want to drive you crazy but examining and debugging the
libgc code we've found that the pages are kept marked as used instead
of free (David can give you more info in case I'm missing anything).
That's why I don't think fragmentation is the problem. If marking were
ok, the entire mem would be freed (as it happens with 64bits mono).


pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Issues with GC due to libgc

2009-09-28 Thread pablosantosl...@terra.es
Hi all,

After several weeks working on a bunch of mem issues related to the
libgc based garbage collector, we've identified the following issue and
a possible solution (Dick already sent some workarounds to the list):

The libgc garbage collector has a really hard time identifying pointers
to objects since it guesses what is a pointer instead of actually
knowing by using data passed by the mono runtime.

It means something as simple as introducing a long on the stack (for
instance something like array = new int[100]) will block (forever)
the memory at address 100. Yes, as incredible as it sounds, it can
cause important mem problems on long living apps (typically servers).

(As a side note, this exact problem is present on sgen, since it also
scans the stack conservatively).

A small improvement could be made in the current GC with little effort,
and is supplying more class refmaps to libgc.

Libgc is very hard to modify, it contains too many hacks and
optimizations that have made the code a nightmare to understand and
modify, so we don't find useful to make anything here beyond very small
patches.

That said, mono currently can provide reference bitmaps for objects,
it's a matter of providing the right descriptor to the garbage collector.

Libgc supports this kind of descriptors and mono already generates them
for the sgen gc, so it's just a matter of joining those together (which
should beeasy to do). This should improve a great number of scans in the
arking process, leaving only stacks and several minor objects without
precise marking. (Should become similar to the current sgen idea, where
stacks and other roots are scanned conservatively, although not compacting).

Attached is the sample code we use to reproduce the issue on 32 bit
based Linux/Mono systems.

Some notes about the test app below:


===
the program accepts commands like gc, mem, exit, 2, or 1

2 n m   creates n arrays of ints with m elements, and put them in an
arraylist. After the call completes, they are no longer referenced.
1 n m   same, but waiting for a key press after each new array
gc n performs n gcs
exit exits

So, the case:

mono test.exe
 2 200 70creates 2 million int arrays of 70 elements
each (virtual goes up to 777MB)
 gc 10should free everything, but around 33MB
remain allocated acording to pmap:

...
bf4b5000 32K  0K  0K ---p [anon]
bfc9e000 88K 32K 28K rwxp [stack]
e000  4K  0K  0K r-xp [vdso]
Total:   777820K  33852K  29336K


 2 20 2500  creates 20 int arrays of 25 million elements
each (2.7GB)
 gc 10 now pmap shows everything is screwed up:

...
b7f2b000  8K  8K  8K rwxp /lib/ld-2.6.1.so
bf4b5000 32K  0K  0K ---p [anon]
bfc9e000 88K 32K 28K rwxp [stack]
e000  4K  0K  0K r-xp [vdso]
Total:   2764356K 1696132K 1691616K


Trying with smaller sizes lets you see that segments are joined and
split, but seems that there is some inability to free everything.

==


Regards,


pablo



using System;
using System.Collections;

namespace test
{
class Program
{
static void Main(string[] args)
{
WaitForEnter();
}

private static void WaitForEnter()
{
Console.WriteLine(Command:);

while (true)
{
Console.Write( );
string line = Console.ReadLine();

string[] args = line.Split(' ');

if (args.Length = 0) continue;

switch (args[0].ToLower())
{
case exit: return;

case 1: Case1(args); break;

case 2: Case2(args); break;


case mem:
Console.WriteLine(Memory now: {0}, 
GC.GetTotalMemory(false));
break;
case gc:
Gcs(args);
break;
default:
Console.WriteLine(Unknown command);
break;
}
}
}

private static void Gcs(string[] args)
{
int loop = (args.Length == 2) ? Int32.Parse(args[1]) : 1;

for (int i = 0; i  loop; ++i)
{
Console.WriteLine(Memory {1} now : {0}, 
GC.GetTotalMemory(false), i);
Console.WriteLine(Memory {1} after GC: {0}, 
GC.GetTotalMemory(true), i);
}
}

private const int OneMeg = 1024 * 1024;

private static void Case1(string[] args)
{
int loop = (args.Length = 2) ? Int32.Parse(args[1]) : 5;
int size = (args.Length = 3) ? Int32.Parse(args[2]) : 10 * OneMeg;

ArrayList 

[Mono-dev] Does MonoTouch use GC?

2009-09-14 Thread pablosantosl...@terra.es
Hi there,

Does MonoTouch use GC when running on the iPhone?


Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compacting GC

2009-09-12 Thread pablosantosl...@terra.es




Hi,

I've just downloaded the latest SVN. This is what I get when I try to
build:

MCS [net_1_1] Mono.CompilerServices.SymbolWriter.dll
Assembly
../../class/lib/net_1_1/tmp/Mono.CompilerServices.SymbolWriter.dll
signed.
Assembly ../../class/lib/net_1_1/Mono.CompilerServices.SymbolWriter.dll
is strongnamed.
make[8]: Leaving directory
`/home/plastic/monosrc/mcs/class/Mono.CompilerServices.SymbolWriter'
make[7]: Leaving directory
`/home/plastic/monosrc/mcs/class/Mono.CompilerServices.SymbolWriter'
make[7]: Entering directory `/home/plastic/monosrc/mcs/class/Mono.Posix'
Creating ../../build/deps/net_1_1_Mono.Posix.dll.makefrag ...
Creating ../../build/deps/Mono.Posix_test_net_1_1.dll.response ...
Creating ../../build/deps/Mono.Posix_test_net_1_1.dll.makefrag ...
make[7]: Leaving directory `/home/plastic/monosrc/mcs/class/Mono.Posix'
make[7]: Entering directory `/home/plastic/monosrc/mcs/class/Mono.Posix'
make all-local
make[8]: Entering directory `/home/plastic/monosrc/mcs/class/Mono.Posix'
MCS [net_1_1] Mono.Posix.dll
Stacktrace:

/bin/sh: line 1: 29810 Segmentation fault
MONO_PATH="./../../class/lib/net_1_1:$MONO_PATH"
/home/plastic/monosrc/mono/runtime/mono-wrapper
./../../class/lib/net_1_1/mcs.exe /codepage:65001 -optimize -d:NET_1_1
-d:ONLY_1_1 -debug /noconfig /unsafe /r:mscorlib.dll /r:System.dll
/nowarn:0618,612 -target:library
-out:../../class/lib/net_1_1/Mono.Posix.dll @Mono.Posix.dll.sources
make[8]: *** [../../class/lib/net_1_1/Mono.Posix.dll] Error 139
make[8]: Leaving directory `/home/plastic/monosrc/mcs/class/Mono.Posix'
make[7]: *** [do-all] Error 2
make[7]: Leaving directory `/home/plastic/monosrc/mcs/class/Mono.Posix'
make[6]: *** [all-recursive] Error 1
make[6]: Leaving directory `/home/plastic/monosrc/mcs/class'
make[5]: *** [all-recursive] Error 1
make[5]: Leaving directory `/home/plastic/monosrc/mcs'
make[4]: *** [profile-do--net_1_1--all] Error 2
make[4]: Leaving directory `/home/plastic/monosrc/mcs'
make[3]: *** [profiles-do--all] Error 2
make[3]: Leaving directory `/home/plastic/monosrc/mcs'
make[2]: *** [all-local] Error 2
make[2]: Leaving directory `/home/plastic/monosrc/mono/runtime'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/plastic/monosrc/mono'
make: *** [all] Error 2


Miguel de Icaza wrote:

  Hello,

  
  
Is is possible to try the upcoming compacting GC? Is it in a status
close to be usable?

  
  
You can try it, but it is not finished.

Compile Mono with:

	./configure --with-gc=sgen

Miguel


  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] An asynchronous System.Runtime.Remoting.Channels.Tcp

2009-09-11 Thread pablosantosl...@terra.es




My suggestion would be using a separate ThreadPool for the channel than
the one used by the system, since Dick is aware race conditions can
happen (deadlocks) between code using the System ThreadPool in the
process and the channel.

Diff. ThreadPools will fix it.


pablo

Miguel de Icaza wrote:

  Hello,

I like this patch very much, and I like that the way to enable it is
through the new "run_async" configuration option.

My only feedback is that I believe this is a nice enough feature
that it deserves at least:

	* A blog entry announcing it, linking to:

	* A page on the Wiki with an explanation of what it does,
	  and how to use it.

Miguel.

  
  
Hi all

Attached is a patch to add an optional asynchronous path for the TCP  
remoting channel server.

The main benefit we see with this change is in reliability; when a  
single server is servicing many clients at once (we test with over  
100) with large data transfers the standard synchronous channel will  
often drop connections.  We tracked this down to the Accept() call in  
TcpServerChannel.cs not being able to get to incoming connections  
quickly enough.

I was hoping that throughput of large transfers might be improved by  
using the threadpool's asynchronous sockets support, but it turns out  
that performance is pretty much the same as the current implementation.

Any comments/suggestions for improvement?

- Dick


___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

  
  
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compacting GC

2009-09-11 Thread pablosantosl...@terra.es
The first thing we'd need is to be able to build it.

This way we can pass our test suite using SGen and most likely detect a
good number of potential bugs.

Dick Porter wrote:

 On 11 Sep 2009, at 3:26PM, Mark Probst wrote:
 On Fri, Sep 11, 2009 at 3:02 PM, Dick Porter
 dpor...@codicesoftware.com wrote:
 Is there a known list of jobs needed for sgen, or is it just a case of
 working through the failures and bugs?

 If you'd like to help, I'll write up a document with what I've learned
 debugging SGen.

 Yes please.

 - Dick


___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compacting GC

2009-09-11 Thread pablosantosl...@terra.es




Must be our problem then. We'll try again, maybe we've an outdated SVN
copy or something (I don't think so, but let's try again).

Miguel de Icaza wrote:

  Hello,

  
  
The first thing we'd need is to be able to build it.

This way we can pass our test suite using SGen and most likely detect a
good number of potential bugs.

  
  
Exactly what happened?

Yesterday I reconfigured my Mono like this:

	./configure --with-gc=sgen

And Mono built without a glitch, and that is when I replied something
like "Did you try to build it?".

Without an error log it is hard to determine what is happening to you.
A fresh checkout with a fresh configure works for me.


  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compacting GC

2009-09-11 Thread pablosantosl...@terra.es




We were just planning to test it on Linux.

Rodrigo Kumpera wrote:

  
  On Fri, Sep 11, 2009 at 3:21 PM, Miguel de
Icaza mig...@novell.com wrote:
  Hello,

 The first thing we'd need is to be able to build it.

 This way we can pass our test suite using SGen and most likely
detect a
 good number of potential bugs.


Exactly what happened?

Yesterday I reconfigured my Mono like this:

   ./configure --with-gc=sgen

And Mono built without a glitch, and that is when I replied something
like "Did you try to build it?".

Without an error log it is hard to determine what is happening to you.
A fresh checkout with a fresh configure works for me.
  
  
It's worth pointing out that SGEN won't build on windows or OSX at the
moment
since it requires a working __thread implementation. Mark has been
working on
lifting this requirement but the code haven't been committed yet.
  

  
  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compacting GC

2009-09-10 Thread pablosantosl...@terra.es




We tried to build it today since we're experiencing issues with libgc
under really heavy load.

It does not build. David can add more details if you're interested, but
they show up just trying to build it.

Miguel de Icaza wrote:

  
This build option hasn't been working for a while when compiling from
trunk. Did anyone fix it recently?

  
  
What about trying it out?

Miguel

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compacting GC

2009-09-10 Thread pablosantosl...@terra.es




ok, understood.

We're considering working on it if we can't solve our issues (if
they're finally issues) with libgc.

Miguel de Icaza wrote:

  Hello Pablo,

  
  
We tried to build it today since we're experiencing issues with libgc
under really heavy load.

  
  
Like I said on my first post: you can try it, but it is not finished.   

And by not finished, I mean, it is not finished, so it is not going to
be useful for you to solve the problem under heavy load. 

Miguel


  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Unsafe struct array reading

2009-09-08 Thread pablosantosl...@terra.es
Hi all,

I'm looking for a way to read and write array of structs from a file
(byte array).

I've the code (below) to read *one*, but I don't know how to map an
entire array.

I know there's a thousand of ways to do it with Streams, but the point
is for performance reasons I need to load them all on a single step (as
you'd do with C and fread).

Thank you

pablo



using System;
using System.Runtime.InteropServices;

namespace structIO
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct YourStruct
{
public int First;
public long Second;
public double Third;

public static unsafe byte[] YourStructToBytes(YourStruct s, int
arrayLen)
{
byte[] arr = new byte[sizeof(YourStruct) * arrayLen];

fixed( byte* parr = arr )
{
* ((YourStruct * )parr) = s;
}

return arr;
}

public static unsafe YourStruct BytesToYourStruct(byte[] arr,
int arrayLen)
{
if( arr.Length  (sizeof(YourStruct)*arrayLen) )
throw new ArgumentException();

YourStruct s;

fixed( byte* parr = arr )
{
s = *((YourStruct * )parr);
}

return s;

}
}

class structIOTest
{
public static void Main(string[] args)
{
YourStruct[] array = new YourStruct[10];

for( int i = 0; i  array.Length; ++i )
{
array[i].First = 10;
array[i].Second = (long) 10;
array[i].Third = (double) 10;
}

byte[] data = YourStruct.YourStructToBytes(array[0],
array.Length);

YourStruct result = YourStruct.BytesToYourStruct(data, 1);

}
}
}

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Unsafe struct array reading

2009-09-08 Thread pablosantosl...@terra.es




Great! 

Now, could you share some code about how to do it? :-P

Thanks,

pablo

Miguel de Icaza wrote:

  Hello,

  
  
I'm looking for a way to read and write array of structs from a file
(byte array).

  
  
If you use the proper packing and do not care about breaking across
endian systems, you can always just write the entire array of structures
out and read them back in using unsafe pointers.

miguel


  



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Compacting GC

2009-09-08 Thread pablosantosl...@terra.es
Hi there!

Is is possible to try the upcoming compacting GC? Is it in a status
close to be usable?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] [PATCH] Cause libgc to return some unused memory to the system

2009-08-24 Thread pablosantosl...@terra.es
We tested it on our Plastic SCM load tests and it worked as expected.


pablo


www.plasticscm.com


Dick Porter wrote:
 Hi all

 Attached is a patch to libgc that will allow it to actually unmap memory
 when USE_MUNMAP is defined.  Currently, the unmap code just sets the
 mmap flags on a region to 'no access'.  The patch unlinks blocks from
 the gc free list larger than a defined min size (currently 4k bytes),
 that haven't been used for several collections, and unmaps the memory.

 It may or may not fix https://bugzilla.novell.com/show_bug.cgi?id=495486
 - the reporter forgot to attach his test case.

 Comments?

 - Dick

   
 

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage on Mono remoting

2009-07-15 Thread pablosantosl...@terra.es
Hi Gonzalo,

First, thanks for the detailed answers.


 Considering Boehm GC seems to have really hard times releasing memory
 and we're delivering GBs of data... it could be.
 

 Delivering GBs of data and having hundreds of connections should not be
 a problem. Years ago, when testing iFolder under those conditions
 everything worked just fine. But it was mod-mono-server/apache.

   
Dick is actually checking this. I hope it's not the issue.
 I'm not 100% sure, but it seems reusing buffers could be a very good idea.
 

 Xsp does it too and it's much better than allocating 32kB for every
 request every time.

   
Good.
 Also, you mentioned in a previous email that the TcpChannel should be
 changed so it uses Asynch sockets. I've seen you use AsyncCallBack on XSP.

 My question is: I guess AsynchCallback will use a thread underneath,
 won't it? If so: what's the advantage over launching threads to accept
 calls?
 

 Your guess is wrong. Those asynchronous calls from Socket are treated as
 if they were a WorkItem for a ThreadPool, only that when they are made,
 the socket is added to an epoll fd (if you're on linux with support for
 epoll). And when there's an event in the socket, there's a dedicated IO
 threadpool to take care of reading/writing data and invoking the
 callbacks. The advantages: if you have 10k connections, you don't need
 10k threads, threads are reused (no creation overhead), ...

   
Ok, of course. Well, when I said launching a thread I really meant
launching a thread on a thread pool.

Well, I'll try to use the ansync sockets then, but I guess to get the
best out of them I'll need not only to use them during accept, but also
read data asynchronously, right?

BTW, I already replaced the built-in remoting threadpool by the
System.Threading one.


 You mentioned it is better to use the default ThreadPool instead of the
 internal one in the TcpChannel, why is it going to be better?
 

 Coupled with asynchronous I/O, it will make better use of the resources
 available. There's no need to create 100 threads for 100 client or
 having 1 threadpool thread blocking on a socket asynchronous
 operation,... Also, if you're thinking of reusing buffers, this helps
 too, as the number of buffers will be bound to the maximum number of
 threads in the threadpool, ...
   
Good, so, whenever I wait for a read or a write using async, the thread
should be able to work on another request?

I think this is the way it's implemented on Windows, but I can tell you
it is still created a huge number of threads, almost 1-1 with clients
under the most overloaded scenarios.


Thanks,

pablo


 -Gonzalo




   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage on Mono remoting

2009-07-15 Thread pablosantosl...@terra.es
Hi Gonzalo,

 Well, I'll try to use the ansync sockets then, but I guess to get the
 best out of them I'll need not only to use them during accept, but also
 read data asynchronously, right?
 

 Correct. If possible, Write should also be asynchronous, but as long as
 the OS buffers everything, there should be no problem.
 [...]
   

Ok, well, in fact I think I'm experiencing this right now: I've 112
clients against the same server, each of them will download about 300Mb.

I see how the thread pool gets full (quad core) and then new requests
are accepted but not scheduled.

CPU is almost doing nothing, so I guess all threads are waiting for the
synchronous socket write to complete, so performance could be much higher.

 Coupled with asynchronous I/O, it will make better use of the resources
 available. There's no need to create 100 threads for 100 client or
 having 1 threadpool thread blocking on a socket asynchronous
 operation,... Also, if you're thinking of reusing buffers, this helps
 too, as the number of buffers will be bound to the maximum number of
 threads in the threadpool, ...
   
   
 Good, so, whenever I wait for a read or a write using async, the thread
 should be able to work on another request?
 

 Correct. In fact, you don't 'wait' for an asynchronous read or write.
 For instance, when you call BeginRead, the socket is added to an epoll
 fd and you BeginRead call returns immediately. The callback you
 provided, if any, will be called from a different thread as soon as new
 data is available. Just don't spoil it by doing something like
 socket.EndRead (socket.BeginRead (...)))   ;-)
   
ok ! :-P

Well, I see it will mean a good number of changes in the Channel.


Besides, as I also told Dick and Dave on a separate thread, it seems the
latest MySql provider has a HUGE memory leak (ok, or it never frees
mem), which is causing a good number of problems to my test.

And, it seems I also have to do something with my code since all data
requests are reading byte[] in blocks of 4Mb, but not reusing the
buffers at all, so when a lot of threads are doing its job, huge amounts
of mem are being allocated and giving extra work to the GC which should
be completely avoided.

I'm a little bit concerned about the following, though:

If you've a method like byte[] GetData() which is going to be invoked
through remoting, even if you do custom serialization (maybe creating a
DataArray class) two copies of the data will be created: one the
original you created, and a second one in the serialization buffer prior
to be sent to the network... :-(

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage on Mono remoting

2009-07-14 Thread pablosantosl...@terra.es
Hi Gonzalo,

 Testing PlasticSCM under really heavy load (hundreds of clients against
 a single server delivering hundreds of Gb over the network).
 

 So no profiling...

   
Comparing the same code, the same hardware and the same test under Linux
and Windows. On Windows we run under .NET, and the test passes successfully.

Dick (in CC) is looking into GC problems.

 System.Web uses unmanaged chunks of memory together with an unmanaged
 memory based stream.
   
   
 That's what I need. Can you point me to the right class?
 

 It's HttpResponseStream.cs all the *Bucket classes that then use an
 IntPtrStream.

 I still don't think that allocating MemoryStream (256 bytes by default)
 is hurting that bad. 
Considering Boehm GC seems to have really hard times releasing memory
and we're delivering GBs of data... it could be.

I'm not 100% sure, but it seems reusing buffers could be a very good idea.

 A wild guess is that the BufferedStream wrapping
 the NetworkStream is allocating much more memory (4kB by default). But
 if the code is rewritten following what xsp does, this should not be a
 problem any more.
   
Ok, I'm not familiar with xsp, I'll take a look.

I've just noticed that you use send from libc instead of the socket
functions... I guess it is due to performance reasons, right?

Also, you mentioned in a previous email that the TcpChannel should be
changed so it uses Asynch sockets. I've seen you use AsyncCallBack on XSP.

My question is: I guess AsynchCallback will use a thread underneath,
won't it? If so: what's the advantage over launching threads to accept
calls?

You mentioned it is better to use the default ThreadPool instead of the
internal one in the TcpChannel, why is it going to be better?

Thanks again Gonzalo,

pablo


www.plasticscm.com



___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage on Mono remoting

2009-07-14 Thread pablosantosl...@terra.es
Thanks Robert,

So:

I'll modify the TcpChannel to use ThreadPool at System.Threading instead
of the built-in one.



Robert Jordan wrote:
 pablosantosl...@terra.es wrote:
   
 Also, you mentioned in a previous email that the TcpChannel should be
 changed so it uses Asynch sockets. I've seen you use AsyncCallBack on XSP.

 My question is: I guess AsynchCallback will use a thread underneath,
 won't it? If so: what's the advantage over launching threads to accept
 calls?
 

 The thread pool threads are already launched and they are
 maintained by the runtime which is known to be faster than a
 managed thread pool implementation.

 Additionally, the default thread pool is already configurable
 (see mono(1)).

   
 You mentioned it is better to use the default ThreadPool instead of the
 internal one in the TcpChannel, why is it going to be better?
 

 See above.

 Robert

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] TcpServerChannel loosing connections under heavy load

2009-07-13 Thread pablosantosl...@terra.es
Hi Gonzalo,


 Inside the threadPool the following code:

  threadDone.WaitOne(PoolGrowDelay, false);

 Makes thread creation wait 500ms (I guess just forcing the CPU to switch
 to another one) each time a new thread is created (when the pool is
 growing).

 If you remove it, connection problems go away, but I guess it's not the
 right way to implement it.
 

 That should be modified to make use of the .NET ThreadPool and use
 asynchronous operations for accept, read and write (this last one is not
 mandatory). There's code in xsp that illustrates the way it should be
 done.

   
Which ThreadPool exactly should be used?

Could you point me to the right code in xsp?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Memory usage on Mono remoting

2009-07-13 Thread pablosantosl...@terra.es
Hi all,

On BinaryServerFormatterSink.cs, a new MemoryStream is being created to
attend every remoting call.

Under high load conditions it will make the GC work harder than
required, both decreasing performance and potentially causing memory
problems.

It should be replaced by some sort of MemoryStream based on preallocated
memory buffers.

Maybe something like ChunkedMemoryStream in Rotor.

http://www.koders.com/csharp/fid0C95C784238E26C8EAC95C7A852A34A0CE9305BB.aspx?s=chunkedmemorystream

Are you aware of an open source implementation of this?

Thanks,

pablo


www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage on Mono remoting

2009-07-13 Thread pablosantosl...@terra.es
Hi,


 On Mon, 2009-07-13 at 19:39 +0200, pablosantosl...@terra.es wrote:
   
 Hi all,

 On BinaryServerFormatterSink.cs, a new MemoryStream is being created to
 attend every remoting call.

 Under high load conditions it will make the GC work harder than
 required, both decreasing performance and potentially causing memory
 problems.

 It should be replaced by some sort of MemoryStream based on preallocated
 memory buffers.
 

 Are you volunteering? Have you profiled the application or is this just
 a guess?

   
Testing PlasticSCM under really heavy load (hundreds of clients against
a single server delivering hundreds of Gb over the network).

Yes, I'm volunteering.


 System.Web uses unmanaged chunks of memory together with an unmanaged
 memory based stream.
   
That's what I need. Can you point me to the right class?


pablo


www.plasticscm.com

___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Memory usage on Mono remoting

2009-07-13 Thread pablosantosl...@terra.es
Ok, I think you mean IntPtrStream, but I'm not sure it's what I'm
looking for.

I think managed memory would be enough (unless the other is faster :-P),
but I need the stream to reuse preallocated buffers.

pablo

www.plasticscm.com


pablosantosl...@terra.es wrote:
 Hi,


   
 On Mon, 2009-07-13 at 19:39 +0200, pablosantosl...@terra.es wrote:
   
 
 Hi all,

 On BinaryServerFormatterSink.cs, a new MemoryStream is being created to
 attend every remoting call.

 Under high load conditions it will make the GC work harder than
 required, both decreasing performance and potentially causing memory
 problems.

 It should be replaced by some sort of MemoryStream based on preallocated
 memory buffers.
 
   
 Are you volunteering? Have you profiled the application or is this just
 a guess?

   
 
 Testing PlasticSCM under really heavy load (hundreds of clients against
 a single server delivering hundreds of Gb over the network).

 Yes, I'm volunteering.

   
 System.Web uses unmanaged chunks of memory together with an unmanaged
 memory based stream.
   
 
 That's what I need. Can you point me to the right class?


 pablo


 www.plasticscm.com

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] TcpServerChannel loosing connections under heavy load

2009-07-11 Thread pablosantosl...@terra.es
Hi,

I'm having issues with Mono remoting under high performance networking
scenarios. Some clients are rejected since the server is not able to
handle connections.

Look at the following code inside TcpServerChannel
(http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpServerChannel.cs?revision=110042view=markup)

I've removed the #ifdef code for clarity.

void WaitForConnections ()
{
  try
  {
while(!stopped)
{
  Socket socket = listener.AcceptSocket ();
  ClientConnection reader = new ClientConnection (this, socket,
sink);
  try {
if (!threadPool.RunThread (new ThreadStart
(reader.ProcessMessages)))
  socket.Close ();
  } catch (Exception e)
  {
  }
}
  }
  catch (Exception e)
  {
  }
}

Well, each time an accept is done, a new thread is launched (from the
pool).

When a high number of threads is managed (about 130 concurrent clients),
it makes the channel reject remote requests.

Inside the threadPool the following code:

 threadDone.WaitOne(PoolGrowDelay, false);

Makes thread creation wait 500ms (I guess just forcing the CPU to switch
to another one) each time a new thread is created (when the pool is
growing).

If you remove it, connection problems go away, but I guess it's not the
right way to implement it.

So, what I'll do is to enqueue the newly created ClientConnection in
the accept code instead of spawning the thread just that, so a
different one (or even the pool itself, I'll check) will consume
elements and spawn threads.

This way we avoid the accept thread from getting distracted from its
main job: accepting client connections.

It actually makes me wonder if it would be better to use asynchronous
socket calls instead of synch ones + threading, as they strongly
recommend here:

http://msdn.microsoft.com/es-es/magazine/cc300760(en-us).aspx

.NET TCP Channel is based on asynch socket calls.

My question is: are asynchronous socket calls better on Linux as they're
on Windows?

Also, it would be great (and very easy to implement) if new
configuration properties would be added to the TCP channel so things
like socket options, socket buffer sizes and so on could be set to
improve performance without touching the code (I'll work on that too).

Some very interesting guidelines that could be easily applied then are
found here: Boost socket performance on Linux:

http://www.ibm.com/developerworks/linux/library/l-hisock.html

And I see some have been already applied:

http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpConnectionPool.cs?r1=113395r2=113394pathrev=113395

Since NoDelay was set by Robert Jordan to the TcpConnectionPool.
Question: I see it applies to the client but, wouldn't it be useful for
the server too?


Thanks,

pablo


www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compiling Mono v2.4 RC2 (Solaris 10 SPARCv9)

2009-04-15 Thread pablosantosl...@terra.es
Last one I tried and build was 2.2. We're using it to test Plastic every
week on OpenSolaris. The binaries are available at Blastwave, but never
tried 2.4

Jonathan Soft escribió:
 I'm reaching the conclusion that Mono v2.4 does not work on Solaris 10 SPARC
 - this is based on both my own unsuccessful attempts to build and run it (or
 debug it, for that matter), and on the non existence of reports on the web
 indicating 2.4 success on the Solaris SPARC platform.


 Giving up for now.

   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Compiling Mono v2.4 RC2 (Solaris 10 SPARCv9)

2009-04-03 Thread pablosantosl...@terra.es
did you try the following magic ?

ulimit -Hs 10240

Jonathan Soft escribió:
 I've also been trying to compile mono v2.4 on Solaris 10 SPARC and have run
 into the trouble exactly as you describe. By running the make process with
 'MONO_LOG_LEVEL=debug' I've concluded that the build process hangs as soon
 as the local 2.4 mono is invoked to compile runtime .cs source files (build
 root/mono/mini/mono --config build root/runtime/etc/mono/config
 .//class/lib/monolite/mcs.exe etc.). By adding Mono v2.0.1 bin directory to
 the path we just postpone this hanging from the first attempt to use the
 local mono applied to  'build/deps/basic-profile-check.exe' to a later
 attempt applied to System.Xml.

 I poked arround at internal Makefiles, and by getting gmake to use v2.0.1
 mono instead of local 2.4 mono,  I was able to get passed System.Xml
 compilation, however I got stuck at mcs directory compilation, where no
 makefile manipulation I did could get gmake to use the preinstalled mono. As
 soon as gmake invokes [build root/mono/mini/mono --config build
 root/runtime/etc/mono/config .//class/lib/monolite/mcs.exe] we're stuck.

 By running truss on the hanging process it would seem that it is really
 caught up in a never-ending loop, but I have no idea why.

 No more ideas at this point, but I'll post if I make any progress.


   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Question about Zeroconf sample

2009-03-01 Thread pablosantosl...@terra.es
Hi,

I don't know if there's a more suitable place to send this, if so, 
please let me know.

I was trying today the sample on the Mono Zeroconf 
(http://www.mono-project.com/Mono.Zeroconf) page.

Well, I run it on my OpenSuse box, but the client (nor mzclient) can't 
see the registered service...

No error or exception is raised but the following code

RegisterService service = new RegisterService ();
service.Name = Aaron's DAAP Share;
service.RegType = _daap._tcp;
service.ReplyDomain = local.;
service.Port = 3689;

// TxtRecords are optional
TxtRecord txt_record = new TxtRecord ();
txt_record.Add (Password, false);
service.TxtRecord = txt_record;

service.Register ();

doesn's seem to register the service correctly

I run it both as regular user and root, and I also checked I've the 
Zeroconf package installed (and of course the Mono assemblies)

Thanks,


pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] monodevelop! congratulations!

2009-02-20 Thread pablosantosl...@terra.es
Hi all,

I'd like to thank Lluis and all the MD team for this new release! 
Several developers in the Plastic SCM team have just switched to MD, and 
we can successfully debug our server, which is a really important step 
ahead.

It doesn't mean we'll stop using vstudio but it obviously opens a lot of 
possibilities for our team, specially considering we focus on 
multiplatform software.

Congratulations!

pablo


www.plasticscm.com
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Can't debug from monodevelop with 2.2

2009-02-19 Thread pablosantosl...@terra.es
Hi,

I've upgraded my develop machine main mono installation to 2.2 and now I 
can't debug using monodevelop (ouch!).

Whenever it tries to launch a process it says it needs Mono.Cecil 
0.6.8.8607 but now what I have is something like 0.6.9.xxx

I've tried with the latest monodevelop (just downloaded from the 
monodevelop site using the 1 click install), but same problem...

Any pointers will be welcomed since we're *all* moving to MD today...

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Can't debug from monodevelop with 2.2

2009-02-19 Thread pablosantosl...@terra.es
Hi Lluis,

Just installed from the official repositories: mono 2.2 and your last MD.

It works with mono 2.0.1

I'm using OpenSuse 11

Another question: it seems the variable inspection does not work with 
generic collections, does it?

Thanks,
pablo

Lluis Sanchez escribió:
 Looks like your debugger is not in sync with your installed mono. If you
 compiled the debugger from sources, you should recompile it again.

 El dj 19 de 02 de 2009 a les 16:57 +0100, en/na pablosantosl...@terra.es
 va escriure:
   
 Hi,

 I've upgraded my develop machine main mono installation to 2.2 and now I 
 can't debug using monodevelop (ouch!).

 Whenever it tries to launch a process it says it needs Mono.Cecil 
 0.6.8.8607 but now what I have is something like 0.6.9.xxx

 I've tried with the latest monodevelop (just downloaded from the 
 monodevelop site using the 1 click install), but same problem...

 Any pointers will be welcomed since we're *all* moving to MD today...

 Thanks,

 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 


   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] Debugger plans

2009-02-11 Thread pablosantosl...@terra.es
Hi,

I'd like to ask you guys the plans for the Mono Debugger in the 
short/mid term.

Are you planning to support debugger on MacOS?

How hard would be to port it to other x86 OSs like Solaris?

Thanks,

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Qt anyone?

2009-02-11 Thread pablosantosl...@terra.es
Hi Arno,

I think Qyoto is a really great initiative and a really strong point to 
make Mono shine.

But I wonder if you have plans (and resources) to:

- Relaunch a website with information/tutorials/downloads. It doesn't 
matter how good Qyoto is if no one can easily find it.
- Publish builds on the different OSs. IMHO what makes Qyoto rock is 
being able to create native GUIs for Solaris/Linux/Windows/Mac with a 
single codebase and minor tweaks. If we only have Linux, then sticking 
to WinForms or GTK# is still better, if only Mac I guess monoobjc is the 
right solution, and so on.

I think monoobjc is the perfect example: they've a solid website, full 
of samples, which gives a very good feeling when you enter it. You 
immediately think hey, this is a solid solution.

Regards,

pablo

Arno Rehn escribió:
 On Linux it's pretty straight forward. Download a recent kde-bindings tarball 
 and extract it somewhere. Build it as every other KDE module with cmake.
 Create a build directory, do cd build-dir; ccmake src-dir. Disable the 
 stuff 
 you don't want/don't need, like Soprano or Nepomuk bindings. Then just make; 
 make install as usual.
 We haven't tried building on Solaris yet. On OS X someone got it working, but 
 there seem to be issues with header files not being correctly found. You 
 might 
 have to play a bit to get it working there.

 On Friday 06 February 2009 20:36:29 pablosantosl...@terra.es wrote:
   
 are there tutorials to build on Mac/Linux/Solaris?

 Daniel Morgan escribió:
 
 Qyoto / Kimono Project
 http://ekarchive.elikirk.com/david/qyoto/

 Here is a different project with a similar goal of creating CLR bindings
 for qt - qt4dotnet http://code.google.com/p/qt4dotnet/

 If you google, you might be able to find ancient C# bindings to qt called
 qt# - but it has been abandoned.

 On a different subject, I wonder if someone would dare replace the glib
 and other dependencies in mono with qt.  Then create clr bindings to qt. 
 With these bindings, you could re-write mono using the clr bindings to
 qt.  Now, that would be interesting.

 Please note, I am not saying anything is wrong with glib and its
 dependencies, I just think it would be neat to re-write mono using qt
 instead of glib.  This way, you could write mono in C++ and have its
 internals OOP.

 Changing subject again, I think its good that there are many GUIs you can
 choose to use on top of mono: qyoto/kimono, asp.net, gtk#, swf, etc...

 --- On Fri, 2/6/09, pablosantosl...@terra.es pablosantosl...@terra.es 
   
 wrote:
   
 From: pablosantosl...@terra.es pablosantosl...@terra.es
 Subject: Re: [Mono-dev] Qt anyone?
 To: SE1 ikr...@gmail.com
 Cc: mono-devel-list@lists.ximian.com
 Date: Friday, February 6, 2009, 6:51 AM
 Ok, great. The problem is exactly what you mentioned: with
 no website
 and no info... there's no way developers can get
 interested on it.

 SE1 escribió:
 
 pablosantosl...@terra.es wrote:
   
   Hi there,

   After reading:
 
 http://tech.slashdot.org/article.pl?sid=09/02/05/2138228,

 
   and after the announce of the LGPL Qt release, I
 
 think it's quite clear

 
   there's a lot to gain from a *solid* Qt
 
 binding for Mono.

 
   I mean, the Qyoto doesn't look like an alive
 
 project anymore (not at

 
   least a couple of weeks ago) and if I remember
 
 correctly it is

 
   restricted to Linux (true cross-platform is
 
 needed).

 
   And... apps! I'd be eager to port plastic
 
 GUI to Qt/C#, and maybe we

 
   could start from the Qyoto stuff, but not sure
 
 about the status.

 
   pablo

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 
 http://lists.ximian.com/mailman/listinfo/mono-devel-list

 
 Someone brought the same questions up recently. If you
   
 read the thread at

 http://www.nabble.com/Qyoto-project-dead---ts21427284.html
 you'll see that

 
 although the Qyoto website is down, the project is
   
 still very much alive. It

 
 also works cross-platform, just lacks the building
   
 support at the moment.

 
 Ilmar
   
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list
 

   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] Qt anyone?

2009-02-06 Thread pablosantosl...@terra.es
Ok, great. The problem is exactly what you mentioned: with no website 
and no info... there's no way developers can get interested on it.

SE1 escribió:
 pablosantosl...@terra.es wrote:
   
   Hi there,

   After reading: http://tech.slashdot.org/article.pl?sid=09/02/05/2138228,
   and after the announce of the LGPL Qt release, I think it's quite clear
   there's a lot to gain from a *solid* Qt binding for Mono.

   I mean, the Qyoto doesn't look like an alive project anymore (not at
   least a couple of weeks ago) and if I remember correctly it is
   restricted to Linux (true cross-platform is needed).

   And... apps! I'd be eager to port plastic GUI to Qt/C#, and maybe we
   could start from the Qyoto stuff, but not sure about the status.


   pablo

 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list


 

 Someone brought the same questions up recently. If you read the thread at
 http://www.nabble.com/Qyoto-project-dead---ts21427284.html you'll see that
 although the Qyoto website is down, the project is still very much alive. It
 also works cross-platform, just lacks the building support at the moment.

 Ilmar
   
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


[Mono-dev] weird regression in 2.2 remoting

2009-02-06 Thread pablosantosl...@terra.es
Hi,

I'm having a lot of trouble with remoting and mono 2.2 in a very 
specific scenario.

We extensively use PNUnit (Parallel NUnit) for testing our software. We 
run tests on Windows, Linux, MacOS x86  PPC and now Solaris.

Well, I've just installed Mono 2.2 on MacOS PPC and PNUnit fails. It 
gets a problem initializing sockets when having to call back a remoting 
interface.

It didn't happen on 2.0.1 and it doesn't happen on 2.4 preview 2.

I was trying to isolate a test case but no way I can reproduce it 
outside the PNUnit. It fails too with official 2.2 on OpenSuse 11.

The message is: An exception was thrown by the type initializer for 
System.Net.Sockets.Socket

and the call stack points to TcpConnectionPool.cs:277

pablo
___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


Re: [Mono-dev] solaris x86

2009-02-06 Thread pablosantosl...@terra.es
Try

http://blastwave.network.com/testing/mono-2.0,REV=2009.01.21-SunOS5.8-i386-CSW.pkg.gz

I'll try to build 2.2 over the weekend.

pablo

Cetin Sert escribió:
 I'd like to know where these binaries can be downloaded.

 Regards,
 Cetin Sert

 2009/2/6 pablosantosl...@terra.es mailto:pablosantosl...@terra.es 
 pablosantosl...@terra.es mailto:pablosantosl...@terra.es

 Hi,

 I've just finished running our internal PNUnit test suite on Open
 Solaris x86 with hand-compiled Mono 2.2. It works. The same is
 true for
 Solaris 10 x86.

 I've published a test binary release of Mono 2.0.1 for Solaris
 x86 in
 blastwave a few weeks ago. Next one will be 2.2.

 MWF runs on 2.0.1 but (at least on my tests) it was not stable enough.

 Regards,

 pablo
 ___
 Mono-devel-list mailing list
 Mono-devel-list@lists.ximian.com
 mailto:Mono-devel-list@lists.ximian.com
 http://lists.ximian.com/mailman/listinfo/mono-devel-list


___
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list


  1   2   >