@@ -10,7 +10,7 @@ use config::{
1010 DEFAULT_PER_CPU_BUFFER_SIZE , DEFAULT_PREFETCH_AMOUNT , KEEP_FILES ,
1111 MAXIMUM_JIT_PROCESSED_BUCKETS , MAX_INTERMEDIATE_MAP_SIZE , MIN_BUCKET_CHUNKS_FOR_READING_THREAD ,
1212 PACKETS_PRIORITY_DEFAULT , PACKETS_PRIORITY_REWRITTEN , PARTIAL_VECS_CHECKPOINT_SIZE ,
13- USE_SECOND_BUCKET , WORKERS_PRIORITY_BASE ,
13+ PRIORITY_SCHEDULING_BASE , PRIORITY_SCHEDULING_LOW , USE_SECOND_BUCKET , WORKERS_PRIORITY_BASE ,
1414} ;
1515use instrumenter:: local_setup_instrumenter;
1616use io:: compressed_read:: CompressedReadIndipendent ;
@@ -39,6 +39,7 @@ use parallel_processor::execution_manager::packet::{Packet, PacketTrait, Packets
3939use parallel_processor:: memory_fs:: RemoveFileMode ;
4040use parallel_processor:: mt_debug_counters:: counter:: { AtomicCounter , SumMode } ;
4141use parallel_processor:: mt_debug_counters:: declare_counter_i64;
42+ use parallel_processor:: scheduler:: { PriorityScheduler , ThreadPriorityHandle } ;
4243use parallel_processor:: utils:: replace_with_async:: replace_with_async;
4344use std:: cmp:: { max, min, Reverse } ;
4445use std:: collections:: { BinaryHeap , VecDeque } ;
@@ -58,6 +59,7 @@ pub(crate) struct KmersTransformReader<F: KmersTransformExecutorFactory> {
5859pub struct InputBucketDesc {
5960 pub ( crate ) paths : Vec < PathBuf > ,
6061 pub ( crate ) sub_bucket_counters : Vec < BucketCounter > ,
62+ #[ allow( dead_code) ]
6163 pub ( crate ) compaction_delta : i64 ,
6264 pub ( crate ) out_data_format : MinimizerBucketMode ,
6365 pub ( crate ) resplitted : bool ,
@@ -168,11 +170,6 @@ impl<F: KmersTransformExecutorFactory> KmersTransformReader<F> {
168170 } )
169171 . collect ( ) ;
170172
171- let compaction_ratio = sequences_count
172- . saturating_add_signed ( file. compaction_delta )
173- . max ( 16 ) as f64
174- / sequences_count as f64 ;
175-
176173 let total_file_size = readers. iter ( ) . map ( |r| r. get_file_size ( ) ) . sum ( ) ;
177174
178175 bucket_sizes. make_contiguous ( ) . sort ( ) ;
@@ -202,7 +199,7 @@ impl<F: KmersTransformExecutorFactory> KmersTransformReader<F> {
202199
203200 let is_outlier = !file. resplitted
204201 && ( total_sequences > 0 )
205- && ( biggest_sub_bucket. 0 . count as f64 * unique_estimator_factor * compaction_ratio
202+ && ( biggest_sub_bucket. 0 . count as f64 * unique_estimator_factor
206203 >= ( MAX_INTERMEDIATE_MAP_SIZE / F :: MapProcessorType :: MAP_SIZE as u64 ) as f64 ) ;
207204
208205 // if is_outlier {
@@ -398,6 +395,7 @@ impl<F: KmersTransformExecutorFactory> KmersTransformReader<F> {
398395 bucket_info : & BucketsInfo ,
399396 async_reader_thread : Arc < AsyncReaderThread > ,
400397 packets_pool : Arc < PoolObject < PacketsPool < ReadsBuffer < F :: AssociatedExtraData > > > > ,
398+ thread_handle : & ThreadPriorityHandle ,
401399 ) {
402400 if bucket_info. readers . iter ( ) . all ( |r| r. is_finished ( ) ) {
403401 return ;
@@ -494,9 +492,9 @@ impl<F: KmersTransformExecutorFactory> KmersTransformReader<F> {
494492 if buffers[ bucket] . reads. len( ) == buffers[ bucket] . reads. capacity( ) {
495493 match & bucket_info. addresses[ bucket] {
496494 AddressMode :: Send ( address) => {
497- replace_with_async( & mut buffers[ bucket] , |mut buffer| async move {
495+ replace_with_async( & mut buffers[ bucket] , |mut buffer| async {
498496 buffer. sub_bucket = bucket;
499- ops. packet_send( address. clone( ) , buffer) ;
497+ ops. packet_send( address. clone( ) , buffer, thread_handle ) ;
500498 track!( packets_pool. alloc_packet( ) . await , PACKET_ALLOC_COUNTER )
501499 } )
502500 . await ;
@@ -512,7 +510,8 @@ impl<F: KmersTransformExecutorFactory> KmersTransformReader<F> {
512510 }
513511 }
514512 F :: AssociatedExtraData :: clear_temp_buffer( extra_buffer) ;
515- }
513+ } ,
514+ thread_handle
516515 ) ;
517516 }
518517 }
@@ -526,7 +525,7 @@ impl<F: KmersTransformExecutorFactory> KmersTransformReader<F> {
526525 packet. sub_bucket = bucket;
527526 match address {
528527 AddressMode :: Send ( address) => {
529- ops. packet_send ( address. clone ( ) , packet) ;
528+ ops. packet_send ( address. clone ( ) , packet, & thread_handle ) ;
530529 }
531530 AddressMode :: Rewrite ( writer, seq_count, _) => {
532531 Self :: flush_rewrite_bucket :: < MultiplicityModeFromBoolean < WITH_MULTIPLICITY > > (
@@ -563,14 +562,16 @@ impl<F: KmersTransformExecutorFactory> AsyncExecutor for KmersTransformReader<F>
563562 async move {
564563 let mut async_threads = Vec :: new ( ) ;
565564
565+ let thread_handle = PriorityScheduler :: declare_thread ( PRIORITY_SCHEDULING_BASE ) ;
566+
566567 while let Ok ( ( address, _) ) = track ! (
567568 receiver
568- . obtain_address_with_priority( WORKERS_PRIORITY_BASE )
569+ . obtain_address_with_priority( WORKERS_PRIORITY_BASE , & thread_handle )
569570 . await ,
570571 ADDR_WAITING_COUNTER
571572 ) {
572573 let file = track ! (
573- address. receive_packet( ) . await . unwrap( ) ,
574+ address. receive_packet( & thread_handle ) . await . unwrap( ) ,
574575 PACKET_WAITING_COUNTER
575576 ) ;
576577 let is_main_bucket = !file. resplitted && !file. rewritten ;
@@ -604,13 +605,18 @@ impl<F: KmersTransformExecutorFactory> AsyncExecutor for KmersTransformReader<F>
604605 let address = & address;
605606 let buckets_info = & buckets_info;
606607 let packets_pool = address
607- . pool_alloc_await ( max (
608- global_context. max_buckets / 2 ,
609- 2 * buckets_info. addresses . len ( ) ,
610- ) )
608+ . pool_alloc_await (
609+ max (
610+ global_context. max_buckets / 2 ,
611+ 2 * buckets_info. addresses . len ( ) ,
612+ ) ,
613+ & thread_handle,
614+ )
611615 . await ;
612616
613617 spawner. spawn_executor ( async move {
618+ let thread_handle =
619+ PriorityScheduler :: declare_thread ( PRIORITY_SCHEDULING_LOW ) ;
614620 match buckets_info. data_format {
615621 MinimizerBucketMode :: Single => {
616622 Self :: read_bucket :: < false > (
@@ -619,6 +625,7 @@ impl<F: KmersTransformExecutorFactory> AsyncExecutor for KmersTransformReader<F>
619625 buckets_info,
620626 async_thread,
621627 packets_pool,
628+ & thread_handle,
622629 )
623630 . await ;
624631 }
@@ -629,6 +636,7 @@ impl<F: KmersTransformExecutorFactory> AsyncExecutor for KmersTransformReader<F>
629636 buckets_info,
630637 async_thread,
631638 packets_pool,
639+ & thread_handle,
632640 )
633641 . await ;
634642 }
@@ -695,7 +703,7 @@ impl<F: KmersTransformExecutorFactory> AsyncExecutor for KmersTransformReader<F>
695703 }
696704
697705 assert ! ( track!(
698- address. receive_packet( ) . await . is_none( ) ,
706+ address. receive_packet( & thread_handle ) . await . is_none( ) ,
699707 PACKET_WAITING_COUNTER
700708 ) ) ;
701709 }
0 commit comments