Help us understand the problem. What is going on with this article?

Oracle Cloud "Always Free" の Compute oCPU 1/8 をどうやって実現しているのか、推測してみる。

1. Oracle Cloud の Always Free について

OOW 2019(Oracle OpenWorld 2019) で Always Free という Oracle Cloud の新しいトライアルサービスが発表されました。

New Always Free Services
https://www.oracle.com/cloud/free/

[速報]Oracle Cloudを期限なく無料で使える「Always Free」発表。1GBのVM2つ、Autonomous Database 2つなど提供。Oracle OpenWorld 2019
https://www.publickey1.jp/blog/19/oracle_cloudalways_free1gbvm2autonomous_database_2oracle_openworld_2019.html

Oracle Cloudを期限なく無料で使える「Always Free」発表 1GBのVM2つ、Autonomous DB2つなど提供
https://www.itmedia.co.jp/news/articles/1909/17/news076.html

サービスの詳細は公式や各種記事に譲るとして、本記事でフォーカスするのは Computeインスタンスの下記記述彡(゚)(゚)

Compute 2 virtual machines with 1/8 OCPU and 1 GB memory each.

1/8 oCPU って???という訳で、某所でお借りした Always Free の Computeインスタンス(OEL 7.7)を調べてみるやで。

2. /proc/cpuinfo の結果

/proc/cpuinfo の結果は下記の通り、AMD EPYC 7551 の 論理CPU を 2スレッド分、割り当てているもよう彡(゚)(゚)

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7551 32-Core Processor
stepping        : 2
microcode       : 0x1000065
cpu MHz         : 1996.248
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl xtopology cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 virt_ssbd arat
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 3992.49
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD EPYC 7551 32-Core Processor
stepping        : 2
microcode       : 0x1000065
cpu MHz         : 1996.248
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl xtopology cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 virt_ssbd arat
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips        : 3992.49
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

仮想化方式は KVM みたい。

$ dmesg | grep -i virtual
[    0.000000] Booting paravirtualized kernel on KVM
[    1.827450] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
[    1.878451] input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
[    2.286858] systemd[1]: Detected virtualization kvm.

3. vmstat と mpstat を流しながら yes > /dev/null で CPUをぶん回す

下記コマンドで CPU をぶん回してみます。

$ yes > /dev/null

vmstatログは下記の通り、yes > /dev/null 実行タイミング で st値 が上がってますやね~。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0   4876 274120   2896 412016    0    0     0     0  134  245  0  0 88  0 12
 0  0   4876 274120   2896 412016    0    0     0     0  131  239  0  0 93  0  7
 0  0   4876 274120   2896 412016    0    0     0     0  155  284  0  0 98  0  2
 0  0   4876 274120   2896 412016    0    0     0     0  151  261  0  0 95  0  4
 0  0   4876 274120   2896 412016    0    0     0     0  147  260  0  0 96  0  4
 1  0   4876 274152   2896 412016    0    0     0     0  151  262  0  0 92  0  8
 0  0   4876 274152   2896 412016    0    0     0     0  150  270  0  0 91  0  9
 0  0   4876 274152   2896 412016    0    0     0     0  165  293  0  0 95  0  5
 2  0   4876 273928   2896 412024    0    0     8     0  713  200 14  1 56  0 29 ★ここから yes > /dev/null
 3  0   4876 273928   2896 412024    0    0     0     0  846  208 15  5 31  0 50 ★ここから yes > /dev/null
 3  0   4876 273960   2896 412032    0    0     0     0  865  136 16  4 33  0 47 ★ここから yes > /dev/null
 1  0   4876 273960   2896 412032    0    0     0     0  962  130 17  3 33  0 47 ★ここから yes > /dev/null
 2  0   4876 273960   2896 412032    0    0     0     0  888  184 16  4 32  0 48 ★ここから yes > /dev/null
 1  0   4876 273960   2896 412032    0    0     0     0  823  142 15  5 29  0 51 ★ここから yes > /dev/null
 1  0   4876 273960   2896 412032    0    0     0    20  877  177 17  5 25  0 53 ★ここから yes > /dev/null
 3  0   4876 273992   2896 412032    0    0     0     0  902  128 16  4 31  0 49 ★ここから yes > /dev/null
 1  0   4876 273992   2896 412032    0    0     0     0  894  160 19  3 28  0 51 ★ここから yes > /dev/null
:

mpstatログは下記の通り、やはり yes > /dev/null 実行タイミング で %steal の値が上がってます。

$ mpstat 1 -P ALL
:
03:27:07 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:27:08 PM  all    0.49    0.00    0.00    0.00    0.00    0.00    1.97    0.00    0.00   97.54
03:27:08 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    2.00    0.00    0.00   98.00
03:27:08 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    1.98    0.00    0.00   98.02

03:27:08 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03:27:09 PM  all    9.61    0.00    0.87    0.00    0.00    0.00   20.09    0.00    0.00   69.43
03:27:09 PM    0   22.55    0.00    0.00    0.00    0.00    0.00   20.59    0.00    0.00   56.86
03:27:09 PM    1    0.00    0.00    1.56    0.00    0.00    0.00   18.75    0.00    0.00   79.69

03:27:09 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle ★ここから yes > /dev/null
03:27:10 PM  all   15.56    0.00    3.89    0.00    0.00    0.00   48.25    0.00    0.00   32.30 ★ここから yes > /dev/null
03:27:10 PM    0   20.80    0.00    4.80    0.00    0.00    0.00   51.20    0.00    0.00   23.20 ★ここから yes > /dev/null
03:27:10 PM    1   10.69    0.00    3.05    0.00    0.00    0.00   45.80    0.00    0.00   40.46 ★ここから yes > /dev/null

03:27:10 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle ★ここから yes > /dev/null
03:27:11 PM  all   16.26    0.00    3.66    0.00    0.00    0.00   47.97    0.00    0.00   32.11 ★ここから yes > /dev/null
03:27:11 PM    0   23.21    0.00    3.57    0.00    0.00    0.00   51.79    0.00    0.00   21.43 ★ここから yes > /dev/null
03:27:11 PM    1   10.29    0.00    4.41    0.00    0.00    0.00   44.12    0.00    0.00   41.18 ★ここから yes > /dev/null

03:27:11 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle ★ここから yes > /dev/null
03:27:12 PM  all   16.06    0.00    3.61    0.00    0.00    0.00   47.79    0.00    0.00   32.53 ★ここから yes > /dev/null
03:27:12 PM    0   29.36    0.00    2.75    0.00    0.00    0.00   55.05    0.00    0.00   12.84 ★ここから yes > /dev/null
03:27:12 PM    1    5.04    0.00    4.32    0.00    0.00    0.00   43.17    0.00    0.00   47.48 ★ここから yes > /dev/null
:

%steal の値が上昇するということは、仮想化レイヤでGuest OSに割り当てているCPUに何かしらの制御が入ってるということ彡(゚)(゚)

4. KVM の CPU割当時間制御(vcpu_period と vcpu_quota)

KVM の CPU割当時間制御 は 下記を参考にしました。

KVM CPUのリソース制限
http://kt-hiro.hatenablog.com/entry/20180715/1531606948
:
vcpu_period の期間内で「CPU処理時間の合計」> vcpu_quota となると、それ以上はCPU処理時間が割り当てられなくなる。
CPU処理時間は仮想CPU全体で合計されるため、period < quota となる場合もある。
:

20.43. スケジュールパラメーターの設定
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html-single/virtualization_deployment_and_administration_guide/index#sect-Managing_guest_virtual_machines_with_virsh-Setting_schedule_parameters
:
vcpu_period:cpu.cfs_period_us
vcpu_quota:cpu.cfs_quota_us
:

1Core = 2CPU Thread の環境で 1秒間全CPUスレッド を占有すると、quota は 2,000,000μs になる計算です。

推測なんですが、1/8 oCPU は 2スレッド分を丸々占有した CPU時間の 1/8、
vcpu_period=1,000,000, vcpu_quota=250,000 (または同一比の数値) を
KVM側で設定して、制御しているんかと予測彡(゚)(゚)

5. まとめ

Oracle Cloud の Always Free最高や!彡(^)(^)
皆さん、Always Free で どんどん Oracle Cloud を触ってみて下さいね。

New Always Free Services
https://www.oracle.com/cloud/free/
注意事項:携帯番号は 日本は (+81) をつけて 9012345678 と入力します。
※最初の「0」は必ず省きます。省かないと認証のSMSが来ません。

ora_gonsuke777
やきうのお兄ちゃんなITエンジニア、主にOracle Database廻りを担当。日本オラクル株式会社 柴田 歩 ※本ブログに記述された見解は私個人の見解であり、所属する会社&組織の見解を必ずしも反映したものではありません。ご了承ください。
http://d.hatena.ne.jp/gonsuke777/
oracle
Oracle Cloudは、最先端の機能をSoftware as a Service、Platform as a ServiceおよびInfrastructure as a ServiceおよびData as a Serviceとして提供します。
https://cloud.oracle.com/ja_JP/home
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした