- File:
-
- 1 edited
-
libcfa/src/concurrency/io/setup.cfa (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/io/setup.cfa
r19cb0cb rbf0263c 26 26 27 27 #if !defined(CFA_HAVE_LINUX_IO_URING_H) 28 void ?{}(io_context_params & this) libcfa_public{}29 30 void ?{}( io_context$& this, struct cluster & cl) {}31 void ^?{}( io_context$& this) {}28 void ?{}(io_context_params & this) {} 29 30 void ?{}($io_context & this, struct cluster & cl) {} 31 void ^?{}($io_context & this) {} 32 32 33 33 void __cfa_io_start( processor * proc ) {} … … 37 37 void __cfa_io_stop ( processor * proc ) {} 38 38 39 io_arbiter$* create(void) { return 0p; }40 void destroy( io_arbiter$*) {}39 $io_arbiter * create(void) { return 0p; } 40 void destroy($io_arbiter *) {} 41 41 42 42 #else … … 66 66 #pragma GCC diagnostic pop 67 67 68 void ?{}(io_context_params & this) libcfa_public{68 void ?{}(io_context_params & this) { 69 69 this.num_entries = 256; 70 70 } … … 105 105 106 106 107 static void __io_uring_setup ( io_context$& this, const io_context_params & params_in, int procfd );108 static void __io_uring_teardown( io_context$& this );109 static void __epoll_register( io_context$& ctx);110 static void __epoll_unregister( io_context$& ctx);111 void __ioarbiter_register( io_arbiter$ & mutex, io_context$& ctx );112 void __ioarbiter_unregister( io_arbiter$ & mutex, io_context$& ctx );113 114 void ?{}( io_context$& this, processor * proc, struct cluster & cl) {107 static void __io_uring_setup ( $io_context & this, const io_context_params & params_in, int procfd ); 108 static void __io_uring_teardown( $io_context & this ); 109 static void __epoll_register($io_context & ctx); 110 static void __epoll_unregister($io_context & ctx); 111 void __ioarbiter_register( $io_arbiter & mutex, $io_context & ctx ); 112 void __ioarbiter_unregister( $io_arbiter & mutex, $io_context & ctx ); 113 114 void ?{}($io_context & this, processor * proc, struct cluster & cl) { 115 115 /* paranoid */ verify( cl.io.arbiter ); 116 116 this.proc = proc; … … 122 122 } 123 123 124 void ^?{}( io_context$& this) {124 void ^?{}($io_context & this) { 125 125 __cfadbg_print_safe(io_core, "Kernel I/O : tearing down io_context %u\n", this.fd); 126 126 … … 129 129 } 130 130 131 static void __io_uring_setup( io_context$& this, const io_context_params & params_in, int procfd ) {131 static void __io_uring_setup( $io_context & this, const io_context_params & params_in, int procfd ) { 132 132 // Step 1 : call to setup 133 133 struct io_uring_params params; … … 228 228 229 229 #if !defined(CFA_WITH_IO_URING_IDLE) 230 {231 230 // Step 4 : eventfd 231 // io_uring_register is so f*cking slow on some machine that it 232 // will never succeed if preemption isn't hard blocked 232 233 __cfadbg_print_safe(io_core, "Kernel I/O : registering %d for completion with ring %d\n", procfd, fd); 233 234 … … 238 239 239 240 __cfadbg_print_safe(io_core, "Kernel I/O : registered %d for completion with ring %d\n", procfd, fd); 240 } 241 #endif 242 243 // TODO: implement a proper version of this. 244 // I have not found a better maximum that works in general but users should be able to configure it 245 // the same way they configure other I/O options 246 // #if defined(CFA_HAVE_IORING_REGISTER_IOWQ_MAX_WORKERS) 247 // { 248 // // Step 5 : max worker count 249 // __cfadbg_print_safe(io_core, "Kernel I/O : lmiting max workers for ring %d\n", fd); 250 251 // unsigned int maxes[2]; 252 // maxes[0] = 64; // max number of bounded workers (Regular files / block) 253 // maxes[1] = 64; // max number of unbounded workers (IOSQE_ASYNC) 254 // int ret = syscall( __NR_io_uring_register, fd, IORING_REGISTER_IOWQ_MAX_WORKERS, maxes, 2); 255 // if (ret < 0) { 256 // abort("KERNEL ERROR: IO_URING MAX WORKER REGISTER - %s\n", strerror(errno)); 257 // } 258 259 // __cfadbg_print_safe(io_core, "Kernel I/O : lmited max workers for ring %d\n", fd); 260 // } 261 // #endif 241 #endif 262 242 263 243 // some paranoid checks … … 277 257 } 278 258 279 static void __io_uring_teardown( io_context$& this ) {259 static void __io_uring_teardown( $io_context & this ) { 280 260 // Shutdown the io rings 281 261 struct __sub_ring_t & sq = this.sq; … … 320 300 // I/O Context Sleep 321 301 //============================================================================================= 322 // static inline void __epoll_ctl( io_context$& ctx, int op, const char * error) {302 // static inline void __epoll_ctl($io_context & ctx, int op, const char * error) { 323 303 // struct epoll_event ev; 324 304 // ev.events = EPOLLIN | EPOLLONESHOT; … … 330 310 // } 331 311 332 // static void __epoll_register( io_context$& ctx) {312 // static void __epoll_register($io_context & ctx) { 333 313 // __epoll_ctl(ctx, EPOLL_CTL_ADD, "ADD"); 334 314 // } 335 315 336 // static void __epoll_unregister( io_context$& ctx) {316 // static void __epoll_unregister($io_context & ctx) { 337 317 // // Read the current epoch so we know when to stop 338 318 // size_t curr = __atomic_load_n(&iopoll.epoch, __ATOMIC_SEQ_CST); … … 353 333 // } 354 334 355 // void __ioctx_prepare_block( io_context$& ctx) {335 // void __ioctx_prepare_block($io_context & ctx) { 356 336 // __cfadbg_print_safe(io_core, "Kernel I/O - epoll : Re-arming io poller %d (%p)\n", ctx.fd, &ctx); 357 337 // __epoll_ctl(ctx, EPOLL_CTL_MOD, "REARM"); … … 362 342 // I/O Context Misc Setup 363 343 //============================================================================================= 364 void ?{}( io_arbiter$& this ) {344 void ?{}( $io_arbiter & this ) { 365 345 this.pending.empty = true; 366 346 } 367 347 368 void ^?{}( io_arbiter$ & mutexthis ) {}369 370 io_arbiter$* create(void) {348 void ^?{}( $io_arbiter & this ) {} 349 350 $io_arbiter * create(void) { 371 351 return new(); 372 352 } 373 void destroy( io_arbiter$* arbiter) {353 void destroy($io_arbiter * arbiter) { 374 354 delete(arbiter); 375 355 }
Note:
See TracChangeset
for help on using the changeset viewer.