Re: ufs multilabel performance (fwd)

From: O. Hartmann <ohartman_at_zedat.fu-berlin.de>
Date: Sun, 15 Apr 2012 22:17:08 +0200
Am 04/15/12 22:00, schrieb Garrett Cooper:
> On Apr 15, 2012, at 12:30 PM, O. Hartmann wrote:
> 
>> Am 04/15/12 15:59, schrieb Richard Kojedzinszky:
>>> Thank you for the reply.
>>>
>>> Unfortunately, dont know why, but on my xen virtualised environment,
>>> fbsd amd64 domU performs much slower, not only 30 times. Without
>>> multilabel, file creation speed is around 2500/s, but with multilabels
>>> enabled, it is only 15/s (!). so it is more than 100 times slower.
>>>
>>> And anyway freebsd is known to be fast as well, as functional. The power
>>> to serve. :)
>>>
>>> But in my environment, 15/s file creation is very-very slow. The
>>> hardware is a q6700 cpu with 4G ram, 2x1T sata disks in raid1, the host
>>> runs linux. I think with this hw the mentioned speed is really slow.
>>>
>>> Regards,
>>>
>>>
>>> Kojedzinszky Richard
>>> Euronet Magyarorszag Informatikai Zrt.
>>>
>>> On Sun, 15 Apr 2012, O. Hartmann wrote:
>>>
>>>> Date: Sun, 15 Apr 2012 13:20:23 +0200
>>>> From: O. Hartmann <ohartman_at_zedat.fu-berlin.de>
>>>> To: Richard Kojedzinszky <krichy_at_tvnetwork.hu>
>>>> Cc: freebsd-security_at_freebsd.org
>>>> Subject: Re: ufs multilabel performance (fwd)
>>>>
>>>> Am 04/14/12 21:37, schrieb Richard Kojedzinszky:
>>>>> Dear list,
>>>>>
>>>>> Although it is not only security-related question, I did not get any
>>>>> answer from freebsd-performance. The original question is below.
>>>>>
>>>>> Can someone give some advice?
>>>>>
>>>>> Thanks in advance,
>>>>>
>>>>>
>>>>> Kojedzinszky Richard
>>>>> Euronet Magyarorszag Informatikai Zrt.
>>>>>
>>>>> ---------- Forwarded message ----------
>>>>> Date: Thu, 10 Nov 2011 06:16:57 +0100 (CET)
>>>>> From: Richard Kojedzinszky <krichy_at_tvnetwork.hu>
>>>>> To: freebsd-performance_at_freebsd.org
>>>>> Subject: ufs multilabel performance
>>>>>
>>>>> Dear List,
>>>>>
>>>>> I've noticed that when I enable multilabel on an fs, a file creation
>>>>> gets around 20-30 times slower than without multilabel set.
>>>>>
>>>>> This one-liner can be used to test the differences:
>>>>> $ truss -D perl -e 'open(F, ">$_.file") for 1 .. 1000'
>>>>
>>>> Same here, creating files seems to be 10 - 30 times slower with
>>>> multilabels as it is without.
>>>>
>>>> But as several posts and discussions reflects, FreeBSD isn't supposed to
>>>> be fast although it is claimed that writing is the major than reading;
>>>> FBSD should serve functionality.
>>>>>
>>>>> And one can see that the open call takes much more when multilabel is
>>>>> set on an fs. It seems that only file creation needs that many time,
>>>>> when a file exists it is opened much faster.
>>>>>
>>>>> Could someone acknowledge this, and have some suggestions how to make it
>>>>> faster?
>>>>>
>>>>> Regards,
>>>>>
>>>>>
>>>>> Kojedzinszky Richard
>>>>> TvNetWork Nyrt.
>>>>> E-mail: krichy (at) tvnetwork [dot] hu
>>>>> PGP: 0x54B2BF0C8F59B1B7
>>>>>  Fingerprint = F6D4 3FFE AF03 CACF 0DCB  46A1 54B2 BF0C 8F59 B1B7
>>
>> At the moment, I'm troubled with a nasty kernel bug on all FreeBSD 10
>> boxes I have spare to test.
>>
>> I just tried to reproduce your observation and as far as I can go with
>> my experience, I can confirm that by using your perl script.
>>
>> I'd like to test this again with a small C program.
>>
>> I can only test the issue (test is too far optimistic, it's simply a
>> reproduction of your observation) on FreeBSD 10, the only remaining
>> FreeBSD server at our department is running FBSD 9-STABLE/amd64 and "in
>> production", so changing multilabel support is a bit harsh at the moment.
>>
>>
>> Sorry about crossposting, but I think this belongs more to CURRENT and
>> PERFORMANCE than SECURITY.
> 
> My suggestion is completely take perl out of the equation because the way you're invoking it above uses stdio and a few other things that add unnecessary overhead.
> 
> Try the attached C program/bourne shell snippet instead.
> 
> Cheers,
> -Garrett
> 
> #!/bin/sh
> 
> set -e
> 
> tmp=$(mktemp -d tmp.XXXXXX)
> trap "cd /; rm -Rf $tmp" EXIT
> cd $tmp
> 
> cat > test_open.c <<EOF
> 
> #include <fcntl.h>
> #include <stdio.h>
> #include <unistd.h>
> 
> int
> main(void)
> {
>         char buf[20];
>         int i;
> 
>         for (i = 0; i < 1000; i++) {
>                 sprintf(buf, "%d", i);
>                 close(open(buf, O_WRONLY|O_CREAT, 0600));
>         }
>         return (0);
> }
> EOF
> 
> gcc -o test_open test_open.c
> time ./test_open_______________________________________________

This was pretty fast ;-)


Received on Sun Apr 15 2012 - 18:17:16 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:25 UTC