@@ -195,6 +195,9 @@ var (
195195 mbaEnabled bool
196196 // The flag to indicate if Intel RDT/MBA Software Controller is enabled
197197 mbaScEnabled bool
198+
199+ // For Intel RDT initialization
200+ initOnce sync.Once
198201)
199202
200203type intelRdtData struct {
@@ -203,55 +206,56 @@ type intelRdtData struct {
203206 pid int
204207}
205208
206- // Check if Intel RDT sub-features are enabled in init()
207- func init () {
208- // 1. Check if hardware and kernel support Intel RDT sub-features
209- flagsSet , err := parseCpuInfoFile ("/proc/cpuinfo" )
210- if err != nil {
211- return
212- }
213-
214- // 2. Check if Intel RDT "resource control" filesystem is mounted
215- // The user guarantees to mount the filesystem
216- if ! isIntelRdtMounted () {
217- return
218- }
219-
220- // 3. Double check if Intel RDT sub-features are available in
221- // "resource control" filesystem. Intel RDT sub-features can be
222- // selectively disabled or enabled by kernel command line
223- // (e.g., rdt=!l3cat,mba) in 4.14 and newer kernel
224- if flagsSet .CAT {
225- if _ , err := os .Stat (filepath .Join (intelRdtRoot , "info" , "L3" )); err == nil {
226- catEnabled = true
227- }
228- }
229- if mbaScEnabled {
230- // We confirm MBA Software Controller is enabled in step 2,
231- // MBA should be enabled because MBA Software Controller
232- // depends on MBA
233- mbaEnabled = true
234- } else if flagsSet .MBA {
235- if _ , err := os .Stat (filepath .Join (intelRdtRoot , "info" , "MB" )); err == nil {
236- mbaEnabled = true
209+ // Check if Intel RDT sub-features are enabled in InitIntelRdt()
210+ func InitIntelRdt () {
211+ initOnce .Do (func () {
212+ // 1. Check if hardware and kernel support Intel RDT sub-features
213+ flagsSet , err := parseCpuInfoFile ("/proc/cpuinfo" )
214+ if err != nil {
215+ return
237216 }
238- }
239217
240- if flagsSet .MBMTotal || flagsSet .MBMLocal || flagsSet .CMT {
241- if _ , err := os .Stat (filepath .Join (intelRdtRoot , "info" , "L3_MON" )); err != nil {
218+ // 2. Check if Intel RDT "resource control" filesystem is mounted
219+ // The user guarantees to mount the filesystem
220+ if ! isIntelRdtMounted () {
242221 return
243222 }
244- enabledMonFeatures , err = getMonFeatures (intelRdtRoot )
245- if err != nil {
246- return
223+
224+ // 3. Double check if Intel RDT sub-features are available in
225+ // "resource control" filesystem. Intel RDT sub-features can be
226+ // selectively disabled or enabled by kernel command line
227+ // (e.g., rdt=!l3cat,mba) in 4.14 and newer kernel
228+ if flagsSet .CAT {
229+ if _ , err := os .Stat (filepath .Join (intelRdtRoot , "info" , "L3" )); err == nil {
230+ catEnabled = true
231+ }
247232 }
248- if enabledMonFeatures .mbmTotalBytes || enabledMonFeatures .mbmLocalBytes {
249- mbmEnabled = true
233+ if mbaScEnabled {
234+ // We confirm MBA Software Controller is enabled in step 2,
235+ // MBA should be enabled because MBA Software Controller
236+ // depends on MBA
237+ mbaEnabled = true
238+ } else if flagsSet .MBA {
239+ if _ , err := os .Stat (filepath .Join (intelRdtRoot , "info" , "MB" )); err == nil {
240+ mbaEnabled = true
241+ }
250242 }
251- if enabledMonFeatures .llcOccupancy {
252- cmtEnabled = true
243+ if flagsSet .MBMTotal || flagsSet .MBMLocal || flagsSet .CMT {
244+ if _ , err := os .Stat (filepath .Join (intelRdtRoot , "info" , "L3_MON" )); err != nil {
245+ return
246+ }
247+ enabledMonFeatures , err = getMonFeatures (intelRdtRoot )
248+ if err != nil {
249+ return
250+ }
251+ if enabledMonFeatures .mbmTotalBytes || enabledMonFeatures .mbmLocalBytes {
252+ mbmEnabled = true
253+ }
254+ if enabledMonFeatures .llcOccupancy {
255+ cmtEnabled = true
256+ }
253257 }
254- }
258+ })
255259}
256260
257261// Return the mount point path of Intel RDT "resource control" filesysem
0 commit comments