@@ -30,6 +30,7 @@ use foyer::LfuConfig;
3030use foyer:: PsyncIoEngineBuilder ;
3131use foyer:: RecoverMode ;
3232use foyer:: RuntimeOptions ;
33+ use foyer:: TokioRuntimeOptions ;
3334use mixtrics:: registry:: noop:: NoopMetricsRegistry ;
3435use mixtrics:: registry:: opentelemetry_0_31:: OpenTelemetryMetricsRegistry ;
3536use parse_display:: Display ;
@@ -92,6 +93,34 @@ impl FoyerEngine {
9293 . build ( )
9394 . map_err ( |err| EngineError ( format ! ( "failed to create device: {err}" ) ) ) ?;
9495
96+ let psync_io_engine = PsyncIoEngineBuilder :: new ( )
97+ . build ( )
98+ . await
99+ . map_err ( |err| EngineError ( err. to_string ( ) ) ) ?;
100+
101+ let io_engine = {
102+ #[ cfg( target_os = "linux" ) ]
103+ {
104+ use foyer:: UringIoEngineBuilder ;
105+
106+ UringIoEngineBuilder :: new ( )
107+ . with_sqpoll ( true )
108+ . build ( )
109+ . await
110+ . inspect_err ( |e| {
111+ log:: warn!(
112+ "failed to build io_uring engine, fallback to psync engine: {e}"
113+ ) ;
114+ } )
115+ . unwrap_or ( psync_io_engine)
116+ }
117+
118+ #[ cfg( not( target_os = "linux" ) ) ]
119+ {
120+ psync_io_engine
121+ }
122+ } ;
123+
95124 let parallelism = num_cpus ( ) . get ( ) ;
96125 let cache = HybridCacheBuilder :: new ( )
97126 . with_policy ( HybridCachePolicy :: WriteOnEviction )
@@ -114,14 +143,12 @@ impl FoyerEngine {
114143 . with_block_size ( DEFAULT_BLOCK_SIZE . 0 as usize )
115144 . with_flushers ( DEFAULT_FLUSHERS ) ,
116145 )
117- . with_io_engine (
118- PsyncIoEngineBuilder :: new ( )
119- . build ( )
120- . await
121- . map_err ( |err| EngineError ( err. to_string ( ) ) ) ?,
122- )
146+ . with_io_engine ( io_engine)
123147 . with_recover_mode ( RecoverMode :: Quiet )
124- . with_runtime_options ( RuntimeOptions :: Unified ( Default :: default ( ) ) )
148+ . with_runtime_options ( RuntimeOptions :: Unified ( TokioRuntimeOptions {
149+ worker_threads : 4 ,
150+ max_blocking_threads : num_cpus ( ) . get ( ) * 2 ,
151+ } ) )
125152 . build ( )
126153 . await
127154 . map_err ( |err| EngineError ( err. to_string ( ) ) ) ?;
0 commit comments