- File:
-
- 1 edited
-
libcfa/src/concurrency/io/setup.cfa (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/io/setup.cfa
rbf0263c r19cb0cb 26 26 27 27 #if !defined(CFA_HAVE_LINUX_IO_URING_H) 28 void ?{}(io_context_params & this) {}29 30 void ?{}( $io_context& this, struct cluster & cl) {}31 void ^?{}( $io_context& this) {}28 void ?{}(io_context_params & this) libcfa_public {} 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) {68 void ?{}(io_context_params & this) libcfa_public { 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 { 230 231 // Step 4 : eventfd 231 // io_uring_register is so f*cking slow on some machine that it232 // will never succeed if preemption isn't hard blocked233 232 __cfadbg_print_safe(io_core, "Kernel I/O : registering %d for completion with ring %d\n", procfd, fd); 234 233 … … 239 238 240 239 __cfadbg_print_safe(io_core, "Kernel I/O : registered %d for completion with ring %d\n", procfd, fd); 241 #endif 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 242 262 243 263 // some paranoid checks … … 257 277 } 258 278 259 static void __io_uring_teardown( $io_context& this ) {279 static void __io_uring_teardown( io_context$ & this ) { 260 280 // Shutdown the io rings 261 281 struct __sub_ring_t & sq = this.sq; … … 300 320 // I/O Context Sleep 301 321 //============================================================================================= 302 // static inline void __epoll_ctl( $io_context& ctx, int op, const char * error) {322 // static inline void __epoll_ctl(io_context$ & ctx, int op, const char * error) { 303 323 // struct epoll_event ev; 304 324 // ev.events = EPOLLIN | EPOLLONESHOT; … … 310 330 // } 311 331 312 // static void __epoll_register( $io_context& ctx) {332 // static void __epoll_register(io_context$ & ctx) { 313 333 // __epoll_ctl(ctx, EPOLL_CTL_ADD, "ADD"); 314 334 // } 315 335 316 // static void __epoll_unregister( $io_context& ctx) {336 // static void __epoll_unregister(io_context$ & ctx) { 317 337 // // Read the current epoch so we know when to stop 318 338 // size_t curr = __atomic_load_n(&iopoll.epoch, __ATOMIC_SEQ_CST); … … 333 353 // } 334 354 335 // void __ioctx_prepare_block( $io_context& ctx) {355 // void __ioctx_prepare_block(io_context$ & ctx) { 336 356 // __cfadbg_print_safe(io_core, "Kernel I/O - epoll : Re-arming io poller %d (%p)\n", ctx.fd, &ctx); 337 357 // __epoll_ctl(ctx, EPOLL_CTL_MOD, "REARM"); … … 342 362 // I/O Context Misc Setup 343 363 //============================================================================================= 344 void ?{}( $io_arbiter& this ) {364 void ?{}( io_arbiter$ & this ) { 345 365 this.pending.empty = true; 346 366 } 347 367 348 void ^?{}( $io_arbiter &this ) {}349 350 $io_arbiter* create(void) {368 void ^?{}( io_arbiter$ & mutex this ) {} 369 370 io_arbiter$ * create(void) { 351 371 return new(); 352 372 } 353 void destroy( $io_arbiter* arbiter) {373 void destroy(io_arbiter$ * arbiter) { 354 374 delete(arbiter); 355 375 }
Note:
See TracChangeset
for help on using the changeset viewer.