Skip to content

Commit 91fedaa

Browse files
Tianhan Lufacebook-github-bot
authored andcommitted
Pass stubs via the shared memory when parsing models and queries
Summary: As opposed to copying them to each process. This should improve the performance. Reviewed By: arthaud Differential Revision: D49426887 fbshipit-source-id: f479606d1ed7aece4e7f90cfac43814eafee1ae8
1 parent 5760616 commit 91fedaa

File tree

7 files changed

+30
-11
lines changed

7 files changed

+30
-11
lines changed

source/interprocedural_analyses/taint/modelParser.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3095,7 +3095,7 @@ let create_model_from_attribute
30953095
let is_obscure ~definitions ~stubs call_target =
30963096
(* The callable is obscure if and only if it is a type stub or it is not in the set of known
30973097
definitions. *)
3098-
Hash_set.mem stubs call_target
3098+
Interprocedural.Target.HashsetSharedMemory.ReadOnly.mem stubs call_target
30993099
|| definitions >>| Core.Fn.flip Hash_set.mem call_target >>| not |> Option.value ~default:false
31003100

31013101

source/interprocedural_analyses/taint/modelParser.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ val parse
2828
taint_configuration:TaintConfiguration.Heap.t ->
2929
source_sink_filter:SourceSinkFilter.t option ->
3030
definitions:Interprocedural.Target.HashSet.t option ->
31-
stubs:Interprocedural.Target.HashSet.t ->
31+
stubs:Interprocedural.Target.HashsetSharedMemory.ReadOnly.t ->
3232
python_version:PythonVersion.t ->
3333
unit ->
3434
ModelParseResult.t

source/interprocedural_analyses/taint/taintAnalysis.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ let parse_models_and_queries_from_sources
165165
~python_version
166166
sources
167167
=
168-
(* TODO(T117715045): Do not pass all definitions and stubs explicitly to map_reduce,
168+
(* TODO(T117715045): Do not pass all definitions explicitly to map_reduce,
169169
* since this will marshal-ed between processes and hence is costly. *)
170170
let map sources =
171171
let taint_configuration = TaintConfiguration.SharedMemory.get taint_configuration in
@@ -250,7 +250,7 @@ let initialize_models
250250
~resolution
251251
~source_sink_filter:taint_configuration.source_sink_filter
252252
~definitions:(Some definitions_hashset)
253-
~stubs:stubs_hashset
253+
~stubs:(Interprocedural.Target.HashsetSharedMemory.read_only stubs_shared_memory)
254254
in
255255
Statistics.performance
256256
~name:"Parsed taint models"

source/interprocedural_analyses/taint/test/forwardAnalysisTest.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ let assert_taint ?models ?models_source ~context source expect =
4545
~taint_configuration:TaintConfiguration.Heap.default
4646
~source_sink_filter:None
4747
~definitions:None
48-
~stubs:(Target.HashSet.create ())
48+
~stubs:
49+
([]
50+
|> Interprocedural.Target.HashsetSharedMemory.from_heap
51+
|> Interprocedural.Target.HashsetSharedMemory.read_only)
4952
~python_version:ModelParser.PythonVersion.default
5053
()
5154
in

source/interprocedural_analyses/taint/test/modelTest.ml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,10 @@ let set_up_environment
101101
~taint_configuration
102102
~source_sink_filter:(Some taint_configuration.source_sink_filter)
103103
~definitions:None
104-
~stubs:(Target.HashSet.create ())
104+
~stubs:
105+
([]
106+
|> Interprocedural.Target.HashsetSharedMemory.from_heap
107+
|> Interprocedural.Target.HashsetSharedMemory.read_only)
105108
~python_version:ModelParser.PythonVersion.default
106109
()
107110
in
@@ -211,7 +214,10 @@ let assert_invalid_model ?path ?source ?(sources = []) ~context ~model_source ~e
211214
?path
212215
~source:(Test.trim_extra_indentation model_source)
213216
~definitions:None
214-
~stubs:(Target.HashSet.create ())
217+
~stubs:
218+
([]
219+
|> Interprocedural.Target.HashsetSharedMemory.from_heap
220+
|> Interprocedural.Target.HashsetSharedMemory.read_only)
215221
~python_version:ModelParser.PythonVersion.default
216222
()
217223
|> fun { ModelParseResult.errors; _ } ->

source/interprocedural_analyses/taint/test/testHelper.ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,10 @@ let get_initial_models ~context =
427427
~taint_configuration:TaintConfiguration.Heap.default
428428
~source_sink_filter:None
429429
~definitions:None
430-
~stubs:(Target.HashSet.create ())
430+
~stubs:
431+
([]
432+
|> Interprocedural.Target.HashsetSharedMemory.from_heap
433+
|> Interprocedural.Target.HashsetSharedMemory.read_only)
431434
~python_version:ModelParser.PythonVersion.default
432435
()
433436
in
@@ -546,6 +549,7 @@ let initialize
546549
match models_source with
547550
| None -> Registry.empty, ModelQueryExecution.ModelQueryRegistryMap.empty
548551
| Some source ->
552+
let stubs_shared_memory = Target.HashsetSharedMemory.from_heap stubs in
549553
let { ModelParseResult.models; errors; queries } =
550554
ModelParser.parse
551555
~resolution:global_resolution
@@ -554,7 +558,7 @@ let initialize
554558
~taint_configuration
555559
~source_sink_filter:(Some taint_configuration.source_sink_filter)
556560
~definitions:(Some (Target.HashSet.of_list definitions))
557-
~stubs:(Target.HashSet.of_list stubs)
561+
~stubs:(Target.HashsetSharedMemory.read_only stubs_shared_memory)
558562
~python_version:ModelParser.PythonVersion.default
559563
()
560564
in

source/server/query.ml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,10 @@ let rec process_request_exn ~type_environment ~build_system request =
797797
~taint_configuration
798798
~source_sink_filter:None
799799
~definitions:None
800-
~stubs:(Interprocedural.Target.HashSet.create ())
800+
~stubs:
801+
([]
802+
|> Interprocedural.Target.HashsetSharedMemory.from_heap
803+
|> Interprocedural.Target.HashsetSharedMemory.read_only)
801804
~python_version
802805
()
803806
|> fun { Taint.ModelParseResult.queries; errors; _ } ->
@@ -1019,7 +1022,10 @@ let rec process_request_exn ~type_environment ~build_system request =
10191022
~taint_configuration
10201023
~source_sink_filter:None
10211024
~definitions:None
1022-
~stubs:(Interprocedural.Target.HashSet.create ())
1025+
~stubs:
1026+
([]
1027+
|> Interprocedural.Target.HashsetSharedMemory.from_heap
1028+
|> Interprocedural.Target.HashsetSharedMemory.read_only)
10231029
~python_version
10241030
()
10251031
|> fun { Taint.ModelParseResult.errors; queries; _ } -> errors, queries

0 commit comments

Comments
 (0)