zeev Mon Jan 15 06:55:30 2001 EDT
Modified files:
/php4/sapi/isapi/stresstest notes.txt stresstest.cpp
Log:
- Implement quick file comparing routine
- Fix crash - wait on the threads themselves, not on Event objects.
It takes time between the time a thread signals the event, and the
time it actually terminates (shutdown code) - so FreeLibrary() and
the main() termination could occur before all of the threads
terminated...
Index: php4/sapi/isapi/stresstest/notes.txt
diff -u php4/sapi/isapi/stresstest/notes.txt:1.3
php4/sapi/isapi/stresstest/notes.txt:1.4
--- php4/sapi/isapi/stresstest/notes.txt:1.3 Sun Jan 14 17:52:47 2001
+++ php4/sapi/isapi/stresstest/notes.txt Mon Jan 15 06:55:30 2001
@@ -1,46 +1,56 @@
-This stress test program is for debugging threading issues with the isapi module.
+This stress test program is for debugging threading issues with the ISAPI
+module.
-2 ways to use it.
+2 ways to use it:
1: test any php script file on multiple threads
2: run the php test scripts bundled with the source code
+
GLOBAL SETTINGS
+===============
-If you need to set special environement variables, in addition to your regular
environment, create a file that contains them, one setting per line:
+If you need to set special environement variables, in addition to your
+regular environment, create a file that contains them, one setting per line:
MY_ENV_VAR=XXXXXXXX
-This can be used to simulate isapi environment variables if need be.
+This can be used to simulate ISAPI environment variables if need be.
-By default, stress test uses 10 threads. To change this, change the define
NUM_THREADS in stresstest.cpp.
+By default, stress test uses 10 threads. To change this, change the define
+NUM_THREADS in stresstest.cpp.
-1: test any php script file on multiple threads
+
+
+1: Test any php script file on multiple threads
+===============================================
-Create a file that contains a list of php script files, one per line. If you need to
provide input, place the GET data, or Query String, after the filename. File contents
would look like:
+Create a file that contains a list of php script files, one per line. If
+you need to provide input, place the GET data, or Query String, after the
+filename. File contents would look like:
e:\inetpub\pages\index.php
e:\inetpub\pages\info.php
e:\inetpub\pages\test.php a=1&b=2
-run: stresstest L files.txt
+Run: stresstest L files.txt
-2: run the php test scripts bundled with the source code
-
-supply the path to the parent of the "tests" directory
-(expect a couple long pauses for a couple of the larger tests)
-run: stresstest T c:\php4-source
+2: Run the php test scripts bundled with the source code
+========================================================
+supply the path to the parent of the "tests" directory (expect a couple
+long pauses for a couple of the larger tests)
-TODO:
+Run: stresstest T c:\php4-source
-Make more options configurable: number of threads, itterations, etc.
-Improve stdout output to make it more usefull
-Implement support for SKIPIF
+TODO:
-Improve speed of CompareFile function (too slow on big files).
+* Make more options configurable: number of threads, iterations, etc.
+* Improve stdout output to make it more useful
+* Implement support for SKIPIF
+* Improve speed of CompareFile function (too slow on big files).
Index: php4/sapi/isapi/stresstest/stresstest.cpp
diff -u php4/sapi/isapi/stresstest/stresstest.cpp:1.9
php4/sapi/isapi/stresstest/stresstest.cpp:1.10
--- php4/sapi/isapi/stresstest/stresstest.cpp:1.9 Sun Jan 14 17:52:47 2001
+++ php4/sapi/isapi/stresstest/stresstest.cpp Mon Jan 15 06:55:30 2001
@@ -31,7 +31,6 @@
//
#define NUM_THREADS 10
#define ITERATIONS 1
-HANDLE terminate[NUM_THREADS];
HANDLE StartNow;
// quick and dirty environment
typedef CMapStringToString TEnvironment;
@@ -101,32 +100,50 @@
BOOL CompareFiles(const char*f1, const char*f2)
{
- FILE *fp1 = fopen(f1,"r");
- if (!fp1) return FALSE;
- FILE *fp2 = fopen(f2,"r");
- if (!fp2) {
+ FILE *fp1, *fp2;
+ bool retval;
+ char buf1[1024], buf2[1024];
+ int length1, length2;
+
+ if ((fp1=fopen(f1, "r"))==NULL) {
+ return FALSE;
+ }
+
+ if ((fp2=fopen(f2, "r"))==NULL) {
fclose(fp1);
return FALSE;
}
+
+ retval = TRUE; // success oriented
+ while (true) {
+ length1 = fread(buf1, 1, sizeof(buf1), fp1);
+ length2 = fread(buf2, 1, sizeof(buf2), fp2);
+
+ buf2[0] = 0;
+ // check for end of file
+ if (feof(fp1)) {
+ if (!feof(fp2)) {
+ retval = FALSE;
+ }
+ break;
+ } else if (feof(fp2)) {
+ if (!feof(fp1)) {
+ retval = FALSE;
+ }
+ break;
+ }
- CString file1, file2, line;
- char buf[1024];
- while (fgets(buf, sizeof(buf), fp1)) {
- line = buf;
- line.TrimLeft();
- line.TrimRight();
- file1+=line;
+ // compare data
+ if (length1!=length2
+ || memcmp(buf1, buf2, length1)!=0) {
+ retval = FALSE;
+ break;
+ }
}
fclose(fp1);
- while (fgets(buf, sizeof(buf), fp2)) {
- line = buf;
- line.TrimLeft();
- line.TrimRight();
- file2+=line;
- }
fclose(fp2);
- return file1==file2;
+ return retval;
}
BOOL ReadGlobalEnvironment(const char *environment)
@@ -202,16 +219,13 @@
DWORD tid;
HANDLE threads[NUM_THREADS];
for (DWORD i=0; i< NUM_THREADS; i++) {
- terminate[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
- if ((threads[i]=CreateThread(NULL, 0, IsapiThread, &terminate[i],
CREATE_SUSPENDED, &tid))==NULL){
- SetEvent(terminate[i]);
- }
+ threads[i]=CreateThread(NULL, 0, IsapiThread, NULL, CREATE_SUSPENDED,
+&tid);
}
for (i=0; i< NUM_THREADS; i++) {
if (threads[i]) ResumeThread(threads[i]);
}
// wait for threads to finish
- WaitForMultipleObjects(NUM_THREADS, terminate, TRUE, INFINITE);
+ WaitForMultipleObjects(NUM_THREADS, threads, TRUE, INFINITE);
}
void DoFileList(const char *filelist, const char *environment)
@@ -394,7 +408,8 @@
printf("Done\r\n");
}
-int main(int argc, char* argv[]) {
+int main(int argc, char* argv[])
+{
LPVOID lpMsgBuf;
char *filelist=NULL, *environment=NULL;
@@ -454,8 +469,9 @@
_snprintf(TestPath, sizeof(TestPath)-1, "%s\\tests", filelist);
else strcpy(TestPath, "tests");
DoTestFiles(TestPath, environment);
- } else
+ } else {
DoFileList(filelist, environment);
+ }
// cleanup
@@ -470,8 +486,8 @@
DWORD CALLBACK IsapiThread(void *p)
{
- HANDLE *terminate = (HANDLE *)p;
DWORD filecount = IsapiFileList.GetSize();
+
for (DWORD j=0; j<ITERATIONS; j++) {
for (DWORD i=0; i<filecount; i++) {
// execute each file
@@ -496,7 +512,6 @@
Sleep(10);
}
}
- SetEvent(*terminate);
printf("Thread ending...\n");
return 0;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]