@@ -240,28 +240,53 @@ func TestDocker(t *testing.T) {
240
240
require .Equal (t , "1000" , strings .TrimSpace (string (out )))
241
241
242
242
// Validate that memory limit is being applied to the inner container.
243
- out , err = integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
243
+ // First check under cgroupv2 path.
244
+ if out , err = integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
244
245
ContainerID : resource .Container .ID ,
245
- Cmd : []string {"cat" , "/sys/fs/cgroup/memory/memory.limit_in_bytes" },
246
- })
247
- require .NoError (t , err )
248
- require .Equal (t , expectedMemoryLimit , strings .TrimSpace (string (out )))
246
+ Cmd : []string {"cat" , "/sys/fs/cgroup/memory.max" },
247
+ }); err == nil {
248
+ require .Equal (t , expectedMemoryLimit , strings .TrimSpace (string (out )))
249
+ } else { // fall back to cgroupv1 path.
250
+ out , err = integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
251
+ ContainerID : resource .Container .ID ,
252
+ Cmd : []string {"cat" , "/sys/fs/cgroup/memory/memory.limit_in_bytes" },
253
+ })
254
+ require .NoError (t , err )
255
+ require .Equal (t , expectedMemoryLimit , strings .TrimSpace (string (out )))
256
+ }
249
257
250
- periodStr , err := integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
258
+ // Validate the cpu limits are being applied to the inner container.
259
+ // First check under cgroupv2 path.
260
+ var quota , period int64
261
+ if out , err = integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
251
262
ContainerID : resource .Container .ID ,
252
- Cmd : []string {"cat" , "/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us" },
253
- })
254
- require .NoError (t , err )
255
- period , err := strconv .ParseInt (strings .TrimSpace (string (periodStr )), 10 , 64 )
256
- require .NoError (t , err )
263
+ Cmd : []string {"cat" , "/sys/fs/cgroup/cpu.max" },
264
+ }); err == nil {
265
+ // out is in the format "period quota"
266
+ // e.g. "100000 100000"
267
+ fields := strings .Fields (string (out ))
268
+ require .Len (t , fields , 2 )
269
+ period , err = strconv .ParseInt (fields [0 ], 10 , 64 )
270
+ require .NoError (t , err )
271
+ quota , err = strconv .ParseInt (fields [1 ], 10 , 64 )
272
+ require .NoError (t , err )
273
+ } else { // fall back to cgroupv1 path.
274
+ periodStr , err := integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
275
+ ContainerID : resource .Container .ID ,
276
+ Cmd : []string {"cat" , "/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us" },
277
+ })
278
+ require .NoError (t , err )
279
+ period , err = strconv .ParseInt (strings .TrimSpace (string (periodStr )), 10 , 64 )
280
+ require .NoError (t , err )
257
281
258
- quotaStr , err := integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
259
- ContainerID : resource .Container .ID ,
260
- Cmd : []string {"cat" , "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" },
261
- })
262
- require .NoError (t , err )
263
- quota , err := strconv .ParseInt (strings .TrimSpace (string (quotaStr )), 10 , 64 )
264
- require .NoError (t , err )
282
+ quotaStr , err := integrationtest .ExecInnerContainer (t , pool , integrationtest.ExecConfig {
283
+ ContainerID : resource .Container .ID ,
284
+ Cmd : []string {"cat" , "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" },
285
+ })
286
+ require .NoError (t , err )
287
+ quota , err = strconv .ParseInt (strings .TrimSpace (string (quotaStr )), 10 , 64 )
288
+ require .NoError (t , err )
289
+ }
265
290
266
291
// Validate that the CPU limit is being applied to the inner container.
267
292
actualLimit := float64 (quota ) / float64 (period )
0 commit comments