PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/tools/bbquePlatformLayoutParser.awk

https://bitbucket.org/bosp/barbeque
AWK | 162 lines | 127 code | 21 blank | 14 comment | 0 complexity | 636ea9e73e6eba614337a6054cff774c MD5 | raw file
  1. #!/usr/bin/awk -f
  2. BEGIN {
  3. # Setup Filter Variables
  4. FS = "|";
  5. if (!length(BBQUE_USER)) BBQUE_USER="root"
  6. if (!length(BBQUE_UID)) BBQUE_UID="root"
  7. if (!length(BBQUE_GID)) BBQUE_GID="root"
  8. if (!length(BBQUE_CPUP)) BBQUE_CPUP="100000"
  9. # Get IDs of target platform CPUs and MEMs
  10. if (!length(BBQUE_PLAT_CPUS)) BBQUE_PLAT_CPUS="0"
  11. if (!length(BBQUE_PLAT_MEMS)) BBQUE_PLAT_MEMS="0"
  12. if (!length(BBQUE_PLAT_CPUS_EX)) BBQUE_PLAT_CPUS_EX="0"
  13. if (!length(BBQUE_PLAT_MEMS_EX)) BBQUE_PLAT_MEMS_EX="0"
  14. # Dump Configuration header
  15. print "# BarbequeRTRM Managed Linux Platform"
  16. print "# This file has been automatically generated by the BBQUE Platform Builder"
  17. # Dump the ROOT container configuration
  18. print ""
  19. printf "# BarbequeRTRM Root Container\n"
  20. printf "group user.slice {\n"
  21. printf " perm {\n"
  22. printf " task {\n"
  23. printf " uid = root;\n"
  24. printf " gid = root;\n"
  25. printf " }\n"
  26. printf " admin {\n"
  27. printf " uid = root;\n"
  28. printf " gid = root;\n"
  29. printf " }\n"
  30. printf " }\n"
  31. print ""
  32. printf "# This enables configuring a system so that several independent jobs can share\n"
  33. printf "# common kernel data, such as file system pages, while isolating each job's\n"
  34. printf "# user allocation in its own cpuset. To do this, construct a large hardwall\n"
  35. printf "# cpuset to hold all the jobs, and construct child cpusets for each individual\n"
  36. printf "# job which are not hardwall cpusets.\n"
  37. printf " cpuset {\n"
  38. printf " cpuset.cpus = \"%s\";\n", BBQUE_PLAT_CPUS
  39. printf " cpuset.mems = \"%s\";\n", BBQUE_PLAT_MEMS
  40. printf " cpuset.cpu_exclusive = \"%s\";\n", BBQUE_PLAT_CPUS_EX
  41. printf " cpuset.mem_exclusive = \"%s\";\n", BBQUE_PLAT_MEMS_EX
  42. printf " }\n"
  43. printf "}\n"
  44. print ""
  45. # Initialize first node with ID 1, we keep ID 0 for the special HOST node
  46. NODE_COUNT=1
  47. } # BBQ Root Container
  48. /^[# -]/ {
  49. # Jump comments lines
  50. getline
  51. }
  52. /^HOST/ {
  53. # Parsing HOST configuration
  54. gsub(/[[:space:]]*/,"", $2); BBQUE_HOST_CPUS = $2
  55. gsub(/[[:space:]]*/,"", $3); BBQUE_HOST_MEMS = $3
  56. sub(/[[:space:]]*/,"", $4); BBQUE_HOST_DESC = $4
  57. # Dump the HOST container CGroup
  58. print ""
  59. printf "# BarbequeRTRM HOST CPUs container [%s]\n", BBQUE_HOST_DESC
  60. printf "group user.slice/host {\n"
  61. printf " perm {\n"
  62. printf " task {\n"
  63. printf " uid = root;\n"
  64. printf " gid = root;\n"
  65. printf " }\n"
  66. printf " admin {\n"
  67. printf " uid = root;\n"
  68. printf " gid = root;\n"
  69. printf " }\n"
  70. printf " }\n"
  71. printf " cpuset {\n"
  72. printf " cpuset.cpus = \"%s\";\n", BBQUE_HOST_CPUS
  73. printf " cpuset.mems = \"%s\";\n", BBQUE_HOST_MEMS
  74. printf " }\n"
  75. printf "}\n"
  76. print ""
  77. } # BBQ Host Device
  78. /^MDEV/ {
  79. # Parsing MDEV configuration
  80. gsub(/[[:space:]]*/,"", $2); BBQUE_MDEV_CPUS = $2
  81. gsub(/[[:space:]]*/,"", $3); BBQUE_MDEV_MEMS = $3
  82. sub(/[[:space:]]*/,"", $4); BBQUE_MDEV_DESC = $4
  83. # Dump the MDEV container CGroup
  84. print ""
  85. printf "# BarbequeRTRM MDEV CPUs Container [%s]\n", BBQUE_MDEV_DESC
  86. printf "group user.slice/res {\n"
  87. printf " perm {\n"
  88. printf " task {\n"
  89. printf " uid = %s;\n", BBQUE_USER
  90. printf " gid = %s;\n", BBQUE_USER
  91. printf " }\n"
  92. printf " admin {\n"
  93. printf " uid = %s;\n", BBQUE_USER
  94. printf " gid = %s;\n", BBQUE_USER
  95. printf " }\n"
  96. printf " }\n"
  97. printf " cpuset {\n"
  98. printf " cpuset.cpus = \"%s\";\n", BBQUE_MDEV_CPUS
  99. printf " cpuset.mems = \"%s\";\n", BBQUE_MDEV_MEMS
  100. printf " }\n"
  101. printf "}\n"
  102. print ""
  103. } # BBQ Managed CPUs Container
  104. /^NODE/ {
  105. # Parsing NODE configuration
  106. gsub(/[[:space:]]*/,"", $2); BBQUE_NODE_CPUS = $2
  107. gsub(/[[:space:]]*/,"", $3); BBQUE_NODE_CPUQ = ($3*1000)
  108. gsub(/[[:space:]]*/,"", $4); BBQUE_NODE_MEMS = $4
  109. gsub(/[[:space:]]*/,"", $5); BBQUE_NODE_MEMB = ($5*1048576)
  110. # Dump the Managed CPUs device configuration
  111. printf "# Managed CPUs Device, NODE %02d\n", NODE_COUNT
  112. printf "group user.slice/res/node%d {\n", NODE_COUNT
  113. printf " perm {\n"
  114. printf " task {\n"
  115. printf " uid = root;\n"
  116. printf " gid = root;\n"
  117. printf " }\n"
  118. printf " admin {\n"
  119. printf " uid = root;\n"
  120. printf " gid = root;\n"
  121. printf " }\n"
  122. printf " }\n"
  123. printf " cpuset {\n"
  124. printf " cpuset.cpus = \"%s\";\n", BBQUE_NODE_CPUS
  125. printf " cpuset.mems = \"%s\";\n", BBQUE_NODE_MEMS
  126. printf " }\n"
  127. if (BBQUE_FEAT_CPUQ != "N") {
  128. printf " cpu {\n"
  129. printf " cpu.cfs_period_us = \"%s\";\n", BBQUE_CPUP
  130. printf " cpu.cfs_quota_us = \"%s\";\n", BBQUE_NODE_CPUQ
  131. printf " }\n"
  132. }
  133. if (BBQUE_FEAT_MEMC != "N") {
  134. printf " memory {\n"
  135. printf " memory.limit_in_bytes = \"%s\";\n", BBQUE_NODE_MEMB
  136. printf " }\n"
  137. }
  138. printf "}\n"
  139. NODE_COUNT++;
  140. } # BBQ Managed CPUs Cluster
  141. # vim: set tabstop=4: