mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: Cset 1.1490.4.201 - dasd naming
@ 2004-01-27  8:52 Martin Schwidefsky
  2004-01-27  9:25 ` linux-2.6.1 x86_64 : STACK_TOP and text/data dada1
  2004-01-28 18:05 ` Cset 1.1490.4.201 - dasd naming Pete Zaitcev
  0 siblings, 2 replies; 8+ messages in thread
From: Martin Schwidefsky @ 2004-01-27  8:52 UTC (permalink / raw)
  To: Pete Zaitcev; +Cc: laroche, linux-kernel, zaitcev


Hi Pete,

> In a recent changeset in Linus' tree, there's your diff which blows up
> the dasd naming scheme, with the comment:
>  - Change dasd names from "dasdx" to "dasd_<busid>_".
We plan to do this for tape and other ccw devices as well (where applicable).

> This breaks mkinitrd, nash, and mount by label (not to mention every
> zipl.conf out there, because root= aliases to /sys/block/%s).
> Would you please explain what exactly you were thinking when you
> submitted that patch?
The reason for this change is the requirement to have persistent device
names. The /dev/dasdxyz naming schema heavily depends on the order in
which the device are added. Not good for persistent names. This change
affects four things: 1) the internal name, 2) the name of the sysfs
directory, 3) the root= parameter and 4) the hotplug events for dasd
devices.

blue skies,
   Martin

Linux/390 Design & Development, IBM Deutschland Entwicklung GmbH
Schönaicherstr. 220, D-71032 Böblingen, Telefon: 49 - (0)7031 - 16-2247
E-Mail: schwidefsky@de.ibm.com




^ permalink raw reply	[flat|nested] 8+ messages in thread

* linux-2.6.1 x86_64 : STACK_TOP and text/data
  2004-01-27  8:52 Cset 1.1490.4.201 - dasd naming Martin Schwidefsky
@ 2004-01-27  9:25 ` dada1
  2004-01-28 18:05 ` Cset 1.1490.4.201 - dasd naming Pete Zaitcev
  1 sibling, 0 replies; 8+ messages in thread
From: dada1 @ 2004-01-27  9:25 UTC (permalink / raw)
  To: linux-kernel

Hi all

Anybody knows why STACK_TOP is defined to 0xc0000000 in x86_64 ?

This means that stack allocated variables are all in the first 4GB 
quadrant in memory.
As the default virtual addresses of text/data of a programm are in this 
same quadrant, some programming errors could be undetected.
(Some programmers could still cast some pointers to 'unsigned int' for 
example, and this could 'work')

Tru64 has a different strategy :
Program text starts at 0x120000000
Program data starts at 0x140000000
Stack is just under text, but still not in the first 4GB quadrant.

This way, programmers errors are likely to be detected at dev time.

Another point is that BSS zone (heap) cannot exceed 3GB in x86_64 mode, 
since the brk hit the stack.
libc malloc then fallback to use a lot of arenas... suboptimal in terms 
of  vmas.

Strangely, in ia32 emulation mode, the stack is placed at the 4GB limit !

Thank you
Eric Dumazet


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Cset 1.1490.4.201 - dasd naming
  2004-01-27  8:52 Cset 1.1490.4.201 - dasd naming Martin Schwidefsky
  2004-01-27  9:25 ` linux-2.6.1 x86_64 : STACK_TOP and text/data dada1
@ 2004-01-28 18:05 ` Pete Zaitcev
  1 sibling, 0 replies; 8+ messages in thread
From: Pete Zaitcev @ 2004-01-28 18:05 UTC (permalink / raw)
  To: Martin Schwidefsky; +Cc: laroche, linux-kernel, zaitcev

On Tue, 27 Jan 2004 09:52:27 +0100
"Martin Schwidefsky" <schwidefsky@de.ibm.com> wrote:

> >  - Change dasd names from "dasdx" to "dasd_<busid>_".

> > This breaks mkinitrd, nash, and mount by label (not to mention every
> > zipl.conf out there, because root= aliases to /sys/block/%s).
> > Would you please explain what exactly you were thinking when you
> > submitted that patch?

> The reason for this change is the requirement to have persistent device
> names. The /dev/dasdxyz naming schema heavily depends on the order in
> which the device are added. Not good for persistent names. This change
> affects four things: 1) the internal name, 2) the name of the sysfs
> directory, 3) the root= parameter and 4) the hotplug events for dasd
> devices.

Martin, it is your architecture to break as you wish, but my gut feeling
is that you'd never get away with this if you did it on anything using
common use peripherals. This is a return to times of UNIX v6 and /dev/rk1a.
The chief penguin repeatedly stated that he wanted to see /dev/diskN
or similar (defined by a userland policy).

Considering Fedora Core 2, I do not know if we have time to repair the
damage. For the moment, I am patching a reverse patch.

Running a statically built dasd and having root=/dev/dasd_0.0.0202_1
in zipl.conf works fine. I am considering if we can get away with just
that and fixing mount by label to work. It's not the end of the world,
but it's annoying.

Is there a story of a real world deployment where the 2.4 scheme was
a hindrance which you could share? Honestly, I'm surprised you bring
the matter of "persistent names" instead of, say, exhaustion of
address range and majors.

-- Pete

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: linux-2.6.1 x86_64 : STACK_TOP and text/data
  2004-01-27 19:45         ` dada1
@ 2004-01-27 19:57           ` Andi Kleen
  0 siblings, 0 replies; 8+ messages in thread
From: Andi Kleen @ 2004-01-27 19:57 UTC (permalink / raw)
  To: dada1; +Cc: linux-kernel, aj

On Tue, 27 Jan 2004 20:45:24 +0100
dada1 <dada1@cosmosbay.com> wrote:

> Another thing I noticed in last glibc CVS (nptl)
> 
> Thread stacks are also allocated in the 1GB quadrant :
> 
> nptl/sysdeps/x86_64/pthreaddef.h
> /* We prefer to have the stack allocated in the low 4GB since this
>    allows faster context switches.  */      
> #define ARCH_MAP_FLAGS MAP_32BIT 
> 
> Is this really true ?
> Is memory allocated in the low 4GB is faster on x86_64  (64bit kernel, 
> 64 bit user prog ?)

That only applies to areas referenced set by set_thread_area() and
referenced by segment registers.  For pointers <4GB it can use a faster method at 
context switch.

They probably do that because they put the thread local data at the 
bottom of the stack and it has to be referenced using %gs.
They should use a fallback if the MAP_32BIT allocation fails.

I suspect they would be better off if they allocated the thread local
data separately. The 2.4 kernel used to do the same, but switched to 
separate allocation because this gives better cache colouring
(stacks tend to be aligned too much and use only parts of the cache) 

MAP_32BIT only allocates in the first 2GB BTW, it's really MAP_31BIT.

-Andi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: linux-2.6.1 x86_64 : STACK_TOP and text/data
  2004-01-27 19:29       ` Andi Kleen
@ 2004-01-27 19:45         ` dada1
  2004-01-27 19:57           ` Andi Kleen
  0 siblings, 1 reply; 8+ messages in thread
From: dada1 @ 2004-01-27 19:45 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel

Andi Kleen wrote:

>
>You're right. Thanks for reporting this. This seems to be a 2.6 
>specific bug, it didn't happen in 2.4.
>
>I will fix it. It should definitely use PAGE_OFFSET for 64bit 
>processes and 4GB for !3GB 32bit processes.
>
>-Andi
>
>
>  
>
Another thing I noticed in last glibc CVS (nptl)

Thread stacks are also allocated in the 1GB quadrant :

nptl/sysdeps/x86_64/pthreaddef.h
/* We prefer to have the stack allocated in the low 4GB since this
   allows faster context switches.  */      
#define ARCH_MAP_FLAGS MAP_32BIT 

Is this really true ?
Is memory allocated in the low 4GB is faster on x86_64  (64bit kernel, 
64 bit user prog ?)

Thank you

Eric Dumazet



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: linux-2.6.1 x86_64 : STACK_TOP and text/data
  2004-01-27 18:57     ` dada1
@ 2004-01-27 19:29       ` Andi Kleen
  2004-01-27 19:45         ` dada1
  0 siblings, 1 reply; 8+ messages in thread
From: Andi Kleen @ 2004-01-27 19:29 UTC (permalink / raw)
  To: dada1; +Cc: linux-kernel

On Tue, 27 Jan 2004 19:57:23 +0100
dada1 <dada1@cosmosbay.com> wrote:

> Andi Kleen wrote:
> 
> > STACK_TOP is only for 32bit a.out executables running on x86-64
> >
> >ELF 32bit and 64bit programs use different defaults.
> >
> >-Andi
> >
> >
> >  
> >
> Hi Andi
> 
> I'm afraid not Andi

You're right. Thanks for reporting this. This seems to be a 2.6 
specific bug, it didn't happen in 2.4.

I will fix it. It should definitely use PAGE_OFFSET for 64bit 
processes and 4GB for !3GB 32bit processes.

-Andi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: linux-2.6.1 x86_64 : STACK_TOP and text/data
  2004-01-27 18:24   ` linux-2.6.1 x86_64 : STACK_TOP and text/data Andi Kleen
@ 2004-01-27 18:57     ` dada1
  2004-01-27 19:29       ` Andi Kleen
  0 siblings, 1 reply; 8+ messages in thread
From: dada1 @ 2004-01-27 18:57 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kernel

Andi Kleen wrote:

> STACK_TOP is only for 32bit a.out executables running on x86-64
>
>ELF 32bit and 64bit programs use different defaults.
>
>-Andi
>
>
>  
>
Hi Andi

I'm afraid not Andi

I changed include/asm-x86_64/a.out.h

#define STACK_TOP  0x10c0000000   /* instead of 0xc0000000 */

then, after reboot :

file /sbin/init
/sbin/init: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for 
GNU/Linux 2.4.0, dynamically linked (uses shared libs), stripped


cat /proc/1/maps

00400000-00408000 r-xp 00000000 03:01 556032                             
/sbin/init
00508000-00509000 rw-p 00008000 03:01 556032                             
/sbin/init
00509000-0052a000 rwxp 00000000 00:00 0
10bfffe000-10c0000000 rwxp fffffffffffff000 00:00 0
2a95556000-2a95569000 r-xp 00000000 03:01 637734                         
/lib64/ld-2.3.2.so
2a95569000-2a9556a000 rw-p 00000000 00:00 0
2a95669000-2a9566a000 rw-p 00013000 03:01 637734                         
/lib64/ld-2.3.2.so
2a9566a000-2a957a2000 r-xp 00000000 03:01 637741                         
/lib64/libc-2.3.2.so
2a957a2000-2a9586a000 ---p 00138000 03:01 637741                         
/lib64/libc-2.3.2.so
2a9586a000-2a958a7000 rw-p 00100000 03:01 637741                         
/lib64/libc-2.3.2.so
2a958a7000-2a958ac000 rw-p 00000000 00:00 0

See you


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: linux-2.6.1 x86_64 : STACK_TOP and text/data
       [not found] ` <40162E9A.1080005@cosmosbay.com.suse.lists.linux.kernel>
@ 2004-01-27 18:24   ` Andi Kleen
  2004-01-27 18:57     ` dada1
  0 siblings, 1 reply; 8+ messages in thread
From: Andi Kleen @ 2004-01-27 18:24 UTC (permalink / raw)
  To: dada1; +Cc: linux-kernel

dada1 <dada1@cosmosbay.com> writes:

> Anybody knows why STACK_TOP is defined to 0xc0000000 in x86_64 ?

STACK_TOP is only for 32bit a.out executables running on x86-64
ELF 32bit and 64bit programs use different defaults.

-Andi

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-01-28 18:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-27  8:52 Cset 1.1490.4.201 - dasd naming Martin Schwidefsky
2004-01-27  9:25 ` linux-2.6.1 x86_64 : STACK_TOP and text/data dada1
2004-01-28 18:05 ` Cset 1.1490.4.201 - dasd naming Pete Zaitcev
     [not found] <OFCE30A640.024A04A1-ONC1256E28.003023EA-C1256E28.0030BF4E@de.ibm.com.suse.lists.linux.kernel>
     [not found] ` <40162E9A.1080005@cosmosbay.com.suse.lists.linux.kernel>
2004-01-27 18:24   ` linux-2.6.1 x86_64 : STACK_TOP and text/data Andi Kleen
2004-01-27 18:57     ` dada1
2004-01-27 19:29       ` Andi Kleen
2004-01-27 19:45         ` dada1
2004-01-27 19:57           ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®