diff --git a/cpu.go b/cpu.go
index e04c9ee..5a5d9b3 100644
--- a/cpu.go
+++ b/cpu.go
@@ -13,6 +13,12 @@
 // UInt64 global_eCoreHz;
 // int global_pCoreCount;
 // int global_eCoreCount;
+// int global_pCoreL1InstCacheSize;
+// int global_eCoreL1InstCacheSize;
+// int global_pCoreL1DataCacheSize;
+// int global_eCoreL1DataCacheSize;
+// int global_pCoreL2CacheSize;
+// int global_eCoreL2CacheSize;
 //
 // UInt64 getFrequency(CFTypeRef typeRef) {
 // CFDataRef cfData = typeRef;
@@ -40,6 +46,12 @@
 // void initialize() {
 //   global_pCoreCount = sysctl_int("hw.perflevel0.physicalcpu");
 //   global_eCoreCount = sysctl_int("hw.perflevel1.physicalcpu");
+//   global_pCoreL1InstCacheSize = sysctl_int("hw.perflevel0.l1icachesize");
+//   global_eCoreL1InstCacheSize = sysctl_int("hw.perflevel1.l1icachesize");
+//   global_pCoreL1DataCacheSize = sysctl_int("hw.perflevel0.l1dcachesize");
+//   global_eCoreL1DataCacheSize = sysctl_int("hw.perflevel1.l1dcachesize");
+//   global_pCoreL2CacheSize = sysctl_int("hw.perflevel0.l2cachesize");
+//   global_eCoreL2CacheSize = sysctl_int("hw.perflevel1.l2cachesize");
 //
 //   CFMutableDictionaryRef matching = IOServiceMatching("AppleARMIODevice");
 //   io_iterator_t  iter;
@@ -89,6 +101,30 @@
 // int eCoreCount() {
 //   return global_eCoreCount;
 // }
+//
+// int pCoreL1InstCacheSize() {
+//   return global_pCoreL1InstCacheSize;
+// }
+//
+// int pCoreL1DataCacheSize() {
+//   return global_pCoreL1DataCacheSize;
+// }
+//
+// int pCoreL2CacheSize() {
+//   return global_pCoreL2CacheSize;
+// }
+//
+// int eCoreL1InstCacheSize() {
+//   return global_eCoreL1InstCacheSize;
+// }
+//
+// int eCoreL1DataCacheSize() {
+//   return global_eCoreL1DataCacheSize;
+// }
+//
+// int eCoreL2CacheSize() {
+//   return global_eCoreL2CacheSize;
+// }
 import "C"
 
 func init() {
@@ -129,3 +165,27 @@
 func ECoreCount() int {
 	return int(C.eCoreCount())
 }
+
+// PCoreCacheSize returns the sizes of the P (performance) core cache sizes
+// in the order of
+//
+// - L1 instruction cache
+// - L1 data cache
+// - L2 cache
+func PCoreCache() (int, int, int) {
+	return int(C.pCoreL1InstCacheSize()),
+		int(C.pCoreL1DataCacheSize()),
+		int(C.pCoreL2CacheSize())
+}
+
+// ECoreCacheSize returns the sizes of the E (efficiency) core cache sizes
+// in the order of
+//
+// - L1 instruction cache
+// - L1 data cache
+// - L2 cache
+func ECoreCache() (int, int, int) {
+	return int(C.eCoreL1InstCacheSize()),
+		int(C.eCoreL1DataCacheSize()),
+		int(C.eCoreL2CacheSize())
+}
diff --git a/cpu_test.go b/cpu_test.go
index 34f32e1..704d13a 100644
--- a/cpu_test.go
+++ b/cpu_test.go
@@ -28,6 +28,16 @@
 	must.Greater(t, 1, ghz)
 }
 
+func Test_PCoreCount(t *testing.T) {
+	n := PCoreCount()
+	must.Positive(t, n)
+}
+
+func Test_ECoreCount(t *testing.T) {
+	n := ECoreCount()
+	must.Positive(t, n)
+}
+
 func Test_Show(t *testing.T) {
 	t.Log("pCore Hz", PCoreHz())
 	t.Log("eCore Hz", ECoreHz())
@@ -35,4 +45,10 @@
 	t.Log("eCore GHz", ECoreGHz())
 	t.Log("pCore count", PCoreCount())
 	t.Log("eCoreCount", ECoreCount())
+
+	pL1Inst, pL1Data, pL2 := PCoreCache()
+	t.Log("pCore Caches", pL1Inst, pL1Data, pL2)
+
+	eL1Inst, eL1Data, eL2 := ECoreCache()
+	t.Log("eCore Caches", eL1Inst, eL1Data, eL2)
 }
\ No newline at end of file
