blob: 6509e3efcb477dabfb06a0fd63d448e2f15a069c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
This README file lists all the example applications for the Proactor framework.
Test/Example Applications for Proactor:
=========================================
The following tests are available.
o $ACE_ROOT/tests/Aio_Platform_Test.cpp : Tests basic limits
pertaining to the POSIX features
o $ACE_ROOT/examples/Reactor/Proactor/test_aiocb.cpp :
This is a C++ program for testing the AIOCB (AIO Control
Blocks) based completion approach which uses <aio_suspend> for
completion querying.
o $ACE_ROOT/examples/Reactor/Proactor/test_aiosig.cpp : This is a
C++ program for testing the Signal based completion approach
that uses <sigtimedwait> for completion querying.
o $ACE_ROOT/examples/Reactor/Proactor/test_aiocb_ace.cpp: Portable
version of test_aiocb.cpp. (Same as test_aiocb.cpp, but uses
ACE_DEBUGs instead of printf's and ACE_Message_Blocks instead
of char*'s.
o $ACE_ROOT/examples/Reactor/Proactor/test_aiosig_ace.cpp: Portable
version of test_aiosig.cpp. (Same as test_aiosig.cpp, but uses
ACE_DEBUGs instead of printf's and ACE_Message_Blocks instead
of char*'s.
o test_proactor.cpp (with ACE_POSIX_AIOCB_Proactor) : Test for
ACE_Proactor which uses AIOCB (AIO Control Blocks) based
completions strategy Proactor. (#define
ACE_POSIX_AIOCB_PROACTOR in the config file, but this is the
default option)
o test_proactor.cpp (with ACE_POSIX_SIG_Proactor) : Test for
ACE_Proactor which uses real time signal based completion
strategy proactor. (#define ACE_POSIX_SIG_PROACTOR in the
config file)
o test_multiple_loops.cpp : This example application shows how
to write programs that combine the Proactor and Reactor event
loops. This is possible only on WIN32 platform.
o test_timeout.cpp : Multithreaded application testing the Timers
mechanism of the Proactor.
o test_timeout_st.cpp : Sinle threaded version of test_timeout.cpp.
Behavior of POSIX AIO of various platforms:
==========================================
Summary:
======
Sun Sun Lynx
5.6 5.7
test_aiocb_ace Good Good Good
(test_aiocb)
test_aiosig_ace Inconst Inconst Inconst
Inconst.: Inconsistent execution.
Aio_Platform_Test:
================
Sun5.6 CC:
---------
Status : OK
Problems: 1.The constant which indicates the maximum
concurrent asynchronous I/Os is -1 at run
time. This should be atleast 1.
Sun57 CC:
--------
Status : OK
Problems: <Same as in sun56 CC>
Lynx g++:
--------
Status : OK
Problems: AIO_LISTIO_MAX, AIO_MAX and SIGQUEUE_MAX are defined
but their values are -1
test_aiocb.cpp
=============
Sun5.6 CC:
---------
Status : GOOD
Problems: NONE
Sun57 CC:
--------
Status : GOOD
Problems: NONE
Lynx g++:
--------
test_aiosig.cpp:
===============
Sun5.6 CC:
---------
Status : GOOD
Problems: NONE
Sun57 CC:
--------
Status : BAD
Problems: 1. If 2 <aio_> calls are issed, only one completion
gets through, second one hangs.
Lynx g++:
--------
test_aiosig_ace.cpp:
====================
Sun5.6 CC:
---------
Status : BAD
Problems: 1. <aio_read> and <aio_write> calls return 0 but
sets the<errno> to 48 which is <Operation Not
Supported>
2. I issue <aio_read/write> with a RT signal enabled. It
returns but with the a wrong signal code, -2, which is
SI_QUEUE. But we are supposed to get SI_ASYNCIO
3*.IMPORTANT: If I issue two <aio_read/write> calls,
they get queued and
they execute correctly. But their completions are not
queued up correctly.
4. Calling <sigtimedwait> sometimes print the string
"err = 22". But <sigtimedwait> doesnt return a error and
errno is also not set to any error values. (err == 22, may
be referring to errno 22 which means Invalid Argument)
Sun57 CC:
--------
Status : BAD
Problems: <same as in sun56 CC>
Lynx g++:
--------
Status : OK
Problems: 1. In between my Proactor test application the
<errno> is getting set to <77>. This means
Unsupported POSIX operation. But none of my
<posix> calls return -1.
TO-DO : 1. Run <gdb> and watch for <errno> and figure when
it is changing over to 77.
|