HP-UX: 在HP-UX 10.20上安装Oracle 7.3.3版时挂起。
问题描述
我使用运行HP-UX 10.20的9000/K,我试图在上面安装Oracle 7.3.3版,但安装挂起,我们找不到原因。
是否能够为我提供帮助?
配置信息
操作系统 - HP-UX
版本 - 10.20
硬件系统 - HP9000
系列 -
解决方法
问题是由于在PA8000系统上使用VxFS Direct IO和SHMEM_MAGIC时的死锁引起的。
使用下面的方法禁用superpage exec():
# adb -w /stand/vmunix
allow_superpage_text?W 0
这个规避方法应当可以解决这个问题。
缺陷实际上在VxFS代码中。VX_DIRECT IO特性的设计只适用于用户IO (UIOSEG_USER),问题在于VxFS不检查UIOSEG_PAGEIN IO,然后有可能在保持区域RW锁定的同时,调用vx_dio_iovec()/vx_memiolock()及exec_superpage_text(),从而导致到达useracc()/pfault()/findpreg()/lock_write()时出现死锁:
save+0x0
_swtch+0x2e0
real_sleep+0x2f4
_sleep+0x14
lock_write+0x2c8
findpreg+0xb0
pfault+0x98
lacc+0x68
vx_memiolock+0x3c
vx_dio_iovec+0x420
vx_dio_rdwri+0x104
vx_dio_readi+0x8c
vx_read1+0x2e4
vx_rdwr+0x16c
vn_rdwr+0x8c
exec_superpage_text+0x168
getxfile+0x478
execve+0xb70
syscall+0x1a4
解决方法是将vx_dio_check()中的EINVAL返回non-UIOSEG_USER段的IO,然后vx_read1()将返回标准IO通道,从而避免死锁。
针对此问题的SR 1653223669已经打开。
.........following with all English text ....
A4747242 [A4747242/TRAK/English]
HP-UX: Installation of Oracle release 7.3.3 hangs with HP-UX 10.20.
Problem Description
I have a 9000/K with HP-UX 10.20 on which I am trying to install Oracle release 7.3.3. The installation hangs and we cannot find the cause.
Can you help?
Configuration Info
Operating System - HP-UX
Version - 10.20
Hardware System - HP9000
Series -
Solution
The problem is caused by a deadlock when using VxFS Direct IO and SHMEM_MAGIC on PA8000 systems.
Use this work-around to disable superpage exec():
# adb -w /stand/vmunix
allow_superpage_text?W 0
The work-around should solve the problem.
The defect is actually in the VxFS code. The VX_DIRECT IO feature is designed to work for user IOs only(UIOSEG_USER). The problem is that VxFS does not check for UIOSEG_PAGEIN IOs. It is then possible to call vx_dio_iovec()/vx_memiolock() along the exec_superpage_text()
while holding the region RW lock, thus resulting in a deadlock when
reaching useracc()/pfault()/findpreg()/lock_write():
save+0x0
_swtch+0x2e0
real_sleep+0x2f4
_sleep+0x14
lock_write+0x2c8
findpreg+0xb0
pfault+0x98
lacc+0x68
vx_memiolock+0x3c
vx_dio_iovec+0x420
vx_dio_rdwri+0x104
vx_dio_readi+0x8c
vx_read1+0x2e4
vx_rdwr+0x16c
vn_rdwr+0x8c
exec_superpage_text+0x168
getxfile+0x478
execve+0xb70
syscall+0x1a4
The fix would be to return EINVAL in vx_dio_check() for IOs with non-UIOSEG_USER segments. Then vx_read1() would fall-back to the
regular IO path and this would avoid the deadlock.
SR 1653223669 has been opened for this problem.