Lion branch porting status
Just a quick update on the work I've been doing with the Lion branch: As of r30, all of the unit tests compile under Linux. There's a problem with the test harness that prevents 'make check' from running, but I've tried several of the tests individually and they appear to work. Most of the patches are very rough, specific to Linux only, and not ready for submission. I'll polish them up over the next few weeks and start sending them to the list. I've created a compat/ directory and included a private copy of libbsd, libkqueue, libpthread_workqueue, and libMachShims. I wrote libMachShims based on some earlier work porting launchd to Linux. It provides a subset of the Mach headers and emulates some functions like mach_absolute_time(). This avoids the need to sprinkle #ifdefs all around the Mach-specific sections of code. Once things settle down with the libdispatch porting effort, I'd like to take a look at if/how launchd could be combined with libdispatch to serve as a foundation for writing network daemons. Cheers, - Mark
Hi Mark, On Aug 29, 2011, at 6:26 PM, Mark Heily wrote:
Just a quick update on the work I've been doing with the Lion branch:
As of r30, all of the unit tests compile under Linux. There's a problem with the test harness that prevents 'make check' from running, but I've tried several of the tests individually and they appear to work.
the harness is mostly just posix_spawn with START_SUSPENDED followed by SIGCONT, along with a dispatch proc and timer source to watch for testcase exit/timeout. You can probably skip the START_SUSPENDED/SIGCONT if that is what is causing trouble, the proc source nowadays correctly handles processes that have exited before it gets setup (in that it assumes a non-existent pid means the process has exited).
Most of the patches are very rough, specific to Linux only, and not ready for submission. I'll polish them up over the next few weeks and start sending them to the list.
awesome, I'll try to stay on top of integrating patches into the repo as they come in on the list this time around... ;-)
I've created a compat/ directory and included a private copy of libbsd, libkqueue, libpthread_workqueue, and libMachShims. I wrote libMachShims based on some earlier work porting launchd to Linux. It provides a subset of the Mach headers and emulates some functions like mach_absolute_time(). This avoids the need to sprinkle #ifdefs all around the Mach-specific sections of code.
nice! not sure we want to import all those libraries into the macosforge repo though, can we provide instructions/scripts to download them automatically from a canonical location ? (similarly to the macosx build dependencies on Libc/xnu sources) Daniel
On Aug 29, 2011, at 7:07 PM, Daniel A. Steffen wrote:
nice! not sure we want to import all those libraries into the macosforge repo though, can we provide instructions/scripts to download them automatically from a canonical location ? (similarly to the macosx build dependencies on Libc/xnu sources)
Would some clever svn:external mechanism that allows you to refer to repositories from other repositories help in this case? Then we'd just need to create the reference under the compat/ directory and folks who checkout the whole tree would get all the bits. Is there a problem with that approach I'm missing? - Jordan
Le 30 août 2011 à 07:59, Jordan K. Hubbard a écrit :
On Aug 29, 2011, at 7:07 PM, Daniel A. Steffen wrote:
nice! not sure we want to import all those libraries into the macosforge repo though, can we provide instructions/scripts to download them automatically from a canonical location ? (similarly to the macosx build dependencies on Libc/xnu sources)
Would some clever svn:external mechanism that allows you to refer to repositories from other repositories help in this case? Then we'd just need to create the reference under the compat/ directory and folks who checkout the whole tree would get all the bits. Is there a problem with that approach I'm missing?
AFAIK, it does not provide a way to "automatically" checkout required library conditionally. It may not be desirable to checkout/download all compat libraries when building on OS X for instance, as it may not be desirable to checkout lic/xnu dependencies when building on Linux. -- Jean-Daniel
On 08/30/2011 03:59 AM, Jean-Daniel Dupas wrote:
Le 30 août 2011 à 07:59, Jordan K. Hubbard a écrit :
On Aug 29, 2011, at 7:07 PM, Daniel A. Steffen wrote:
nice! not sure we want to import all those libraries into the macosforge repo though, can we provide instructions/scripts to download them automatically from a canonical location ? (similarly to the macosx build dependencies on Libc/xnu sources)
Would some clever svn:external <http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html> mechanism that allows you to refer to repositories from other repositories help in this case? Then we'd just need to create the reference under the compat/ directory and folks who checkout the whole tree would get all the bits. Is there a problem with that approach I'm missing?
Yep, I think the svn:externals approach makes the most sense and is something I am already using :)
AFAIK, it does not provide a way to "automatically" checkout required library conditionally. It may not be desirable to checkout/download all compat libraries when building on OS X for instance, as it may not be desirable to checkout lic/xnu dependencies when building on Linux.
You can tell Subversion not to download external items by adding the '--ignore-externals' option to the 'svn checkout' command. Regards, - Mark
On 08/29/2011 10:07 PM, Daniel A. Steffen wrote:
the harness is mostly just posix_spawn with START_SUSPENDED followed by SIGCONT, along with a dispatch proc and timer source to watch for testcase exit/timeout. You can probably skip the START_SUSPENDED/SIGCONT if that is what is causing trouble, the proc source nowadays correctly handles processes that have exited before it gets setup (in that it assumes a non-existent pid means the process has exited).
Thanks, that pointed me at the exact problem. Now the testsuite is running and 50% of the tests are passing. There's still work to be done, but it's encouraging progress. I've enclosed the log at the end of this message.
I've created a compat/ directory and included a private copy of libbsd, libkqueue, libpthread_workqueue, and libMachShims.
nice! not sure we want to import all those libraries into the macosforge repo though, can we provide instructions/scripts to download them automatically from a canonical location ? (similarly to the macosx build dependencies on Libc/xnu sources)
That's fair enough; it would be hard to stay current with the changes to libkqueue/libpthread_workqueue. In my repository, I imported libbsd because it's very stable, and am using svn:externals to pull in the other libraries. If you prefer a script or Makefile target to download the dependencies, that's also an option. Regards, - Mark P.S. Log of the testsuite on Linux: ================================================== [TEST] Dispatch Apply [PID] 31305 ================================================== [BEGIN] dispatch_get_global_queue Actual: 0x2aee5834d280 Expected: 0x2aee5834d280 [PASS] dispatch_get_global_queue [BEGIN] count Actual: 32 Expected: 32 [PASS] count [BEGIN] nested count Actual: 32768 Expected: 32768 [PASS] nested count PASS: dispatch_apply ================================================== [TEST] Dispatch (Public) API [PID] 31352 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60ea80 Expected: 0x60ea80 [PASS] dispatch_get_main_queue PASS: dispatch_api ================================================== [TEST] Dispatch C99 [PID] 31387 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60ea80 Expected: 0x60ea80 [PASS] dispatch_get_main_queue PASS: dispatch_c99 ================================================== [TEST] Dispatch Debug [PID] 31422 ================================================== === log file opened for lt-dispatch_debug[31422] at 1314753091.213646 === com.apple.main-thread[0x60eac0] = { xrefcnt = 0xffffffff, refcnt = 0xffffffff, suspend_cnt = 0x0, locked = 1, target = com.apple.root.default-overcommit-priority[0x2b21d188c340], width = 0x0, running = 0x0, barrier = 1 }: dispatch_queue_t com.apple.root.default-priority[0x2b21d188c280] = { xrefcnt = 0xffffffff, refcnt = 0xffffffff, suspend_cnt = 0x0, locked = 1, target = [(nil)], width = 0x7fffffff, running = 0x1, barrier = 0 }: dispatch_queue_t kevent-source[0x18391c0] = { xrefcnt = 0x2, refcnt = 0x3, suspend_cnt = 0x1, locked = 0, target = com.apple.libdispatch-manager[0x2b21d188c700], pending_data = 0x0, pending_data_mask = 0x0, timer = { target = 0x0, last_fire = 0x0, interval = 0x0, flags = 0x0 }, filter = DISPATCH_EVFILT_TIMER }: dispatch_source_t semaphore[0x1839420] = { xrefcnt = 0x1, refcnt = 0x1, suspend_cnt = 0x0, locked = 0, value = 9223372036854775807, orig = 9223372036854775807 }: dispatch_group_t PASS: dispatch_debug ================================================== [TEST] Dispatch Queue Finalizer [PID] 31455 ================================================== [BEGIN] dispatch_queue_new Actual: 0x1439010 Expected: 0x1439010 [PASS] dispatch_queue_new [BEGIN] finalizer ran Actual: (nil) Expected: (nil) [PASS] finalizer ran [BEGIN] correct context Actual: 0xd5b9635e46269779 Expected: 0xd5b9635e46269779 [PASS] correct context PASS: dispatch_queue_finalizer ================================================== [TEST] Dispatch Group [PID] 31494 ================================================== [BEGIN] dispatch_group_async Actual: 0x13b0010 Expected: 0x13b0010 [PASS] dispatch_group_async [BEGIN] dispatch_group_async Actual: 0x2adbfc0008b0 Expected: 0x2adbfc0008b0 [PASS] dispatch_group_async sleeping... sleeping... [BEGIN] dispatch_group_wait Actual: 0 Expected: 0 sleeping... [PASS] dispatch_group_wait [BEGIN] dispatch_group_wait Actual: -1 Expected: 0 [FAIL] dispatch_group_wait (dispatch_group.c:89) dispatch_group.c:89 [BEGIN] dispatch_group_async Actual: 0x2adbfc000b10 Expected: 0x2adbfc000b10 [PASS] dispatch_group_async [BEGIN] Notification Received Actual: 0x60ec00 Expected: 0x60ec00 [PASS] Notification Received FAIL: dispatch_group ================================================== [TEST] Dispatch Overcommit [PID] 31737 ================================================== [BEGIN] dispatch_queue_create Actual: 0x7df0a0 Expected: 0x7df0a0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7df360 Expected: 0x7df360 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7df4f0 Expected: 0x7df4f0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7df680 Expected: 0x7df680 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7df810 Expected: 0x7df810 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7dfad0 Expected: 0x7dfad0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7dfc60 Expected: 0x7dfc60 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7dfdf0 Expected: 0x7dfdf0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7dff80 Expected: 0x7dff80 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0110 Expected: 0x7e0110 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e03d0 Expected: 0x7e03d0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0560 Expected: 0x7e0560 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e06f0 Expected: 0x7e06f0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0880 Expected: 0x7e0880 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0a10 Expected: 0x7e0a10 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0ba0 Expected: 0x7e0ba0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0d30 Expected: 0x7e0d30 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e0ec0 Expected: 0x7e0ec0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1050 Expected: 0x7e1050 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e11e0 Expected: 0x7e11e0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1370 Expected: 0x7e1370 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1500 Expected: 0x7e1500 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1690 Expected: 0x7e1690 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1820 Expected: 0x7e1820 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e19b0 Expected: 0x7e19b0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1b40 Expected: 0x7e1b40 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1cd0 Expected: 0x7e1cd0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1e60 Expected: 0x7e1e60 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e1ff0 Expected: 0x7e1ff0 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e2180 Expected: 0x7e2180 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e2310 Expected: 0x7e2310 [PASS] dispatch_queue_create [BEGIN] dispatch_queue_create Actual: 0x7e24a0 Expected: 0x7e24a0 [PASS] dispatch_queue_create [BEGIN] count Actual: 32 Expected: 32 [PASS] count PASS: dispatch_overcommit ================================================== [TEST] Dispatch Ping Pong [PID] 31803 ================================================== [BEGIN] dispatch_queue_create(ping) Actual: 0x2230010 Expected: 0x2230010 [PASS] dispatch_queue_create(ping) [BEGIN] dispatch_queue_create(pong) Actual: 0x22300c0 Expected: 0x22300c0 [PASS] dispatch_queue_create(pong) [BEGIN] dispatch_group_create Actual: 0x2230170 Expected: 0x2230170 [PASS] dispatch_group_create [BEGIN] count Actual: 1000000 Expected: 1000000 [PASS] count PASS: dispatch_pingpong ================================================== [TEST] Dispatch C++ [PID] 9741 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60e2c0 Expected: 0x60e2c0 [PASS] dispatch_get_main_queue PASS: dispatch_plusplus ================================================== [TEST] Dispatch Priority [PID] 9776 ================================================== /bin/bash: line 5: 9776 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_priority ================================================== [TEST] Dispatch Priority (Set Target Queue) [PID] 9820 ================================================== [BEGIN] q[i] Actual: 0x17f8010 Expected: 0x17f8010 [PASS] q[i] [BEGIN] q[i] Actual: 0x17f8110 Expected: 0x17f8110 [PASS] q[i] [BEGIN] q[i] Actual: 0x17f8210 Expected: 0x17f8210 [PASS] q[i] [BEGIN] q[i] Actual: 0x17f8310 Expected: 0x17f8310 [PASS] q[i] /bin/bash: line 5: 9820 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_priority2 ================================================== [TEST] Dispatch Private Concurrent/Wide Queue [PID] 9867 ================================================== Testing dispatch_async on queue hierarchy: global -> global -> global [BEGIN] concurrently completed workers Actual: 16 Expected: 16 [PASS] concurrently completed workers [BEGIN] max submission concurrency Actual: 4 Expected: 4 [PASS] max submission concurrency Testing dispatch_group_async on queue hierarchy: global -> global -> global [BEGIN] concurrently completed workers Actual: 16 Expected: 16 [PASS] concurrently completed workers [BEGIN] max submission concurrency Actual: 4 Expected: 4 [PASS] max submission concurrency Testing dispatch_sync on queue hierarchy: global -> global -> global [BEGIN] max sync concurrency Actual: 16 Expected: 16 [PASS] max sync concurrency Testing dispatch_apply on queue hierarchy: global -> global -> global [BEGIN] max apply concurrency Actual: 6 Expected: 8 [FAIL] max apply concurrency (dispatch_concur.c:168) dispatch_concur.c:168 Testing dispatch_async on queue hierarchy: concurrent -> global -> global /bin/bash: line 5: 9867 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_concur ================================================== [TEST] Dispatch Queue Specific [PID] 9967 ================================================== [BEGIN] get context for app Actual: 0x40bedc Expected: 0x40bedc [PASS] get context for app /bin/bash: line 5: 9967 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_context_for_key ================================================== [TEST] Dispatch Source Read [PID] 10013 ================================================== [SKIP] EVFILT_READ kevent not firing for test file (dispatch_read.c:70) [BEGIN] test_fin run Actual: (nil) Expected: (nil) [PASS] test_fin run PASS: dispatch_read ================================================== [TEST] Dispatch IO Convenience Read/Write [PID] 10046 ================================================== [BEGIN] group wait timed out Actual: 1 Expected: 0 [FAIL] group wait timed out (dispatch_read2.c:161) dispatch_read2.c:161 FAIL: dispatch_read2 ================================================== [TEST] Dispatch After [PID] 10086 ================================================== [BEGIN] can't finish faster than 5.5s Actual: 0 Expected: <506215959 [PASS] can't finish faster than 5.5s [BEGIN] must finish faster than 6.5s Actual: 0 Expected: <493785737 [PASS] must finish faster than 6.5s [BEGIN] can't finish faster than 1.5s Actual: 0 Expected: <500586797 [PASS] can't finish faster than 1.5s [BEGIN] must finish faster than 2.5s Actual: 0 Expected: <499414270 [PASS] must finish faster than 2.5s [BEGIN] can't finish faster than 0s Actual: 0 Expected: <35068 [PASS] can't finish faster than 0s [BEGIN] must finish faster than .5s Actual: 0 Expected: <499965674 [PASS] must finish faster than .5s PASS: dispatch_after ================================================== [TEST] Dispatch Source Timer [PID] 10126 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60f300 Expected: 0x60f300 [PASS] dispatch_get_main_queue [BEGIN] dispatch_source_create Actual: 0x7b7010 Expected: 0x7b7010 [PASS] dispatch_source_create [BEGIN] dispatch_source_create Actual: 0x7b8130 Expected: 0x7b8130 [PASS] dispatch_source_create [BEGIN] dispatch_source_create Actual: 0x7b8420 Expected: 0x7b8420 [PASS] dispatch_source_create [BEGIN] dispatch_source_create Actual: 0x7b8670 Expected: 0x7b8670 [PASS] dispatch_source_create [BEGIN] dispatch_source_create Actual: 0x7b8a90 Expected: 0x7b8a90 [PASS] dispatch_source_create [BEGIN] dispatch_source_create Actual: 0x7b8d80 Expected: 0x7b8d80 [PASS] dispatch_source_create [BEGIN] timer number Actual: 1 Expected: <3 [PASS] timer number timer[1] [BEGIN] timer number Actual: 2 Expected: <3 [PASS] timer number timer[2] /bin/bash: line 5: 10126 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_timer ================================================== [TEST] Dispatch Short Timer [PID] 10181 ================================================== /bin/bash: line 5: 10181 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_timer_short ================================================== [TEST] Dispatch Source Timeout [PID] 10220 ================================================== Firing long timer [BEGIN] Checking final value Actual: 10 Expected: 10 [PASS] Checking final value [BEGIN] Mini-timer fired Actual: 0 Expected: 1 [FAIL] Mini-timer fired (dispatch_timer_timeout.c:67) dispatch_timer_timeout.c:67 /bin/bash: line 5: 10220 Illegal instruction ./bsdtestharness ${dir}$tst FAIL: dispatch_timer_timeout ================================================== [TEST] Dispatch Semaphore [PID] 10259 ================================================== [BEGIN] count Actual: 10000 Expected: 10000 [PASS] count PASS: dispatch_sema ================================================== [TEST] Dispatch Suspend Timer [PID] 10297 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60f6c0 Expected: 0x60f6c0 [PASS] dispatch_get_main_queue [BEGIN] dispatch_source_timer_create Actual: 0xbb8010 Expected: 0xbb8010 [PASS] dispatch_source_timer_create [BEGIN] dispatch_source_timer_create Actual: 0xbb91e0 Expected: 0xbb91e0 [PASS] dispatch_source_timer_create tweedledee 1 (1) tweedledee 2 (2) tweedledee 3 (3) suspending timer for 3 seconds resuming timer [BEGIN] tweedledee tick count Actual: 3 Expected: 3 [PASS] tweedledee tick count [BEGIN] tweedledee virtual tick count Actual: 3 Expected: 3 [PASS] tweedledee virtual tick count tweedledee 4 (6) tweedledee 5 (7) tweedledee 6 (8) tweedledee 7 (9) [BEGIN] tweedledee tick count Actual: 7 Expected: 7 [PASS] tweedledee tick count [BEGIN] tweedledee virtual tick count Actual: 9 Expected: 9 [PASS] tweedledee virtual tick count [BEGIN] finalizer ran Actual: 0xbb91e0 Expected: 0xbb91e0 [PASS] finalizer ran PASS: dispatch_suspend_timer ================================================== [TEST] Dispatch Source Timer, bit 31 [PID] 10344 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60eac0 Expected: 0x60eac0 [PASS] dispatch_get_main_queue [BEGIN] dispatch_source_create Actual: 0x8ff010 Expected: 0x8ff010 [PASS] dispatch_source_create /bin/bash: line 5: 10344 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_timer_bit31 ================================================== [TEST] Dispatch Source Timer, bit 63 [PID] 10390 ================================================== 0 PASS: dispatch_timer_bit63 ================================================== [TEST] Dispatch Update Timer [PID] 10427 ================================================== [BEGIN] dispatch_get_main_queue Actual: 0x60ec80 Expected: 0x60ec80 [PASS] dispatch_get_main_queue [BEGIN] dispatch_source_create Actual: 0xd52010 Expected: 0xd52010 [PASS] dispatch_source_create [BEGIN] dispatch_source_timer_create Actual: 0xd52010 Expected: 0xd52010 [PASS] dispatch_source_timer_create 1 2 3 4 5 6 7 /bin/bash: line 5: 10427 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_timer_set_time ================================================== [TEST] Dispatch Starfish [PID] 10476 ================================================== lap: 10 count: 1000 delta: 918900711 ns math: 458.991364 ns / lap [BEGIN] Latency Actual: 458 Expected: <1000 [PASS] Latency /bin/bash: line 5: 10476 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_starfish ================================================== [TEST] Dispatch Cascade [PID] 11660 ================================================== maxcount = 3234 * * * * * * * * * * * * * * * * * * * * ** * * ** ** * ** *** * *** *** * *** *** * **** * * PASS: dispatch_cascade ================================================== [TEST] Dispatch Timer Drift [PID] 12590 ================================================== [BEGIN] dispatch_source_create Actual: 0x1a72010 Expected: 0x1a72010 [PASS] dispatch_source_create 0: jitter 0.000000, drift 0.000000 1: jitter 0.000069, drift 0.000069 2: jitter -0.000051, drift -0.000120 3: jitter 0.000027, drift 0.000078 4: jitter 0.000012, drift -0.000015 5: jitter 0.000014, drift 0.000002 6: jitter 0.000012, drift -0.000002 7: jitter 0.000052, drift 0.000040 8: jitter 0.000014, drift -0.000038 9: jitter 0.000133, drift 0.000119 10: jitter 0.000041, drift -0.000092 11: jitter 0.000020, drift -0.000021 12: jitter 0.000035, drift 0.000015 13: jitter -0.000006, drift -0.000041 14: jitter 0.000045, drift 0.000051 15: jitter 0.000021, drift -0.000024 16: jitter 0.000019, drift -0.000002 17: jitter 0.000058, drift 0.000039 18: jitter 0.000051, drift -0.000007 19: jitter 0.000027, drift -0.000024 20: jitter 0.000014, drift -0.000013 21: jitter 0.000036, drift 0.000022 22: jitter 0.000027, drift -0.000009 23: jitter 0.000020, drift -0.000007 24: jitter 0.000072, drift 0.000052 25: jitter 0.000017, drift -0.000055 26: jitter 0.000031, drift 0.000014 27: jitter 0.000007, drift -0.000024 28: jitter 0.000021, drift 0.000014 29: jitter 0.000000, drift -0.000021 30: jitter 0.000018, drift 0.000018 31: jitter 0.000027, drift 0.000009 32: jitter 0.000016, drift -0.000011 33: jitter 0.000044, drift 0.000028 34: jitter 0.000054, drift 0.000010 35: jitter 0.000032, drift -0.000022 36: jitter 0.000017, drift -0.000015 37: jitter 0.000023, drift 0.000006 38: jitter 0.000013, drift -0.000010 39: jitter 0.000025, drift 0.000012 40: jitter 0.000048, drift 0.000023 41: jitter 0.000108, drift 0.000060 42: jitter 0.000079, drift -0.000029 43: jitter 0.000036, drift -0.000043 44: jitter -0.000371, drift -0.000407 45: jitter 0.000036, drift 0.000407 46: jitter -0.000021, drift -0.000057 47: jitter 0.000027, drift 0.000048 48: jitter 0.000001, drift -0.000026 49: jitter 0.000004, drift 0.000003 50: jitter 0.000047, drift 0.000043 51: jitter 0.000131, drift 0.000084 52: jitter 0.000032, drift -0.000099 53: jitter 0.000007, drift -0.000025 54: jitter 0.000006, drift -0.000001 55: jitter 0.000074, drift 0.000068 56: jitter -0.000002, drift -0.000076 57: jitter 0.000040, drift 0.000042 58: jitter 0.000027, drift -0.000013 59: jitter 0.000020, drift -0.000007 60: jitter 0.000036, drift 0.000016 61: jitter 0.000015, drift -0.000021 62: jitter 0.000012, drift -0.000003 63: jitter 0.000009, drift -0.000003 64: jitter 0.000001, drift -0.000008 65: jitter 0.000038, drift 0.000037 66: jitter 0.000027, drift -0.000011 67: jitter 0.000015, drift -0.000012 68: jitter 0.000027, drift 0.000012 69: jitter 0.000013, drift -0.000014 70: jitter 0.000020, drift 0.000007 71: jitter 0.000018, drift -0.000002 72: jitter 0.000041, drift 0.000023 73: jitter 0.000021, drift -0.000020 74: jitter 0.000024, drift 0.000003 75: jitter 0.000025, drift 0.000001 76: jitter 0.000001, drift -0.000024 77: jitter 0.000024, drift 0.000023 78: jitter 0.000019, drift -0.000005 79: jitter 0.000011, drift -0.000008 80: jitter -0.000013, drift -0.000024 81: jitter 0.000011, drift 0.000024 82: jitter 0.000033, drift 0.000022 83: jitter 0.000035, drift 0.000002 84: jitter 0.000045, drift 0.000010 85: jitter 0.000023, drift -0.000022 86: jitter 0.000033, drift 0.000010 87: jitter 0.000006, drift -0.000027 88: jitter -0.000003, drift -0.000009 89: jitter 0.000017, drift 0.000020 90: jitter 0.000035, drift 0.000018 91: jitter 0.000012, drift -0.000023 92: jitter 0.000005, drift -0.000007 93: jitter 0.000016, drift 0.000011 94: jitter 0.000024, drift 0.000008 95: jitter 0.000012, drift -0.000012 96: jitter 0.000021, drift 0.000009 97: jitter 0.000020, drift -0.000001 98: jitter 0.000024, drift 0.000004 99: jitter 0.000040, drift 0.000016 100: jitter 0.000034, drift -0.000006 101: jitter 0.000037, drift 0.000003 102: jitter 0.000010, drift -0.000027 103: jitter 0.000009, drift -0.000001 104: jitter 0.000014, drift 0.000005 105: jitter 0.000036, drift 0.000022 106: jitter 0.000045, drift 0.000009 107: jitter 0.000014, drift -0.000031 108: jitter 0.000034, drift 0.000020 109: jitter 0.000027, drift -0.000007 110: jitter 0.000021, drift -0.000006 111: jitter 0.000043, drift 0.000022 112: jitter 0.000018, drift -0.000025 113: jitter -0.000039, drift -0.000057 114: jitter 0.000042, drift 0.000081 115: jitter 0.000049, drift 0.000007 116: jitter 0.000007, drift -0.000042 117: jitter 0.000004, drift -0.000003 118: jitter 0.000016, drift 0.000012 119: jitter 0.000024, drift 0.000008 120: jitter 0.000029, drift 0.000005 121: jitter 0.000010, drift -0.000019 122: jitter 0.000000, drift -0.000010 123: jitter 0.000035, drift 0.000035 124: jitter 0.000033, drift -0.000002 125: jitter 0.000038, drift 0.000005 126: jitter 0.000034, drift -0.000004 127: jitter 0.000035, drift 0.000001 128: jitter 0.000033, drift -0.000002 129: jitter 0.000013, drift -0.000020 130: jitter 0.000013, drift -0.000000 131: jitter 0.000015, drift 0.000002 132: jitter 0.000020, drift 0.000005 133: jitter 0.000001, drift -0.000019 134: jitter 0.000025, drift 0.000024 135: jitter 0.000043, drift 0.000018 136: jitter 0.000004, drift -0.000039 137: jitter 0.000011, drift 0.000007 138: jitter 0.000050, drift 0.000039 139: jitter 0.000049, drift -0.000001 140: jitter 0.000028, drift -0.000021 141: jitter 0.000035, drift 0.000007 142: jitter -0.000037, drift -0.000072 143: jitter 0.000065, drift 0.000102 144: jitter 0.000076, drift 0.000011 145: jitter 0.000097, drift 0.000021 146: jitter 0.000040, drift -0.000057 147: jitter 0.000008, drift -0.000032 148: jitter 0.000044, drift 0.000036 149: jitter 0.000037, drift -0.000007 150: jitter 0.000011, drift -0.000026 151: jitter 0.000045, drift 0.000034 152: jitter 0.000067, drift 0.000022 153: jitter 0.000042, drift -0.000025 154: jitter 0.000004, drift -0.000038 155: jitter 0.000002, drift -0.000002 156: jitter 0.000010, drift 0.000008 157: jitter 0.000085, drift 0.000075 158: jitter 0.000012, drift -0.000073 159: jitter 0.000041, drift 0.000029 160: jitter 0.000037, drift -0.000004 161: jitter 0.000006, drift -0.000031 162: jitter -0.000002, drift -0.000008 163: jitter 0.000046, drift 0.000048 164: jitter -0.000022, drift -0.000068 165: jitter 0.000034, drift 0.000056 166: jitter 0.000005, drift -0.000029 167: jitter 0.000000, drift -0.000005 168: jitter 0.000016, drift 0.000016 169: jitter 0.000035, drift 0.000019 170: jitter 0.000040, drift 0.000005 171: jitter 0.000010, drift -0.000030 172: jitter 0.000018, drift 0.000008 173: jitter 0.000048, drift 0.000030 174: jitter 0.000008, drift -0.000040 175: jitter 0.000028, drift 0.000020 176: jitter 0.000014, drift -0.000014 177: jitter 0.000058, drift 0.000044 178: jitter 0.000050, drift -0.000008 179: jitter 0.000011, drift -0.000039 180: jitter -0.000041, drift -0.000052 181: jitter 0.000034, drift 0.000075 182: jitter 0.000035, drift 0.000001 183: jitter 0.000005, drift -0.000030 184: jitter 0.000035, drift 0.000030 185: jitter 0.000021, drift -0.000014 186: jitter 0.000024, drift 0.000003 187: jitter 0.000024, drift 0.000000 188: jitter 0.000072, drift 0.000048 189: jitter 0.000025, drift -0.000047 190: jitter 0.000068, drift 0.000043 191: jitter 0.000012, drift -0.000056 192: jitter 0.000023, drift 0.000011 193: jitter 0.000006, drift -0.000017 194: jitter 0.000004, drift -0.000002 195: jitter -0.000024, drift -0.000028 196: jitter -0.000001, drift 0.000023 197: jitter 0.000011, drift 0.000012 198: jitter 0.000034, drift 0.000023 199: jitter 0.000044, drift 0.000010 200: jitter 0.000039, drift -0.000005 201: jitter 0.000022, drift -0.000017 202: jitter -0.000011, drift -0.000033 203: jitter 0.000027, drift 0.000038 204: jitter 0.000025, drift -0.000002 205: jitter 0.000026, drift 0.000001 206: jitter 0.000025, drift -0.000001 207: jitter -0.000013, drift -0.000038 208: jitter 0.000016, drift 0.000029 209: jitter 0.000004, drift -0.000012 210: jitter 0.000004, drift -0.000000 211: jitter 0.000033, drift 0.000029 212: jitter 0.000043, drift 0.000010 213: jitter 0.000002, drift -0.000041 214: jitter 0.000019, drift 0.000017 215: jitter 0.000051, drift 0.000032 216: jitter 0.000023, drift -0.000028 217: jitter 0.000000, drift -0.000023 218: jitter 0.000050, drift 0.000050 219: jitter 0.000035, drift -0.000015 220: jitter 0.000027, drift -0.000008 221: jitter 0.000051, drift 0.000024 222: jitter 0.000011, drift -0.000040 223: jitter 0.000044, drift 0.000033 224: jitter -0.000003, drift -0.000047 225: jitter 0.000015, drift 0.000018 226: jitter -0.000002, drift -0.000017 227: jitter 0.000022, drift 0.000024 228: jitter 0.000029, drift 0.000007 229: jitter 0.000019, drift -0.000010 230: jitter 0.000072, drift 0.000053 231: jitter 0.000017, drift -0.000055 232: jitter 0.000018, drift 0.000001 233: jitter 0.000029, drift 0.000011 234: jitter 0.000029, drift 0.000000 235: jitter 0.000029, drift -0.000000 236: jitter 0.000034, drift 0.000005 237: jitter 0.000028, drift -0.000006 238: jitter 0.000043, drift 0.000015 239: jitter -0.000022, drift -0.000065 240: jitter 0.000003, drift 0.000025 241: jitter 0.000013, drift 0.000010 242: jitter 0.000005, drift -0.000008 243: jitter 0.000027, drift 0.000022 244: jitter -0.000001, drift -0.000028 245: jitter 0.000041, drift 0.000042 246: jitter 0.000026, drift -0.000015 247: jitter 0.000017, drift -0.000009 248: jitter 0.000032, drift 0.000015 249: jitter 0.000014, drift -0.000018 [BEGIN] drift Actual: 0.000018 Expected: <0.001000 [PASS] drift PASS: dispatch_drift ================================================== [TEST] Dispatch Reader/Writer Queues [PID] 12877 ================================================== /bin/bash: line 5: 12877 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_readsync ================================================== [TEST] Dispatch Data [PID] 13056 ================================================== [BEGIN] Data size of concatenated dispatch data Actual: 34 Expected: 34 [PASS] Data size of concatenated dispatch data [BEGIN] Contiguous memory size Actual: 34 Expected: 34 [PASS] Contiguous memory size [BEGIN] buffer2 destroyed Actual: 1 Expected: 1 [PASS] buffer2 destroyed [BEGIN] buffer4 destroyed Actual: 1 Expected: 1 [PASS] buffer4 destroyed PASS: dispatch_data ================================================== [TEST] Dispatch IO [PID] 13091 ================================================== [SKIP] Large file not found (dispatch_io.c:80) [SKIP] Large file not found (dispatch_io.c:80) [SKIP] Large file not found (dispatch_io.c:80) [BEGIN] group wait timed out Actual: 1 Expected: 0 [FAIL] group wait timed out (dispatch_io.c:220) dispatch_io.c:220 FAIL: dispatch_io ================================================== [TEST] Dispatch IO Network test [PID] 13134 ================================================== Server started and listening on port 53389 Client-connecting on port ... 53389 Server accepted connection. Server now writing [BEGIN] group wait timed out Actual: 1 Expected: 0 [BEGIN] group wait timed out [FAIL] group wait timed out (dispatch_io_net.c:141) Actual: 1 dispatch_io_net.c:141 Expected: 0 [FAIL] group wait timed out (dispatch_io_net.c:291) dispatch_io_net.c:291 FAIL: dispatch_io_net ================================================== [TEST] Dispatch VM Pressure test - No DISPATCH_SOURCE_TYPE_VM [PID] 13175 ================================================== PASS: dispatch_vm ================================================== [TEST] Dispatch VNODE RENAME [PID] 13208 ================================================== !./bin/bash: line 5: 13208 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_vnode ================================================== [TEST] Dispatch select workaround test [PID] 13252 ================================================== [BEGIN] main_q Actual: 0x60f740 Expected: 0x60f740 [PASS] main_q [BEGIN] select source Actual: 0x145e310 Expected: 0x145e310 [PASS] select source [BEGIN] kevent read 1 Actual: 16.000000 Expected: <=512001.000000 [PASS] kevent read 1 [BEGIN] close Actual: 0 Expected: 0 [PASS] close [SKIP] EVFILT_READ kevent not firing for test file (dispatch_select.c:98) [BEGIN] main_q Actual: 0x60f740 Expected: 0x60f740 [PASS] main_q [BEGIN] select source Actual: 0x145e410 Expected: 0x145e410 [PASS] select source [BEGIN] kevent read 1 Actual: 8.000000 Expected: <=512001.000000 [PASS] kevent read 1 /bin/bash: line 5: 13252 Terminated ./bsdtestharness ${dir}$tst FAIL: dispatch_select =============================== 17 of 34 tests failed Please report to mark@heily.com ===============================
On Aug 30, 2011, at 18:34, Mark Heily wrote:
On 08/29/2011 10:07 PM, Daniel A. Steffen wrote:
the harness is mostly just posix_spawn with START_SUSPENDED followed by SIGCONT, along with a dispatch proc and timer source to watch for testcase exit/timeout. You can probably skip the START_SUSPENDED/SIGCONT if that is what is causing trouble, the proc source nowadays correctly handles processes that have exited before it gets setup (in that it assumes a non-existent pid means the process has exited).
Thanks, that pointed me at the exact problem. Now the testsuite is running and 50% of the tests are passing. There's still work to be done, but it's encouraging progress. I've enclosed the log at the end of this message.
looks like a great start! There are a bunch of failures that indicate the whole test didn't run or crashed (so didn't output any individual FAILs), and a number of the SKIPs can probably be overcome by adjusting what they test for (e.g. Mac OS X-specific file locations) so the total number of individual tests that are run should increase as more of the testsuite is fixed up.
I've created a compat/ directory and included a private copy of libbsd, libkqueue, libpthread_workqueue, and libMachShims.
nice! not sure we want to import all those libraries into the macosforge repo though, can we provide instructions/scripts to download them automatically from a canonical location ? (similarly to the macosx build dependencies on Libc/xnu sources)
That's fair enough; it would be hard to stay current with the changes to libkqueue/libpthread_workqueue. In my repository, I imported libbsd because it's very stable, and am using svn:externals to pull in the other libraries. If you prefer a script or Makefile target to download the dependencies, that's also an option.
svn:externals for the external dependencies sound fine to me, I don't think they will work with the macosforge git mirror though git://git.macosforge.org/libdispatch.git so we should probably still note how to get to them manually (or provide a script to do so?) Daniel
participants (4)
-
Daniel A. Steffen
-
Jean-Daniel Dupas
-
Jordan K. Hubbard
-
Mark Heily