-
-
Notifications
You must be signed in to change notification settings - Fork 606
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tomcat NIO connector fails #293
Comments
More backtrace: #0 0x00000000003be012 in cli_hlt () at /home/asias/src/cloudius-systems/osv/arch/x64/processor.hh:241 |
On Tue, May 6, 2014 at 5:01 AM, Asias He [email protected] wrote:
The only thing I can think of that can cause this (but this is just a wild It's been a while since I looked at this code, but looking now at By the way, it also seems that the epoll_file_closed() function, if called Asias, do you think that this workload really does epoll_wait() |
On Sun, May 11, 2014 at 7:35 PM, nyh [email protected] wrote:
I am not sure. Is there any way I can verify it? Asias |
On 05/12/2014 08:45 AM, Asias He wrote:
You can examine the type of the object: (gdb) set print object on If it says 'file', then Nadav is correct. How we actually get there can |
(gdb) f 20 |
Please reopen it since the commit does not really fix the issue. On Thu, Jul 3, 2014 at 2:35 PM, Avi Kivity [email protected] wrote:
Asias |
Reopened, while the patch is needed, it is not sufficient. |
Could it be related to #424 ? |
It may. Hard to see exactly how. What I am sure about is all the reference counting in that area is On 08/04/2014 09:16 PM, Tomasz Grabiec wrote:
|
''' ''' [backtrace] ''' (gdb) i th
|
On Mon, Aug 11, 2014 at 10:54 AM, Asias He [email protected] wrote:
|
On Mon, Aug 11, 2014 at 4:11 PM, nyh [email protected] wrote:
I am not testing this particular commit. I am testing if we have fixed the Asias |
On Mon, Aug 11, 2014 at 11:16 AM, Asias He [email protected] wrote:
Oh, sorry. I thought you did a bisection and came up with this comment :-) Nadav Har'El |
Sometimes I saw assert on A, sometimes on B.
|
I added the following to verify that we reached Line X twice.
|
I saved backtrace to fp->bt using backtrace_safe in the first time we hit line X. We are doing dup3 -> fdset -> fdrop in the first time.
|
Aha. So while the first fdrop() is calling file::close() (which is We need to move the call to file::close() from fdrop() to fdset() and On 08/19/2014 11:03 AM, Asias He wrote:
|
There is a race window between f_count reaches 0 and we set f_count to INT_MIN. This race would result in multiple call to fp->close() and rcu_dispose(fp) if we call them in fdrop(). To fix, we move fp->stop_polls and fp->close() from fdrop() into in fdset() and fdclose(). This will eliminate the multipe call to fp->close(), as there can be only one call to fdclose() or fdset(). Also, we set f_count to INT_MIN using CAS, this way, we make sure rcu_dispose(fp) won't be called twice. Fixes cloudius-systems#293. Signed-off-by: Asias He <[email protected]>
There is a race window between f_count reaches 0 and we set f_count to INT_MIN. This race would result in multiple call to fp->close() and rcu_dispose(fp) if we call them in fdrop(). To fix, we move fp->stop_polls and fp->close() from fdrop() into in fdset() and fdclose(). This will eliminate the multipe call to fp->close(), as there can be only one call to fdclose() or fdset(). Also, we set f_count to INT_MIN using CAS, this way, we make sure rcu_dispose(fp) won't be called twice. Fixes cloudius-systems#293. Signed-off-by: Asias He <[email protected]>
There is a race window between f_count reaches 0 and we set f_count to INT_MIN. This race would result in multiple call to fp->close() and rcu_dispose(fp) if we call them in fdrop(). To fix, we move fp->stop_polls and fp->close() from fdrop() into in fdset() and fdclose(). This will eliminate the multipe call to fp->close(), as there can be only one call to fdclose() or fdset(). Also, we set f_count to INT_MIN using CAS, this way, we make sure rcu_dispose(fp) won't be called twice. Fixes cloudius-systems#293. Signed-off-by: Asias He <[email protected]>
There is a race window between f_count reaches 0 and we set f_count to INT_MIN. This race would result in multiple call to fp->close() and rcu_dispose(fp) if we call them in fdrop(). To fix, we set f_count to INT_MIN using CAS, this way, we make sure fp->close() and rcu_dispose(fp) won't be called twice. Fixes cloudius-systems#293. Signed-off-by: Asias He <[email protected]>
There is a race window between f_count reaches 0 and we set f_count to INT_MIN. This race would result in multiple call to fp->close() and rcu_dispose(fp) if we call them in fdrop(). To fix, we set f_count to INT_MIN using CAS, this way, we make sure fp->close() and rcu_dispose(fp) won't be called twice. Fixes cloudius-systems#293. Signed-off-by: Asias He <[email protected]>
There is a race window between f_count reaches 0 and we set f_count to INT_MIN. This race would result in multiple call to fp->close() and rcu_dispose(fp) if we call them in fdrop(). To fix, we set f_count to INT_MIN using CAS, this way, we make sure fp->close() and rcu_dispose(fp) won't be called twice. Fixes cloudius-systems#293. Signed-off-by: Asias He <[email protected]>
Change tomcat to use NIO connector instead of BIO by editing:
$ vim osv/apps/tomcat/upstream/apache-tomcat-7.0.42/conf/server.xml
$ make image=tomcat
$ sudo make scripts/run.py -nv
May 06, 2014 12:14:36 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1753 ms
pure virtual method called
terminate called without an active exception
Aborted
[backtrace]
0x417694 <__gnu_cxx::__verbose_terminate_handler()+340>
0x3bb0c2 <do_poll(std::vector<poll_file, std::allocator<poll_file> >&, int)+290>
0x3bc867 <epoll_wait+391>
0x100003209a82 <Java_sun_nio_ch_EPollArrayWrapper_epollWait+210>
0x200000590b70 <???+5835632>
0x200000598b1f <???+5868319>
0x4083f8e96f <???+-2080839313>
$ sh perform-one-test.sh
$ cat perform-one-test.sh
!/usr/bin/env bash
GUEST_IP=192.168.122.89
if [ -z "$GUEST_IP" ]; then
echo "Please set GUEST_IP"
exit 1
fi
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "=== Warmup ==="
wrk -t4 -c256 -d30s http://${GUEST_IP}:8081/servlet/json
echo "=== Main test ==="
wrk_out_file=wrk.${TIMESTAMP}
echo "Output goes to $wrk_out_file"
wrk --latency -t4 -c128 -d1m http://${GUEST_IP}:8081/servlet/json > ${wrk_out_file}
echo "=== Results ==="
./wrk-parse.py ${wrk_out_file}
The text was updated successfully, but these errors were encountered: