AWS LambdaのCPUを見てみる

昔は使えなかったんですが、いつの間にかmultiprocessingモジュールがサポートされていますね。

さて、とあるサービスの速度改善でシリアル処理をパラレルにしてみたのですが、殆ど改善が見られませんでした。
プロセス起動周りでオーバーヘッドが増えたりして、改善できたかと言えば微妙な結果、、

FAQには

>AWS Lambda のリソースモデルでは、お客様が関数に必要なメモリ量を指定するとそれに比例した CPU パワーとその他のリソースが割り当てられます。たとえば、256 MB のメモリを指定すると約 2 倍の CPU パワーが Lambda 関数に割り当てられます。128 MB のメモリを指定した場合と比較すると CPU パワーは倍となり、512 MB のメモリを指定した場合と比較すると半分になります。メモリは 128 MB から 3 GB まで、64 MB ごとに増加できます。

とあるのですが、ある一定のところまではメモリ増やして改善したのですが、それ以降はどうも改善せず。。
ということで、メモリを128MB、3008MBにして、それぞれ以下のコードをPython3.6ランタイムで実行してみました。

```py
import os
import multiprocessing

def lambda_handler(event, context):
    print(os.cpu_count())
    print(len(os.sched_getaffinity(0)))
    print(multiprocessing.cpu_count())
    return 
```

結果はこちら。

- 128MB

>Function Logs:
START RequestId: b65302db-e2b9-11e7-b501-371c5856c559 Version: $LATEST
2
2
2
END RequestId: b65302db-e2b9-11e7-b501-371c5856c559
REPORT RequestId: b65302db-e2b9-11e7-b501-371c5856c559	Duration: 0.27 ms	Billed Duration: 100 ms 	Memory Size: 128 MB	Max Memory Used: 23 MB	

- 3008MB

>Function Logs:
START RequestId: a9ce5c14-e2b9-11e7-b543-f9c99b5b752f Version: $LATEST
2
2
2
END RequestId: a9ce5c14-e2b9-11e7-b543-f9c99b5b752f
REPORT RequestId: a9ce5c14-e2b9-11e7-b543-f9c99b5b752f	Duration: 15.75 ms	Billed Duration: 100 ms 	Memory Size: 3008 MB	Max Memory Used: 26 MB	

一緒すね（´・ω・`）

今度は以下のソースを実行

```py
import subprocess
    
def lambda_handler(event, context):
    output = subprocess.run(['cat','/proc/cpuinfo'], check=True, stdout=subprocess.PIPE).stdout
    print(output.decode('utf8'))
    return
```

- 128MB

>Function Logs:
START RequestId: 844d00c4-e2bb-11e7-89f4-eb5f7d799335 Version: $LATEST
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 62
model name	: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
stepping	: 4
microcode	: 0x42a
cpu MHz		: 2793.168
cache size	: 25600 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 rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm fsgsbase smep erms xsaveopt
bugs		:
bogomips	: 5586.69
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:
>
>processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 62
model name	: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
stepping	: 4
microcode	: 0x42a
cpu MHz		: 2793.168
cache size	: 25600 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 rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm fsgsbase smep erms xsaveopt
bugs		:
bogomips	: 5586.69
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:
>
>
>END RequestId: 844d00c4-e2bb-11e7-89f4-eb5f7d799335
REPORT RequestId: 844d00c4-e2bb-11e7-89f4-eb5f7d799335	Duration: 10.90 ms	Billed Duration: 100 ms 	Memory Size: 128 MB	Max Memory Used: 23 MB	

- 3008MB

>Function Logs:
START RequestId: af26164d-e2bb-11e7-8023-c7679992e57f Version: $LATEST
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 63
model name	: Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz
stepping	: 2
microcode	: 0x3b
cpu MHz		: 2899.936
cache size	: 25600 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 pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs		:
bogomips	: 5800.06
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:
>
>processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 63
model name	: Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz
stepping	: 2
microcode	: 0x3b
cpu MHz		: 2899.936
cache size	: 25600 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 pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs		:
bogomips	: 5800.06
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:
>
>
>END RequestId: af26164d-e2bb-11e7-8023-c7679992e57f
REPORT RequestId: af26164d-e2bb-11e7-8023-c7679992e57f	Duration: 5.96 ms	Billed Duration: 100 ms 	Memory Size: 3008 MB	Max Memory Used: 25 MB	

残念、、予想通りではありますが、どちらもcpu_coreは1ですね。並列処理にはそりゃ効かないか。
ただCPUパワーはどれほど上がるのか、、と期待しましたけども、model nameでは

Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz

と、それほど差を感じない結果。

http://www.cpu-world.com/Compare/416/Intel_Xeon_E5-2666_v3_vs_Intel_Xeon_E5-2680_v2.html

ちなみに上記のCPUモデルが変わるのは1536MBと1600MBが境界みたいです。

多分vCPUは変わってるんでしょうが、コア数が変わらなければ並列処理に速度改善はそれほど望めない、という感じな結果でした。残念！