Hi Or!
Extended my tests on a second pair of servers with similiar but
different hardware with same software configuration. Stock debian
(lenny) kernel 2.6.26-1-amd64, and Debian IB-Stack, and stgt in version
0.9.0 and 0.9.3.
System pair A
Supermicro board
2 x AMD Opteron Quadcore
32 GB RAM
Mellanox Infinihost III
System pair B
Asus board
1 x AMD Opteron Dualcore
8 GB RAM
Mellanox ConnectX
STGT 0.9.3 :
System A and System B
Cores
Threads 1 2 or more
1 fail fail
2 fail fail
4 fail fail
STGT 0.9.0 :
System A
Cores
Threads 1 2 or more
1 run fail
2 fail fail
4 fail fail
STGT 0.9.0 :
System B
Cores
Threads 1 2
1 run run
2 fail fail
4 fail fail
Conclusion: There are two independend errors.
Error One : Was introduced (8/2008) after stgt version 0.9.0 wich
affects single Memory-Controller
as well as Dual-Memory-Controller Systems.
Error Two : Is older than error One (firstly documented 2/2008 on stgt).
It has something to do with the number of active cores
(Memory-Controllers) and/or the number of simultaneous threads.
On System B with only one physical CPU and therefore only one memory
controller using version 0.9.0 cures error One. For one or two cores
this systems with one thread runs errorfree. But error Two is still lurking.
Doing parallel access System B fails, too.
The behavior of System A with two memory-conrollers show in comparison
System B the additional influence
of the number of Memory-Controllers. If using 2 or more cores the read
error already ocures with one single thread.
The new test-script with threading
import random
import os
import time
import threading
#writing
writeCmd = 'lmdd if=internal of=/dev/sdc opat=1 bs=1M count=1000'
readCmd = 'lmdd of=internal if=/dev/sdc ipat=1 bs=1M count=1000 mismatch=10'
maxThreads = 1
def tee( cmd ):
print cmd
os.system( cmd )
tee( writeCmd )
def readFunc():
tee( readCmd )
while True:
# sleepTime = random.randrange(0,10)
sleepTime = 10
print 'sleeping %s seconds ..' % sleepTime
time.sleep( sleepTime )
print 'starting %s threads ..' % maxThreads
threadList = []
for threadID in range( maxThreads ):
threadList.append( threading.Thread(group=None, target=readFunc) )
for threadID in range( maxThreads ):
threadList[ threadID ].start()
Cheers,
Volker
--
====================================================
inqbus it-consulting +49 ( 341 ) 5643800
Dr. Volker Jaenisch http://www.inqbus.de
Herloßsohnstr. 12 0 4 1 5 5 Leipzig
N O T - F Ä L L E +49 ( 170 ) 3113748
====================================================
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html